use std::fmt::Debug;
use inflector::Inflector;
use quote::format_ident;
use crate::{
code::{IdentPath, Module},
types::Module as TypesModule,
};
use super::{data::TypeData, Config, Context};
mod defaults;
mod namespace_const;
mod quick_xml;
mod types;
mod with_namespace_trait;
pub use self::defaults::DefaultsRenderer;
pub use self::namespace_const::NamespaceConstantsRenderer;
pub use self::quick_xml::{QuickXmlDeserializeRenderer, QuickXmlSerializeRenderer};
pub use self::types::TypesRenderer;
pub use self::with_namespace_trait::WithNamespaceTraitRenderer;
pub trait Renderer: Debug {
fn initialize(&mut self, config: &mut Config<'_>) {
let _config = config;
}
fn render_type(&mut self, ctx: &mut Context<'_, '_>, ty: &TypeData<'_>) {
let _cxt = ctx;
let _ty = ty;
}
fn finish(&mut self, config: &Config<'_>, module: &mut Module) {
let _config = config;
let _module = module;
}
}
impl TypesModule {
pub(super) fn make_ns_const(&self) -> IdentPath {
let ident = format_ident!(
"NS_{}",
self.name
.as_ref()
.map_or_else(|| String::from("DEFAULT"), ToString::to_string)
.to_screaming_snake_case()
);
IdentPath::from_parts([], ident)
}
}