remove prefix for default namespace
This commit is contained in:
@@ -27,7 +27,7 @@ pub fn serialize(
|
||||
|
||||
let label = &field.ident;
|
||||
|
||||
let label_name = build_label_name(&field, &field_attrs);
|
||||
let label_name = build_label_name(&field, &field_attrs, default_namespace);
|
||||
|
||||
get_field_type(field).and_then(|f| match f {
|
||||
FieldType::FieldTypeString
|
||||
@@ -240,7 +240,7 @@ pub fn serialize(
|
||||
));
|
||||
}
|
||||
|
||||
let label_name = build_label_name(&field, &field_attrs);
|
||||
let label_name = build_label_name(&field, &field_attrs, default_namespace);
|
||||
let conditions = condition_generator(label, &field_attrs);
|
||||
|
||||
get_field_type(field).and_then(|f| match f {
|
||||
@@ -411,16 +411,22 @@ pub fn serialize(
|
||||
}
|
||||
}
|
||||
|
||||
fn build_label_name(field: &syn::Field, field_attrs: &YaSerdeAttribute) -> String {
|
||||
format!(
|
||||
"{}{}",
|
||||
field_attrs
|
||||
.prefix
|
||||
.clone()
|
||||
.map_or("".to_string(), |prefix| prefix + ":"),
|
||||
fn build_label_name(field: &syn::Field, field_attrs: &YaSerdeAttribute, default_namespace: &Option<String>) -> String {
|
||||
let prefix =
|
||||
if default_namespace == &field_attrs.prefix {
|
||||
"".to_string()
|
||||
} else {
|
||||
field_attrs
|
||||
.prefix
|
||||
.clone()
|
||||
.map_or("".to_string(), |prefix| prefix + ":")
|
||||
};
|
||||
|
||||
let label =
|
||||
field_attrs
|
||||
.rename
|
||||
.clone()
|
||||
.unwrap_or_else(|| field.ident.as_ref().unwrap().to_string())
|
||||
)
|
||||
.unwrap_or_else(|| field.ident.as_ref().unwrap().to_string());
|
||||
|
||||
format!("{}{}", prefix, label)
|
||||
}
|
||||
|
||||
@@ -15,11 +15,14 @@ pub fn expand_derive_serialize(ast: &syn::DeriveInput) -> Result<TokenStream, St
|
||||
let root_attrs = attribute::YaSerdeAttribute::parse(attrs);
|
||||
let root = root_attrs.clone().root.unwrap_or_else(|| name.to_string());
|
||||
|
||||
let root = if let Some(prefix) = root_attrs.prefix {
|
||||
prefix + ":" + &root
|
||||
} else {
|
||||
root
|
||||
};
|
||||
let prefix =
|
||||
if root_attrs.default_namespace == root_attrs.prefix {
|
||||
"".to_string()
|
||||
} else {
|
||||
root_attrs.prefix.map_or("".to_string(), |prefix| prefix + ":")
|
||||
};
|
||||
|
||||
let root = format!("{}{}", prefix, root);
|
||||
|
||||
let impl_block = match *data {
|
||||
syn::Data::Struct(ref data_struct) => expand_struct::serialize(
|
||||
|
||||
Reference in New Issue
Block a user