mirror of
https://github.com/Start9Labs/patch-db.git
synced 2026-03-26 02:11:54 +00:00
fix internally tagged enums
This commit is contained in:
@@ -462,14 +462,14 @@ fn build_model_enum(base: &DeriveInput, ast: &DataEnum) -> TokenStream {
|
|||||||
.attrs
|
.attrs
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|attr| attr.path.is_ident("serde"))
|
.filter(|attr| attr.path.is_ident("serde"))
|
||||||
.filter_map(|attr| {
|
.filter_map(|attr| -> Option<Punctuated<MetaNameValue, Comma>> {
|
||||||
attr.parse_args_with(|s: ParseStream| {
|
attr.parse_args_with(|s: ParseStream| {
|
||||||
Punctuated::<MetaNameValue, Comma>::parse_terminated(s)
|
Punctuated::<MetaNameValue, Comma>::parse_terminated(s)
|
||||||
})
|
})
|
||||||
.ok()
|
.ok()
|
||||||
})
|
})
|
||||||
.flatten()
|
.flatten()
|
||||||
.filter_map(|nv| {
|
.filter_map(|nv: MetaNameValue| {
|
||||||
if nv.path.is_ident("tag") {
|
if nv.path.is_ident("tag") {
|
||||||
Some(("tag", nv.lit))
|
Some(("tag", nv.lit))
|
||||||
} else if nv.path.is_ident("content") {
|
} else if nv.path.is_ident("content") {
|
||||||
@@ -479,6 +479,7 @@ fn build_model_enum(base: &DeriveInput, ast: &DataEnum) -> TokenStream {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let mut model_variants = TokenStream::new();
|
let mut model_variants = TokenStream::new();
|
||||||
let mut ref_model_variants = TokenStream::new();
|
let mut ref_model_variants = TokenStream::new();
|
||||||
let mut mut_model_variants = TokenStream::new();
|
let mut mut_model_variants = TokenStream::new();
|
||||||
@@ -563,11 +564,7 @@ fn build_model_enum(base: &DeriveInput, ast: &DataEnum) -> TokenStream {
|
|||||||
let variant_accessor =
|
let variant_accessor =
|
||||||
get_accessor(&serde_rename_all, &variant.attrs, variant_name);
|
get_accessor(&serde_rename_all, &variant.attrs, variant_name);
|
||||||
tag_variants.extend(quote_spanned! { variant_name.span() =>
|
tag_variants.extend(quote_spanned! { variant_name.span() =>
|
||||||
Some(#variant_accessor) => #match_name::#variant_name(self.transmute(|v| {
|
Some(#variant_accessor) => #match_name::#variant_name(self.transmute(|v| v)),
|
||||||
#[allow(unused_imports)]
|
|
||||||
use patch_db::value::index::Index;
|
|
||||||
#variant_accessor.index_into_owned(v).unwrap_or_default()
|
|
||||||
})),
|
|
||||||
});
|
});
|
||||||
tag_variants_unmatch.extend(quote_spanned! { variant_name.span() =>
|
tag_variants_unmatch.extend(quote_spanned! { variant_name.span() =>
|
||||||
#match_name::#variant_name(v) => Self::from_value({
|
#match_name::#variant_name(v) => Self::from_value({
|
||||||
@@ -577,18 +574,10 @@ fn build_model_enum(base: &DeriveInput, ast: &DataEnum) -> TokenStream {
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
tag_variants_ref.extend(quote_spanned! { variant_name.span() =>
|
tag_variants_ref.extend(quote_spanned! { variant_name.span() =>
|
||||||
Some(#variant_accessor) => #match_name_ref::#variant_name(self.transmute_ref(|v| {
|
Some(#variant_accessor) => #match_name_ref::#variant_name(self.transmute_ref(|v| v)),
|
||||||
#[allow(unused_imports)]
|
|
||||||
use patch_db::value::index::Index;
|
|
||||||
#variant_accessor.index_into(v).unwrap_or(&patch_db::value::NULL)
|
|
||||||
})),
|
|
||||||
});
|
});
|
||||||
tag_variants_mut.extend(quote_spanned! { variant_name.span() =>
|
tag_variants_mut.extend(quote_spanned! { variant_name.span() =>
|
||||||
Some(#variant_accessor) => #match_name_mut::#variant_name(self.transmute_mut(|v| {
|
Some(#variant_accessor) => #match_name_mut::#variant_name(self.transmute_mut(|v| v)),
|
||||||
#[allow(unused_imports)]
|
|
||||||
use patch_db::value::index::Index;
|
|
||||||
#variant_accessor.index_or_insert(v)
|
|
||||||
})),
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
(
|
(
|
||||||
@@ -732,6 +721,7 @@ fn build_model_enum(base: &DeriveInput, ast: &DataEnum) -> TokenStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
#vis enum #match_name {
|
#vis enum #match_name {
|
||||||
#model_variants
|
#model_variants
|
||||||
Error(patch_db::Value),
|
Error(patch_db::Value),
|
||||||
@@ -743,6 +733,7 @@ fn build_model_enum(base: &DeriveInput, ast: &DataEnum) -> TokenStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
#vis enum #match_name_ref<'a> {
|
#vis enum #match_name_ref<'a> {
|
||||||
#ref_model_variants
|
#ref_model_variants
|
||||||
Error(&'a patch_db::Value),
|
Error(&'a patch_db::Value),
|
||||||
@@ -754,6 +745,7 @@ fn build_model_enum(base: &DeriveInput, ast: &DataEnum) -> TokenStream {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
#vis enum #match_name_mut<'a> {
|
#vis enum #match_name_mut<'a> {
|
||||||
#mut_model_variants
|
#mut_model_variants
|
||||||
Error(&'a mut patch_db::Value),
|
Error(&'a mut patch_db::Value),
|
||||||
|
|||||||
Reference in New Issue
Block a user