@@ -2,20 +2,44 @@ use std::env;
2
2
use std:: fs:: { self , File } ;
3
3
use std:: io:: { self , BufRead , BufReader , Write } ;
4
4
use std:: path:: { Path , PathBuf } ;
5
- use thiserror:: Error ;
6
5
7
- #[ derive( Error , Debug ) ]
6
+ #[ derive( Debug ) ]
8
7
enum HuskyError {
9
- #[ error( "Git directory not found in '{0}' or its parent directories" ) ]
10
8
GitDirNotFound ( String ) ,
11
- #[ error( "IO error: {0}" ) ]
12
- Io ( #[ from] io:: Error ) ,
13
- #[ error( "Environment variable error: {0}" ) ]
14
- Env ( #[ from] env:: VarError ) ,
15
- #[ error( "User hook script is empty: '{0}'" ) ]
9
+ Io ( io:: Error ) ,
10
+ Env ( env:: VarError ) ,
16
11
EmptyUserHook ( PathBuf ) ,
17
12
}
18
13
14
+ impl std:: fmt:: Display for HuskyError {
15
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
16
+ match self {
17
+ HuskyError :: GitDirNotFound ( path) => write ! (
18
+ f,
19
+ "Git directory not found in '{}' or its parent directories" ,
20
+ path
21
+ ) ,
22
+ HuskyError :: Io ( err) => write ! ( f, "IO error: {}" , err) ,
23
+ HuskyError :: Env ( err) => write ! ( f, "Environment variable error: {}" , err) ,
24
+ HuskyError :: EmptyUserHook ( path) => {
25
+ write ! ( f, "User hook script is empty: '{}'" , path. display( ) )
26
+ }
27
+ }
28
+ }
29
+ }
30
+
31
+ impl From < io:: Error > for HuskyError {
32
+ fn from ( err : io:: Error ) -> Self {
33
+ HuskyError :: Io ( err)
34
+ }
35
+ }
36
+
37
+ impl From < env:: VarError > for HuskyError {
38
+ fn from ( err : env:: VarError ) -> Self {
39
+ HuskyError :: Env ( err)
40
+ }
41
+ }
42
+
19
43
type Result < T > = std:: result:: Result < T , HuskyError > ;
20
44
21
45
const HUSKY_DIR : & str = ".husky" ;
@@ -116,10 +140,7 @@ fn read_file_lines(path: &Path) -> Result<Vec<String>> {
116
140
let file = File :: open ( path) ?;
117
141
let reader = BufReader :: new ( file) ;
118
142
119
- let mut lines: Vec < String > = reader
120
- . lines ( )
121
- . filter_map ( |line| line. map_err ( HuskyError :: from) . ok ( ) ) // Handle HuskyError
122
- . collect ( ) ;
143
+ let mut lines: Vec < String > = reader. lines ( ) . collect :: < io:: Result < _ > > ( ) ?;
123
144
124
145
// Remove leading empty lines
125
146
while lines. first ( ) . map_or ( false , |line| line. trim ( ) . is_empty ( ) ) {
0 commit comments