@@ 9,5 9,6 @@ edition = "2018"
license = "AGPL-3.0-or-later"
[dependencies]
-serde_json = "*"
+serde = "1.0"
+serde_json = "1.0"
typed-urls-derive = { path = "typed-urls-derive/" }=
\ No newline at end of file
@@ 130,6 130,24 @@ fn derive_enum_display_impl(
}
}
+fn derive_enum_serialize_impl(
+ name : &Ident,
+) -> Quote {
+ quote! {
+ impl serde::Serialize for #name {
+ fn serialize<S>(
+ &self,
+ serializer : S,
+ ) -> Result<S::Ok, S::Error>
+ where
+ S : serde::Serializer,
+ {
+ serializer.serialize_str(&self.to_string())
+ }
+ }
+ }
+}
+
fn ident_to_litstr(
prefix : &str,
id : &Ident,
@@ 183,6 201,7 @@ fn derive_typed_url_boilerplate(ast : &DeriveInput) -> Quote {
let route_display = derive_route_display_impl(enum_ast, &fmts, &fields);
let routes = derive_routes_array(enum_ast);
+ let enum_serialize_impl = derive_enum_serialize_impl(enum_name);
let enum_typed_url_impl =
derive_enum_typed_url_impl(enum_name, enum_ast, &typed_field, &fields);
@@ 194,6 213,7 @@ fn derive_typed_url_boilerplate(ast : &DeriveInput) -> Quote {
#route_display
#routes
+ #enum_serialize_impl
#enum_display
#enum_typed_url_impl
}