|
1 | | -// Copyright 2024 Oxide Computer Company |
| 1 | +// Copyright 2025 Oxide Computer Company |
2 | 2 |
|
3 | 3 | //! typify macro implementation. |
4 | 4 |
|
@@ -84,7 +84,7 @@ struct MacroSettings { |
84 | 84 | #[serde(default)] |
85 | 85 | crates: HashMap<CrateName, MacroCrateSpec>, |
86 | 86 | #[serde(default)] |
87 | | - map_type: MapType, |
| 87 | + map_type: Option<ParseWrapper<syn::Type>>, |
88 | 88 |
|
89 | 89 | #[serde(default)] |
90 | 90 | patch: HashMap<ParseWrapper<syn::Ident>, MacroPatch>, |
@@ -223,7 +223,9 @@ fn do_import_types(item: TokenStream) -> Result<TokenStream, syn::Error> { |
223 | 223 | ); |
224 | 224 | settings.with_unknown_crates(unknown_crates); |
225 | 225 |
|
226 | | - settings.with_map_type(map_type); |
| 226 | + if let Some(map_type) = map_type { |
| 227 | + settings.with_map_type(MapType(map_type.into_inner())); |
| 228 | + } |
227 | 229 |
|
228 | 230 | (schema.into_inner(), settings) |
229 | 231 | }; |
@@ -263,3 +265,25 @@ fn do_import_types(item: TokenStream) -> Result<TokenStream, syn::Error> { |
263 | 265 | fn into_syn_err(e: typify_impl::Error, span: proc_macro2::Span) -> syn::Error { |
264 | 266 | syn::Error::new(span, e.to_string()) |
265 | 267 | } |
| 268 | + |
| 269 | +#[cfg(test)] |
| 270 | +mod tests { |
| 271 | + use quote::quote; |
| 272 | + |
| 273 | + use crate::MacroSettings; |
| 274 | + |
| 275 | + #[test] |
| 276 | + fn test_settings() { |
| 277 | + let item = quote! { |
| 278 | + schema = "foo.json", |
| 279 | + derives = [::foo::Foo, ::bar::Bar], |
| 280 | + replace = { |
| 281 | + Baz = ::baz::Baz, |
| 282 | + }, |
| 283 | + struct_builder = true, |
| 284 | + map_type = ::my::map::Type, |
| 285 | + }; |
| 286 | + |
| 287 | + let MacroSettings { .. } = serde_tokenstream::from_tokenstream(&item.into()).unwrap(); |
| 288 | + } |
| 289 | +} |
0 commit comments