Merge pull request #78 from media-io/fix_visitor_label

Fix visitor label
This commit is contained in:
Marc-Antoine ARNAUD 2020-05-20 19:03:12 +02:00 committed by GitHub
commit 06dfc427fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 48 additions and 4 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "yaserde"
version = "0.3.16"
version = "0.3.17"
authors = ["Marc-Antoine Arnaud <arnaud.marcantoine@gmail.com>"]
description = "Serialization and deserialization library"
keywords = ["Serialization", "Deserialization", "XML"]

View File

@ -46,6 +46,39 @@ fn de_basic() {
);
}
#[test]
fn de_dash_param() {
#[derive(YaDeserialize, PartialEq, Debug)]
#[yaserde(root = "book")]
pub struct Book {
#[yaserde(rename = "author-release")]
author: String,
title: String,
}
let content =
"<book><author-release>Antoine de Saint-Exupéry</author-release><title>Little prince</title></book>";
convert_and_validate!(
content,
Book,
Book {
author: String::from("Antoine de Saint-Exupéry"),
title: String::from("Little prince"),
}
);
let content =
"<book><title>Little prince</title><author-release>Antoine de Saint-Exupéry</author-release></book>";
convert_and_validate!(
content,
Book,
Book {
author: String::from("Antoine de Saint-Exupéry"),
title: String::from("Little prince"),
}
);
}
#[test]
fn de_multiple_segments() {
mod other_mod {

View File

@ -1,6 +1,6 @@
[package]
name = "yaserde_derive"
version = "0.3.16"
version = "0.3.17"
authors = ["Marc-Antoine Arnaud <arnaud.marcantoine@gmail.com>"]
description = "Serialization and deserialization macros"
keywords = ["Serialization", "Deserialization"]
@ -12,6 +12,7 @@ readme = "../README.md"
edition = "2018"
[dependencies]
heck = "0.3.1"
syn = { version = "~1.0", features = ["visit", "extra-traits"] }
proc-macro2 = "~1.0"
quote = "~1.0"

View File

@ -1,4 +1,5 @@
use crate::common::attribute::YaSerdeAttribute;
use heck::CamelCase;
use proc_macro2::Span;
use proc_macro2::{Ident, TokenStream};
use std::fmt;
@ -84,7 +85,11 @@ impl YaSerdeField {
);
Ident::new(
&format!("__Visitor_{}_{}", label.replace(".", "_"), struct_id),
&format!(
"__Visitor_{}_{}",
label.replace(".", "_").to_camel_case(),
struct_id
),
self.get_span(),
)
}

View File

@ -1,5 +1,6 @@
use crate::common::{Field, YaSerdeAttribute, YaSerdeField};
use crate::de::build_default_value::build_default_value;
use heck::CamelCase;
use proc_macro2::{Span, TokenStream};
use syn::{DataStruct, Ident};
@ -447,7 +448,11 @@ fn build_visitor_ident(label: &str, span: Span, struct_name: Option<&syn::Path>)
);
Ident::new(
&format!("__Visitor_{}_{}", label.replace(".", "_"), struct_id),
&format!(
"__Visitor_{}_{}",
label.replace(".", "_").to_camel_case(),
struct_id
),
span,
)
}