@@ -43,38 +43,41 @@ impl ExternalHtml {
43
43
}
44
44
}
45
45
46
- pub fn load_string ( input : & Path ) -> io:: Result < Option < String > > {
47
- let mut f = File :: open ( input) ?;
48
- let mut d = Vec :: new ( ) ;
49
- f. read_to_end ( & mut d) ?;
50
- Ok ( str:: from_utf8 ( & d) . map ( |s| s. to_string ( ) ) . ok ( ) )
46
+ pub enum LoadStringError {
47
+ ReadFail ,
48
+ BadUtf8 ,
51
49
}
52
50
53
- macro_rules! load_or_return {
54
- ( $input: expr, $cant_read: expr, $not_utf8: expr) => {
55
- {
56
- let input = Path :: new( & $input[ ..] ) ;
57
- match :: externalfiles:: load_string( input) {
58
- Err ( e) => {
59
- let _ = writeln!( & mut io:: stderr( ) ,
60
- "error reading `{}`: {}" , input. display( ) , e) ;
61
- return $cant_read;
62
- }
63
- Ok ( None ) => {
64
- let _ = writeln!( & mut io:: stderr( ) ,
65
- "error reading `{}`: not UTF-8" , input. display( ) ) ;
66
- return $not_utf8;
67
- }
68
- Ok ( Some ( s) ) => s
69
- }
51
+ pub fn load_string < P : AsRef < Path > > ( file_path : P ) -> Result < String , LoadStringError > {
52
+ let file_path = file_path. as_ref ( ) ;
53
+ let mut contents = vec ! [ ] ;
54
+ let result = File :: open ( file_path)
55
+ . and_then ( |mut f| f. read_to_end ( & mut contents) ) ;
56
+ if let Err ( e) = result {
57
+ let _ = writeln ! ( & mut io:: stderr( ) ,
58
+ "error reading `{}`: {}" ,
59
+ file_path. display( ) , e) ;
60
+ return Err ( LoadStringError :: ReadFail ) ;
61
+ }
62
+ match str:: from_utf8 ( & contents) {
63
+ Ok ( s) => Ok ( s. to_string ( ) ) ,
64
+ Err ( _) => {
65
+ let _ = writeln ! ( & mut io:: stderr( ) ,
66
+ "error reading `{}`: not UTF-8" ,
67
+ file_path. display( ) ) ;
68
+ Err ( LoadStringError :: BadUtf8 )
70
69
}
71
70
}
72
71
}
73
72
74
73
pub fn load_external_files ( names : & [ String ] ) -> Option < String > {
75
74
let mut out = String :: new ( ) ;
76
75
for name in names {
77
- out. push_str ( & * load_or_return ! ( & name, None , None ) ) ;
76
+ let s = match load_string ( name) {
77
+ Ok ( s) => s,
78
+ Err ( _) => return None ,
79
+ } ;
80
+ out. push_str ( & s) ;
78
81
out. push ( '\n' ) ;
79
82
}
80
83
Some ( out)
0 commit comments