@@ -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]
2637resolver = \" 3\"
2738members = [\n workspace_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\n bites_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+
3783fn 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