aboutsummaryrefslogtreecommitdiff
path: root/derive/src/network/mod.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2023-12-20 13:13:00 +0100
committerMax Audron <audron@cocaine.farm>2023-12-20 13:13:00 +0100
commite6980211c4c53fc1eeb686cd12363a8fa603daa3 (patch)
tree2c248fc32d258dea722dbbefd7ab5465954e2ebc /derive/src/network/mod.rs
parentuse VariantMap as target for generic NetworkMap for HashMap impl (diff)
rework Network derives to be more consistent
i don't even know anymore, blame past me
Diffstat (limited to '')
-rw-r--r--derive/src/network/mod.rs42
1 files changed, 12 insertions, 30 deletions
diff --git a/derive/src/network/mod.rs b/derive/src/network/mod.rs
index 2d4c89d..aea8080 100644
--- a/derive/src/network/mod.rs
+++ b/derive/src/network/mod.rs
@@ -20,17 +20,20 @@ pub struct Network {
/// List:
/// Map:
/// Maplist:
-#[derive(Debug, Clone, Copy, PartialEq, FromMeta)]
+#[derive(Debug, Default, Clone, Copy, PartialEq, FromMeta)]
pub enum Repr {
List,
+ #[default]
Map,
Maplist,
}
-impl Default for Repr {
- fn default() -> Self {
- Repr::Map
- }
+#[derive(Debug, Default, Clone, Copy, PartialEq, FromMeta)]
+pub enum NetworkRepr {
+ List,
+ Map,
+ #[default]
+ None,
}
#[derive(Debug, FromField)]
@@ -50,11 +53,7 @@ pub struct NetworkField {
/// field is a nested network repr so
/// use to_network and from_network on it
#[darling(default)]
- network: bool,
- /// When network is true, use map
- /// network representation for this field
- #[darling(default)]
- map: bool,
+ network: NetworkRepr,
/// Skips this field when parsing from network
/// representation and uses the default value of the type
#[darling(default)]
@@ -135,13 +134,13 @@ pub fn network_map(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let to_network_map_vec = match network.repr {
Repr::Maplist => maplist::to_vec(name, &fields),
- Repr::Map => map::to_vec(name, &fields, true),
+ Repr::Map => map::to_vec(name, &fields),
_ => unimplemented!(),
};
let from_network_map_vec = match network.repr {
- Repr::Maplist => maplist::from_vec(name, &fields, true),
- Repr::Map => map::from_vec(name, &fields, true),
+ Repr::Maplist => maplist::from_vec(name, &fields),
+ Repr::Map => map::from_vec(name, &fields),
_ => unimplemented!(),
};
@@ -241,20 +240,3 @@ fn gen_type(typ: &str) -> syn::Type {
},
})
}
-
-fn get_field_type_colon(mut ty: syn::Type) -> syn::Type {
- match &mut ty {
- syn::Type::Path(path) => {
- let first_seg = path.path.segments.first_mut().unwrap();
- match &mut first_seg.arguments {
- syn::PathArguments::AngleBracketed(bracket) => {
- bracket.colon2_token = Some(syn::parse_str("::").unwrap());
- }
- _ => (),
- }
- }
- _ => (),
- };
-
- return ty;
-}