Skip to content

Commit 51c9337

Browse files
committed
add a root level README.md with links to
... the single bite.md files, divided by level
1 parent 04db3bb commit 51c9337

3 files changed

Lines changed: 59 additions & 22 deletions

File tree

exercise_downloader/Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

exercise_downloader/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[package]
22
name = "pybites-rust-download"
3-
version = "0.1.2"
3+
version = "0.1.3"
44
edition = "2024"
55

66
[dependencies]
77
reqwest = { version="0.12.23" , features = ["blocking", "json"]}
8-
serde = { version = "1.0.225", features = ["derive"] }
8+
serde = { version = "1.0.227", features = ["derive"] }
99

1010
[[bin]]
1111
name = "pybites-rust-download"

exercise_downloader/src/main.rs

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,23 @@ struct Bite {
2020
author: String,
2121
}
2222

23-
fn write_root_toml(path: &Path, all_slugs: String) -> std::io::Result<()> {
23+
fn write_root_toml(path: &Path, bites: &[Bite]) -> std::io::Result<()> {
24+
let workspace_members = bites
25+
.iter()
26+
.map(|bite| {
27+
String::from(" \"")
28+
+ bite.level.clone().as_str()
29+
+ "/"
30+
+ bite.slug.clone().as_str()
31+
+ "\",\n"
32+
})
33+
.collect::<String>();
34+
2435
// main Cargo.toml template
2536
let content = "[workspace]
2637
resolver = \"3\"
2738
members = [\nworkspace_members]"
28-
.replace("workspace_members", &all_slugs);
39+
.replace("workspace_members", &workspace_members);
2940

3041
let filename = path.join("Cargo.toml");
3142
let mut file = File::create(filename)?;
@@ -34,6 +45,41 @@ members = [\nworkspace_members]"
3445
Ok(())
3546
}
3647

48+
fn write_root_readme(path: &Path, bites: &[Bite]) -> std::io::Result<()> {
49+
// main README.md sections
50+
let static_content = "# Pybites Rust\n
51+
https://rustplatform.com/
52+
\n
53+
## Exercises\n\n";
54+
let content_by_level = "### Level: bite_level\nbites_by_level\n";
55+
56+
let filename = path.join("README.md");
57+
let mut file = File::create(filename)?;
58+
file.write_all(static_content.as_bytes())?;
59+
60+
let levels = vec!["intro", "easy", "medium"];
61+
for level in levels {
62+
let bites_by_level = bites
63+
.iter()
64+
.filter(|bite| bite.level == level)
65+
.map(|bite| {
66+
"- [bite_level/bite_slug](bite_level/bite_slug/bite.md)\n"
67+
.replace("bite_level", bite.level.clone().as_str())
68+
.replace("bite_slug", bite.slug.clone().as_str())
69+
})
70+
.collect::<String>();
71+
72+
file.write_all(
73+
content_by_level
74+
.replace("bite_level", level)
75+
.replace("bites_by_level", &bites_by_level)
76+
.as_bytes(),
77+
)?;
78+
}
79+
80+
Ok(())
81+
}
82+
3783
fn write_toml(path: &Path, slug: &str, libraries: &String) -> std::io::Result<()> {
3884
// exercise Cargo.toml template
3985
let content = "[package]
@@ -149,17 +195,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
149195
println!(" ✅");
150196
}
151197

152-
let all_slugs = bites
153-
.iter()
154-
.map(|bite| {
155-
String::from(" \"")
156-
+ bite.level.clone().as_str()
157-
+ "/"
158-
+ bite.slug.clone().as_str()
159-
+ "\",\n"
160-
})
161-
.collect::<String>();
162-
write_root_toml(&base_path, all_slugs)?;
198+
write_root_toml(&base_path, &bites)?;
199+
write_root_readme(&base_path, &bites)?;
163200

164201
Ok(())
165202
}

0 commit comments

Comments
 (0)