44
55use std:: {
66 convert:: Into ,
7- fmt:: Display ,
87 fs,
98 io:: { self , Write } ,
109 path:: { Path , PathBuf } ,
@@ -109,13 +108,13 @@ impl ToTokens for EmbedAssets {
109108 }
110109}
111110
112- struct AssetsDir ( ValidAssetsDirTypes ) ;
111+ struct AssetsDir ( LitStr ) ;
113112
114113impl Parse for AssetsDir {
115114 fn parse ( input : ParseStream ) -> syn:: Result < Self > {
116115 let input_span = input. span ( ) ;
117- let assets_dir: ValidAssetsDirTypes = input. parse ( ) ?;
118- let literal = assets_dir. to_string ( ) ;
116+ let assets_dir: LitStr = input. parse ( ) ?;
117+ let literal = assets_dir. value ( ) ;
119118 let path = Path :: new ( & literal) ;
120119 let metadata = match fs:: metadata ( path) {
121120 Ok ( meta) => meta,
@@ -147,36 +146,6 @@ impl Parse for AssetsDir {
147146 }
148147}
149148
150- enum ValidAssetsDirTypes {
151- LiteralStr ( LitStr ) ,
152- Ident ( Ident ) ,
153- }
154-
155- impl Display for ValidAssetsDirTypes {
156- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
157- match self {
158- Self :: LiteralStr ( inner) => write ! ( f, "{}" , inner. value( ) ) ,
159- Self :: Ident ( inner) => write ! ( f, "{inner}" ) ,
160- }
161- }
162- }
163-
164- impl Parse for ValidAssetsDirTypes {
165- fn parse ( input : ParseStream ) -> syn:: Result < Self > {
166- if let Ok ( inner) = input. parse :: < LitStr > ( ) {
167- Ok ( ValidAssetsDirTypes :: LiteralStr ( inner) )
168- } else {
169- let inner = input. parse :: < Ident > ( ) . map_err ( |_| {
170- syn:: Error :: new (
171- input. span ( ) ,
172- "Assets directory must be a literal string or valid identifier" ,
173- )
174- } ) ?;
175- Ok ( ValidAssetsDirTypes :: Ident ( inner) )
176- }
177- }
178- }
179-
180149struct IgnoreDirs ( Vec < PathBuf > ) ;
181150
182151struct IgnoreDirsWithSpan ( Vec < ( PathBuf , Span ) > ) ;
@@ -190,11 +159,12 @@ impl Parse for IgnoreDirsWithSpan {
190159 while !inner_content. is_empty ( ) {
191160 let directory_span = inner_content. span ( ) ;
192161 let directory_str = inner_content. parse :: < LitStr > ( ) ?;
162+ let path = PathBuf :: from ( directory_str. value ( ) ) ;
163+ dirs. push ( ( path, directory_span) ) ;
164+
193165 if !inner_content. is_empty ( ) {
194166 inner_content. parse :: < Token ! [ , ] > ( ) ?;
195167 }
196- let path = PathBuf :: from ( directory_str. value ( ) ) ;
197- dirs. push ( ( path, directory_span) ) ;
198168 }
199169
200170 Ok ( IgnoreDirsWithSpan ( dirs) )
@@ -203,11 +173,11 @@ impl Parse for IgnoreDirsWithSpan {
203173
204174fn validate_ignore_dirs (
205175 ignore_dirs : IgnoreDirsWithSpan ,
206- assets_dir : & ValidAssetsDirTypes ,
176+ assets_dir : & LitStr ,
207177) -> syn:: Result < IgnoreDirs > {
208178 let mut valid_ignore_dirs = Vec :: new ( ) ;
209179 for ( dir, span) in ignore_dirs. 0 {
210- let full_path = PathBuf :: from ( assets_dir. to_string ( ) ) . join ( & dir) ;
180+ let full_path = PathBuf :: from ( assets_dir. value ( ) ) . join ( & dir) ;
211181 match fs:: metadata ( & full_path) {
212182 Ok ( meta) if !meta. is_dir ( ) => {
213183 return Err ( syn:: Error :: new (
@@ -247,11 +217,11 @@ impl Parse for ShouldCompress {
247217}
248218
249219fn generate_static_routes (
250- assets_dir : & ValidAssetsDirTypes ,
220+ assets_dir : & LitStr ,
251221 ignore_dirs : & IgnoreDirs ,
252222 should_compress : & LitBool ,
253223) -> Result < TokenStream , error:: Error > {
254- let assets_dir_abs = Path :: new ( & assets_dir. to_string ( ) )
224+ let assets_dir_abs = Path :: new ( & assets_dir. value ( ) )
255225 . canonicalize ( )
256226 . map_err ( Error :: CannotCanonicalizeDirectory ) ?;
257227 let assets_dir_abs_str = assets_dir_abs
0 commit comments