From 515cec5ba7f4ca025335a47af8d55a1c3893dfc7 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Arnaud Date: Mon, 6 Apr 2020 12:12:54 +0200 Subject: [PATCH 1/4] remove prefix for default namespace --- yaserde/tests/ser_namespace.rs | 23 ++++++++++++++++++++ yaserde_derive/src/ser/expand_struct.rs | 28 +++++++++++++++---------- yaserde_derive/src/ser/mod.rs | 13 +++++++----- 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/yaserde/tests/ser_namespace.rs b/yaserde/tests/ser_namespace.rs index 0314d56..b6b2717 100644 --- a/yaserde/tests/ser_namespace.rs +++ b/yaserde/tests/ser_namespace.rs @@ -182,6 +182,29 @@ fn ser_struct_default_namespace_via_attribute() { convert_and_validate!(model, content); } +#[test] +fn ser_struct_default_namespace_via_attribute_with_prefix() { + #[derive(YaSerialize, PartialEq, Debug)] + #[yaserde( + root = "tt", + prefix = "TTML", + default_namespace = "TTML", + namespace = "TTML: http://www.w3.org/ns/ttml", + namespace = "ttm: http://www.w3.org/ns/ttml#metadata" + )] + pub struct XmlStruct { + #[yaserde(prefix="TTML")] + item: String, + } + + let model = XmlStruct { + item: "something".to_string(), + }; + + let content = "something"; + convert_and_validate!(model, content); +} + #[test] fn ser_struct_namespace_nested() { #[derive(YaSerialize, Default, PartialEq, Debug)] diff --git a/yaserde_derive/src/ser/expand_struct.rs b/yaserde_derive/src/ser/expand_struct.rs index 3c94d4b..358b7bd 100644 --- a/yaserde_derive/src/ser/expand_struct.rs +++ b/yaserde_derive/src/ser/expand_struct.rs @@ -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 { + 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) } diff --git a/yaserde_derive/src/ser/mod.rs b/yaserde_derive/src/ser/mod.rs index d801b61..69776ba 100644 --- a/yaserde_derive/src/ser/mod.rs +++ b/yaserde_derive/src/ser/mod.rs @@ -15,11 +15,14 @@ pub fn expand_derive_serialize(ast: &syn::DeriveInput) -> Result expand_struct::serialize( From 7de831f27cbecba7df0db99df3eb27598fc317b3 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Arnaud Date: Mon, 6 Apr 2020 12:16:55 +0200 Subject: [PATCH 2/4] format code --- yaserde_derive/src/ser/expand_struct.rs | 30 +++++++++++++------------ yaserde_derive/src/ser/mod.rs | 13 ++++++----- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/yaserde_derive/src/ser/expand_struct.rs b/yaserde_derive/src/ser/expand_struct.rs index 358b7bd..9da7873 100644 --- a/yaserde_derive/src/ser/expand_struct.rs +++ b/yaserde_derive/src/ser/expand_struct.rs @@ -411,22 +411,24 @@ pub fn serialize( } } -fn build_label_name(field: &syn::Field, field_attrs: &YaSerdeAttribute, default_namespace: &Option) -> String { - let prefix = - if default_namespace == &field_attrs.prefix { - "".to_string() - } else { - field_attrs - .prefix - .clone() - .map_or("".to_string(), |prefix| prefix + ":") - }; - - let label = +fn build_label_name( + field: &syn::Field, + field_attrs: &YaSerdeAttribute, + default_namespace: &Option, +) -> String { + let prefix = if default_namespace == &field_attrs.prefix { + "".to_string() + } else { field_attrs - .rename + .prefix .clone() - .unwrap_or_else(|| field.ident.as_ref().unwrap().to_string()); + .map_or("".to_string(), |prefix| prefix + ":") + }; + + let label = field_attrs + .rename + .clone() + .unwrap_or_else(|| field.ident.as_ref().unwrap().to_string()); format!("{}{}", prefix, label) } diff --git a/yaserde_derive/src/ser/mod.rs b/yaserde_derive/src/ser/mod.rs index 69776ba..4aa2002 100644 --- a/yaserde_derive/src/ser/mod.rs +++ b/yaserde_derive/src/ser/mod.rs @@ -15,12 +15,13 @@ pub fn expand_derive_serialize(ast: &syn::DeriveInput) -> Result Date: Mon, 6 Apr 2020 14:04:12 +0200 Subject: [PATCH 3/4] use rust 2018 syntax, remove unused headers --- yaserde/Cargo.toml | 1 + yaserde/src/de/mod.rs | 2 +- yaserde/src/lib.rs | 2 +- yaserde/src/ser/mod.rs | 2 +- yaserde/tests/de_default.rs | 4 ---- yaserde/tests/de_namespace.rs | 4 ---- yaserde/tests/de_option.rs | 4 ---- yaserde/tests/de_type.rs | 4 ---- yaserde/tests/deserializer.rs | 4 ---- yaserde/tests/errors.rs | 4 ---- yaserde/tests/ser_default.rs | 3 --- yaserde/tests/ser_namespace.rs | 5 +---- yaserde/tests/ser_option.rs | 3 --- yaserde/tests/ser_skip.rs | 3 --- yaserde/tests/ser_type.rs | 3 --- yaserde/tests/serializer.rs | 3 --- yaserde_derive/Cargo.toml | 1 + yaserde_derive/src/de/expand_enum.rs | 4 ++-- yaserde_derive/src/de/expand_struct.rs | 6 +++--- yaserde_derive/src/de/mod.rs | 2 +- yaserde_derive/src/ser/element.rs | 2 +- yaserde_derive/src/ser/expand_enum.rs | 4 ++-- yaserde_derive/src/ser/expand_struct.rs | 7 +++---- yaserde_derive/src/ser/mod.rs | 2 +- 24 files changed, 19 insertions(+), 60 deletions(-) diff --git a/yaserde/Cargo.toml b/yaserde/Cargo.toml index 316759f..63b740b 100644 --- a/yaserde/Cargo.toml +++ b/yaserde/Cargo.toml @@ -9,6 +9,7 @@ repository = "https://github.com/media-io/yaserde" homepage = "https://github.com/media-io/yaserde" documentation = "https://docs.rs/yaserde" readme = "../README.md" +edition = "2018" [dependencies] yaserde_derive = { version = "0.3.11", path = "../yaserde_derive", optional = true } diff --git a/yaserde/src/de/mod.rs b/yaserde/src/de/mod.rs index 68938e1..11f44b5 100644 --- a/yaserde/src/de/mod.rs +++ b/yaserde/src/de/mod.rs @@ -1,10 +1,10 @@ //! Generic data structure deserialization framework. //! +use crate::YaDeserialize; use std::io::Read; use xml::name::OwnedName; use xml::reader::{EventReader, ParserConfig, XmlEvent}; -use YaDeserialize; pub fn from_str(s: &str) -> Result { from_reader(s.as_bytes()) diff --git a/yaserde/src/lib.rs b/yaserde/src/lib.rs index d01ce51..8796731 100644 --- a/yaserde/src/lib.rs +++ b/yaserde/src/lib.rs @@ -5,7 +5,7 @@ #[macro_use] extern crate log; -extern crate xml; + #[cfg(feature = "yaserde_derive")] #[allow(unused_imports)] #[macro_use] diff --git a/yaserde/src/ser/mod.rs b/yaserde/src/ser/mod.rs index 3366e21..510099d 100644 --- a/yaserde/src/ser/mod.rs +++ b/yaserde/src/ser/mod.rs @@ -1,12 +1,12 @@ //! Generic data structure serialization framework. //! +use crate::YaSerialize; use std::io::{Cursor, Write}; use std::str; use xml; use xml::writer::XmlEvent; use xml::{EmitterConfig, EventWriter}; -use YaSerialize; pub fn to_string(model: &T) -> Result { let buf = Cursor::new(Vec::new()); diff --git a/yaserde/tests/de_default.rs b/yaserde/tests/de_default.rs index 5654062..bb0c406 100644 --- a/yaserde/tests/de_default.rs +++ b/yaserde/tests/de_default.rs @@ -1,8 +1,4 @@ #[macro_use] -extern crate log; -extern crate xml; -extern crate yaserde; -#[macro_use] extern crate yaserde_derive; use std::io::Read; diff --git a/yaserde/tests/de_namespace.rs b/yaserde/tests/de_namespace.rs index d07d8a9..dd3d94c 100644 --- a/yaserde/tests/de_namespace.rs +++ b/yaserde/tests/de_namespace.rs @@ -1,8 +1,4 @@ #[macro_use] -extern crate log; -extern crate xml; -extern crate yaserde; -#[macro_use] extern crate yaserde_derive; use std::io::Read; diff --git a/yaserde/tests/de_option.rs b/yaserde/tests/de_option.rs index 7167885..a986ce4 100644 --- a/yaserde/tests/de_option.rs +++ b/yaserde/tests/de_option.rs @@ -1,8 +1,4 @@ #[macro_use] -extern crate log; -extern crate xml; -extern crate yaserde; -#[macro_use] extern crate yaserde_derive; use std::io::Read; diff --git a/yaserde/tests/de_type.rs b/yaserde/tests/de_type.rs index e6f82d1..b8775da 100644 --- a/yaserde/tests/de_type.rs +++ b/yaserde/tests/de_type.rs @@ -1,8 +1,4 @@ #[macro_use] -extern crate log; -extern crate xml; -extern crate yaserde; -#[macro_use] extern crate yaserde_derive; use std::io::Read; diff --git a/yaserde/tests/deserializer.rs b/yaserde/tests/deserializer.rs index 0035fe7..bd5474a 100644 --- a/yaserde/tests/deserializer.rs +++ b/yaserde/tests/deserializer.rs @@ -1,8 +1,4 @@ #[macro_use] -extern crate log; -extern crate xml; -extern crate yaserde; -#[macro_use] extern crate yaserde_derive; use std::io::Read; diff --git a/yaserde/tests/errors.rs b/yaserde/tests/errors.rs index ac68639..d91aa8f 100644 --- a/yaserde/tests/errors.rs +++ b/yaserde/tests/errors.rs @@ -1,8 +1,4 @@ #[macro_use] -extern crate log; -extern crate xml; -extern crate yaserde; -#[macro_use] extern crate yaserde_derive; use std::io::Read; diff --git a/yaserde/tests/ser_default.rs b/yaserde/tests/ser_default.rs index 71c6225..b461a7e 100644 --- a/yaserde/tests/ser_default.rs +++ b/yaserde/tests/ser_default.rs @@ -1,6 +1,3 @@ -extern crate log; -extern crate xml; -extern crate yaserde; #[macro_use] extern crate yaserde_derive; diff --git a/yaserde/tests/ser_namespace.rs b/yaserde/tests/ser_namespace.rs index b6b2717..5af32e8 100644 --- a/yaserde/tests/ser_namespace.rs +++ b/yaserde/tests/ser_namespace.rs @@ -1,6 +1,3 @@ -extern crate log; -extern crate xml; -extern crate yaserde; #[macro_use] extern crate yaserde_derive; @@ -193,7 +190,7 @@ fn ser_struct_default_namespace_via_attribute_with_prefix() { namespace = "ttm: http://www.w3.org/ns/ttml#metadata" )] pub struct XmlStruct { - #[yaserde(prefix="TTML")] + #[yaserde(prefix = "TTML")] item: String, } diff --git a/yaserde/tests/ser_option.rs b/yaserde/tests/ser_option.rs index 5e34a6a..26f1c08 100644 --- a/yaserde/tests/ser_option.rs +++ b/yaserde/tests/ser_option.rs @@ -1,6 +1,3 @@ -extern crate log; -extern crate xml; -extern crate yaserde; #[macro_use] extern crate yaserde_derive; diff --git a/yaserde/tests/ser_skip.rs b/yaserde/tests/ser_skip.rs index fef63a8..53c6be0 100644 --- a/yaserde/tests/ser_skip.rs +++ b/yaserde/tests/ser_skip.rs @@ -1,6 +1,3 @@ -extern crate log; -extern crate xml; -extern crate yaserde; #[macro_use] extern crate yaserde_derive; diff --git a/yaserde/tests/ser_type.rs b/yaserde/tests/ser_type.rs index 3bf4934..1506cc2 100644 --- a/yaserde/tests/ser_type.rs +++ b/yaserde/tests/ser_type.rs @@ -1,6 +1,3 @@ -extern crate log; -extern crate xml; -extern crate yaserde; #[macro_use] extern crate yaserde_derive; diff --git a/yaserde/tests/serializer.rs b/yaserde/tests/serializer.rs index 3b73308..cd40425 100644 --- a/yaserde/tests/serializer.rs +++ b/yaserde/tests/serializer.rs @@ -1,6 +1,3 @@ -extern crate log; -extern crate xml; -extern crate yaserde; #[macro_use] extern crate yaserde_derive; diff --git a/yaserde_derive/Cargo.toml b/yaserde_derive/Cargo.toml index 0ce4b68..8b7ba13 100644 --- a/yaserde_derive/Cargo.toml +++ b/yaserde_derive/Cargo.toml @@ -9,6 +9,7 @@ repository = "https://github.com/media-io/yaserde" homepage = "https://github.com/media-io/yaserde" documentation = "https://docs.rs/yaserde" readme = "../README.md" +edition = "2018" [dependencies] syn = { version = "~1.0", features = ["visit", "extra-traits"] } diff --git a/yaserde_derive/src/de/expand_enum.rs b/yaserde_derive/src/de/expand_enum.rs index 5368742..fd17e12 100644 --- a/yaserde_derive/src/de/expand_enum.rs +++ b/yaserde_derive/src/de/expand_enum.rs @@ -1,5 +1,5 @@ -use attribute::*; -use field_type::*; +use crate::attribute::*; +use crate::field_type::*; use proc_macro2::TokenStream; use std::collections::BTreeMap; use syn::spanned::Spanned; diff --git a/yaserde_derive/src/de/expand_struct.rs b/yaserde_derive/src/de/expand_struct.rs index 3618ba4..842c3de 100644 --- a/yaserde_derive/src/de/expand_struct.rs +++ b/yaserde_derive/src/de/expand_struct.rs @@ -1,6 +1,6 @@ -use attribute::*; -use de::build_default_value::build_default_value; -use field_type::*; +use crate::attribute::*; +use crate::de::build_default_value::build_default_value; +use crate::field_type::*; use proc_macro2::{Span, TokenStream}; use std::collections::BTreeMap; use syn::spanned::Spanned; diff --git a/yaserde_derive/src/de/mod.rs b/yaserde_derive/src/de/mod.rs index 455303b..4e3e8ab 100644 --- a/yaserde_derive/src/de/mod.rs +++ b/yaserde_derive/src/de/mod.rs @@ -2,7 +2,7 @@ pub mod build_default_value; pub mod expand_enum; pub mod expand_struct; -use attribute; +use crate::attribute; use proc_macro2::TokenStream; use syn; use syn::Ident; diff --git a/yaserde_derive/src/ser/element.rs b/yaserde_derive/src/ser/element.rs index 5a18601..313be33 100644 --- a/yaserde_derive/src/ser/element.rs +++ b/yaserde_derive/src/ser/element.rs @@ -1,4 +1,4 @@ -use attribute::*; +use crate::attribute::*; use proc_macro2::{Ident, Span, TokenStream}; pub fn enclose_formatted_characters(label: &Ident, label_name: String) -> TokenStream { diff --git a/yaserde_derive/src/ser/expand_enum.rs b/yaserde_derive/src/ser/expand_enum.rs index 32f50ed..f1902be 100644 --- a/yaserde_derive/src/ser/expand_enum.rs +++ b/yaserde_derive/src/ser/expand_enum.rs @@ -1,5 +1,5 @@ -use attribute::*; -use field_type::*; +use crate::attribute::*; +use crate::field_type::*; use proc_macro2::TokenStream; use std::collections::BTreeMap; use syn::spanned::Spanned; diff --git a/yaserde_derive/src/ser/expand_struct.rs b/yaserde_derive/src/ser/expand_struct.rs index 9da7873..1411a03 100644 --- a/yaserde_derive/src/ser/expand_struct.rs +++ b/yaserde_derive/src/ser/expand_struct.rs @@ -1,5 +1,6 @@ -use attribute::*; -use field_type::*; +use crate::attribute::*; +use crate::field_type::*; +use crate::ser::element::*; use proc_macro2::TokenStream; use std::collections::BTreeMap; use std::string::ToString; @@ -7,8 +8,6 @@ use syn::spanned::Spanned; use syn::DataStruct; use syn::Ident; -use ser::element::*; - pub fn serialize( data_struct: &DataStruct, name: &Ident, diff --git a/yaserde_derive/src/ser/mod.rs b/yaserde_derive/src/ser/mod.rs index 4aa2002..68a1532 100644 --- a/yaserde_derive/src/ser/mod.rs +++ b/yaserde_derive/src/ser/mod.rs @@ -2,7 +2,7 @@ pub mod element; pub mod expand_enum; pub mod expand_struct; -use attribute; +use crate::attribute; use proc_macro2::TokenStream; use syn; use syn::Ident; From 468d645e5bd83020e09ac9c9e23f5b70440e0f85 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Arnaud Date: Mon, 6 Apr 2020 14:53:56 +0200 Subject: [PATCH 4/4] update Travis CI --- .travis.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index c0302f0..dc0fd34 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,12 @@ language: rust rust: - 1.36.0 - 1.37.0 - - 1.38.0 - - 1.39.0 + # error on cfg(doctest) + # - 1.38.0 + # - 1.39.0 - 1.40.0 - 1.41.0 + - 1.42.0 - stable - beta - nightly @@ -22,6 +24,8 @@ matrix: - cargo fmt --version script: - cargo fmt -- --check + env: + - CHECK_FORMAT=true # Clippy - rust: stable @@ -30,6 +34,8 @@ matrix: script: # Fail if clippy output contains "error:" or "warning:" - cargo clippy 2>&1 | tee ./clippy.out && ! grep -qe "error:\|warning:" ./clippy.out + env: + - CHECK_SYNTAX=true # Test coverage (with Tarpaulin) - rust: stable @@ -39,6 +45,8 @@ matrix: - RUSTFLAGS="--cfg procmacro2_semver_exempt" cargo install cargo-tarpaulin --force script: - cargo tarpaulin -v --ciserver travis-ci --coveralls $TRAVIS_JOB_ID + env: + - COVERAGE_MEASUREMENT=true script: - cargo test