@@ -66,15 +66,28 @@ pub struct ReadFileOptions {
6666 pub flag : Option < String > ,
6767}
6868
69+ fn normalize_read_file_options (
70+ options : Option < Either < String , ReadFileOptions > > ,
71+ ) -> ReadFileOptions {
72+ match options {
73+ Some ( Either :: A ( encoding) ) => ReadFileOptions {
74+ encoding : Some ( encoding) ,
75+ flag : None ,
76+ } ,
77+ Some ( Either :: B ( opts) ) => opts,
78+ None => ReadFileOptions {
79+ encoding : None ,
80+ flag : None ,
81+ } ,
82+ }
83+ }
84+
6985fn read_file_impl (
7086 path_str : String ,
71- options : Option < ReadFileOptions > ,
87+ options : Option < Either < String , ReadFileOptions > > ,
7288) -> Result < Either < String , Buffer > > {
7389 let path = Path :: new ( & path_str) ;
74- let opts = options. unwrap_or ( ReadFileOptions {
75- encoding : None ,
76- flag : None ,
77- } ) ;
90+ let opts = normalize_read_file_options ( options) ;
7891
7992 let flag = opts. flag . as_deref ( ) . unwrap_or ( "r" ) ;
8093
@@ -142,7 +155,7 @@ fn read_file_impl(
142155#[ napi( js_name = "readFileSync" ) ]
143156pub fn read_file_sync (
144157 path : String ,
145- options : Option < ReadFileOptions > ,
158+ options : Option < Either < String , ReadFileOptions > > ,
146159) -> Result < Either < String , Buffer > > {
147160 read_file_impl ( path, options)
148161}
@@ -151,7 +164,7 @@ pub fn read_file_sync(
151164
152165pub struct ReadFileTask {
153166 pub path : String ,
154- pub options : Option < ReadFileOptions > ,
167+ pub options : Option < Either < String , ReadFileOptions > > ,
155168}
156169
157170impl Task for ReadFileTask {
@@ -168,6 +181,9 @@ impl Task for ReadFileTask {
168181}
169182
170183#[ napi( js_name = "readFile" ) ]
171- pub fn read_file ( path : String , options : Option < ReadFileOptions > ) -> AsyncTask < ReadFileTask > {
184+ pub fn read_file (
185+ path : String ,
186+ options : Option < Either < String , ReadFileOptions > > ,
187+ ) -> AsyncTask < ReadFileTask > {
172188 AsyncTask :: new ( ReadFileTask { path, options } )
173189}
0 commit comments