diff --git a/yaserde/tests/deserializer.rs b/yaserde/tests/deserializer.rs
index 08bc993..947516b 100644
--- a/yaserde/tests/deserializer.rs
+++ b/yaserde/tests/deserializer.rs
@@ -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 =
+ "Antoine de Saint-ExupéryLittle prince";
+ convert_and_validate!(
+ content,
+ Book,
+ Book {
+ author: String::from("Antoine de Saint-Exupéry"),
+ title: String::from("Little prince"),
+ }
+ );
+
+ let content =
+ "Little princeAntoine de Saint-Exupéry";
+ 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 {
diff --git a/yaserde_derive/Cargo.toml b/yaserde_derive/Cargo.toml
index 9435237..2a7a1b7 100644
--- a/yaserde_derive/Cargo.toml
+++ b/yaserde_derive/Cargo.toml
@@ -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"
diff --git a/yaserde_derive/src/common/field.rs b/yaserde_derive/src/common/field.rs
index 2fc2746..c844bc5 100644
--- a/yaserde_derive/src/common/field.rs
+++ b/yaserde_derive/src/common/field.rs
@@ -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(),
)
}
diff --git a/yaserde_derive/src/de/expand_struct.rs b/yaserde_derive/src/de/expand_struct.rs
index bd9c718..a19d19a 100644
--- a/yaserde_derive/src/de/expand_struct.rs
+++ b/yaserde_derive/src/de/expand_struct.rs
@@ -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,
)
}