use heck to force camel case format on Visitor ident

issue #77
This commit is contained in:
Marc-Antoine Arnaud 2020-05-20 16:58:55 +02:00
parent 751f4715a8
commit 0d2058ddb4
4 changed files with 38 additions and 2 deletions

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

@ -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,7 @@ 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,7 @@ 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,
)
}