xsd-parser 1.5.2

Rust code generator for XML schema files
Documentation
mod quick_xml;
mod serde_xml_rs_v7;
mod serde_xml_rs_v8;

use std::str::FromStr;

use proc_macro2::TokenStream;

use crate::models::{code::IdentPath, data::ComplexDataContent, meta::MetaTypes};
use crate::TypeIdent;

pub use self::quick_xml::SerdeQuickXmlTypesRenderStep;
pub use self::serde_xml_rs_v7::SerdeXmlRsV7TypesRenderStep;
pub use self::serde_xml_rs_v8::SerdeXmlRsV8TypesRenderStep;

use super::super::Context;

impl ComplexDataContent<'_> {
    fn is_empty_string_content(&self, types: &MetaTypes) -> bool {
        if let Some(ident) = &self.simple_type {
            if let Some(ident) = types.get_resolved_ident(ident) {
                if ident.matches(&TypeIdent::STRING) {
                    return true;
                }
            }
        }

        false
    }
}

fn get_derive<I>(ctx: &Context<'_, '_>, extra: I) -> TokenStream
where
    I: IntoIterator<Item = &'static str>,
{
    ctx.add_usings(["serde::Serialize", "serde::Deserialize"]);

    super::get_derive(ctx, DERIVE.into_iter().chain(extra))
}

fn get_dyn_type_traits(ctx: &Context<'_, '_>) -> TokenStream {
    super::get_dyn_type_traits(
        ctx,
        [
            &IdentPath::from_str("serde::Serialize").unwrap(),
            &IdentPath::from_str("serde::de::DeserializeOwned").unwrap(),
        ],
    )
}

const DERIVE: [&str; 2] = ["Serialize", "Deserialize"];