mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-25 00:00:05 +03:00
Move info.toml to rustlings-macros/
This improves the experience for contributors on Windows becuase Windows can't deal with git symbolic links out of the box…
This commit is contained in:
parent
d9df809838
commit
11fda5d70f
|
@ -37,7 +37,7 @@ Please be patient 😇
|
|||
- Name the file `exercises/yourTopic/yourTopicN.rs`.
|
||||
- Make sure to put in some helpful links, and link to sections of the book in `exercises/yourTopic/README.md`.
|
||||
- Add a (possible) solution at `solutions/yourTopic/yourTopicN.rs` with comments and links explaining it.
|
||||
- Add the [metadata for your exercise](#exercise-metadata) in the `info.toml` file.
|
||||
- Add the [metadata for your exercise](#exercise-metadata) in the `rustlings-macros/info.toml` file.
|
||||
- Make sure your exercise runs with `rustlings run yourTopicN`.
|
||||
- [Open a pull request](#pull-requests).
|
||||
|
||||
|
|
|
@ -39,7 +39,6 @@ include = [
|
|||
"/src/",
|
||||
"/exercises/",
|
||||
"/solutions/",
|
||||
"/info.toml",
|
||||
# A symlink to be able to include `dev/Cargo.toml` although `dev` is excluded.
|
||||
"/dev-Cargo.toml",
|
||||
"/README.md",
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
../info.toml
|
1286
rustlings-macros/info.toml
Normal file
1286
rustlings-macros/info.toml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -15,7 +15,8 @@ struct InfoFile {
|
|||
|
||||
#[proc_macro]
|
||||
pub fn include_files(_: TokenStream) -> TokenStream {
|
||||
let exercises = toml_edit::de::from_str::<InfoFile>(include_str!("../info.toml"))
|
||||
let info_file = include_str!("../info.toml");
|
||||
let exercises = toml_edit::de::from_str::<InfoFile>(info_file)
|
||||
.expect("Failed to parse `info.toml`")
|
||||
.exercises;
|
||||
|
||||
|
@ -46,6 +47,7 @@ pub fn include_files(_: TokenStream) -> TokenStream {
|
|||
|
||||
quote! {
|
||||
EmbeddedFiles {
|
||||
info_file: #info_file,
|
||||
exercise_files: &[#(ExerciseFiles { exercise: include_bytes!(#exercise_files), solution: include_bytes!(#solution_files), dir_ind: #dir_inds }),*],
|
||||
exercise_dirs: &[#(ExerciseDir { name: #dirs, readme: include_bytes!(#readmes) }),*]
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@ impl ExerciseDir {
|
|||
}
|
||||
|
||||
pub struct EmbeddedFiles {
|
||||
pub info_file: &'static str,
|
||||
exercise_files: &'static [ExerciseFiles],
|
||||
exercise_dirs: &'static [ExerciseDir],
|
||||
}
|
||||
|
@ -148,7 +149,7 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn dirs() {
|
||||
let exercises = toml_edit::de::from_str::<InfoFile>(include_str!("../info.toml"))
|
||||
let exercises = toml_edit::de::from_str::<InfoFile>(EMBEDDED_FILES.info_file)
|
||||
.expect("Failed to parse `info.toml`")
|
||||
.exercises;
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@ use anyhow::{bail, Context, Error, Result};
|
|||
use serde::Deserialize;
|
||||
use std::{fs, io::ErrorKind};
|
||||
|
||||
use crate::embedded::EMBEDDED_FILES;
|
||||
|
||||
// Deserialized from the `info.toml` file.
|
||||
#[derive(Deserialize)]
|
||||
pub struct ExerciseInfo {
|
||||
|
@ -47,7 +49,7 @@ impl InfoFile {
|
|||
.context("Failed to parse the `info.toml` file")?,
|
||||
Err(e) => {
|
||||
if e.kind() == ErrorKind::NotFound {
|
||||
return toml_edit::de::from_str(include_str!("../info.toml"))
|
||||
return toml_edit::de::from_str(EMBEDDED_FILES.info_file)
|
||||
.context("Failed to parse the embedded `info.toml` file");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue