@@ -2,6 +2,7 @@ use crate::exercise::{Exercise, ExerciseList};
2
2
use crate :: run:: run;
3
3
use crate :: verify:: verify;
4
4
use clap:: { crate_version, App , Arg , SubCommand } ;
5
+ use console:: Emoji ;
5
6
use notify:: DebouncedEvent ;
6
7
use notify:: { RecommendedWatcher , RecursiveMode , Watcher } ;
7
8
use std:: ffi:: OsStr ;
@@ -102,7 +103,21 @@ fn main() {
102
103
}
103
104
104
105
if matches. subcommand_matches ( "watch" ) . is_some ( ) {
105
- watch ( & exercises) . unwrap ( ) ;
106
+ if watch ( & exercises) . is_ok ( ) {
107
+ println ! (
108
+ "{emoji} All exercises completed! {emoji}" ,
109
+ emoji = Emoji ( "🎉" , "★" )
110
+ ) ;
111
+ println ! ( "" ) ;
112
+ println ! ( "We hope you enjoyed learning about the various aspects of Rust!" ) ;
113
+ println ! (
114
+ "If you noticed any issues, please don't hesitate to report them to our repo."
115
+ ) ;
116
+ println ! ( "You can also contribute your own exercises to help the greater community!" ) ;
117
+ println ! ( "" ) ;
118
+ println ! ( "Before reporting an issue or contributing, please read our guidelines:" ) ;
119
+ println ! ( "https://github.com/rust-lang/rustlings/blob/master/CONTRIBUTING.md" ) ;
120
+ }
106
121
}
107
122
108
123
if matches. subcommand_name ( ) . is_none ( ) {
@@ -144,10 +159,12 @@ fn watch(exercises: &[Exercise]) -> notify::Result<()> {
144
159
watcher. watch ( Path :: new ( "./exercises" ) , RecursiveMode :: Recursive ) ?;
145
160
146
161
clear_screen ( ) ;
147
- let verify_result = verify ( exercises. iter ( ) ) ;
148
162
149
163
let to_owned_hint = |t : & Exercise | t. hint . to_owned ( ) ;
150
- let failed_exercise_hint = Arc :: new ( Mutex :: new ( verify_result. map_err ( to_owned_hint) . err ( ) ) ) ;
164
+ let failed_exercise_hint = match verify ( exercises. iter ( ) ) {
165
+ Ok ( _) => return Ok ( ( ) ) ,
166
+ Err ( exercise) => Arc :: new ( Mutex :: new ( Some ( to_owned_hint ( exercise) ) ) ) ,
167
+ } ;
151
168
spawn_watch_shell ( & failed_exercise_hint) ;
152
169
loop {
153
170
match rx. recv ( ) {
@@ -159,9 +176,13 @@ fn watch(exercises: &[Exercise]) -> notify::Result<()> {
159
176
. iter ( )
160
177
. skip_while ( |e| !filepath. ends_with ( & e. path ) ) ;
161
178
clear_screen ( ) ;
162
- let verify_result = verify ( pending_exercises) ;
163
- let mut failed_exercise_hint = failed_exercise_hint. lock ( ) . unwrap ( ) ;
164
- * failed_exercise_hint = verify_result. map_err ( to_owned_hint) . err ( ) ;
179
+ match verify ( pending_exercises) {
180
+ Ok ( _) => return Ok ( ( ) ) ,
181
+ Err ( exercise) => {
182
+ let mut failed_exercise_hint = failed_exercise_hint. lock ( ) . unwrap ( ) ;
183
+ * failed_exercise_hint = Some ( to_owned_hint ( exercise) ) ;
184
+ }
185
+ }
165
186
}
166
187
}
167
188
_ => { }
0 commit comments