xsd_parser/pipeline/renderer/steps/
namespace_const.rs

1use proc_macro2::Literal;
2use quote::quote;
3
4use super::super::{MetaData, Module, RenderStep};
5
6/// Implements a [`RenderStep`] that renders constants for the different namespaces
7/// used in the schema.
8#[derive(Debug)]
9pub struct NamespaceConstantsRenderStep;
10
11impl RenderStep for NamespaceConstantsRenderStep {
12    fn finish(&mut self, meta: &MetaData<'_>, module: &mut Module) {
13        let xsd_parser = &meta.xsd_parser_crate;
14
15        module.usings([quote!(#xsd_parser::models::schema::Namespace)]);
16
17        let namespace_constants = meta.types.meta.types.modules.values().filter_map(|module| {
18            let ns = module.namespace.as_ref()?;
19            let const_name = module.make_ns_const();
20            let const_name = const_name.ident();
21            let namespace = Literal::byte_string(&ns.0);
22
23            Some(quote! {
24                pub const #const_name: Namespace = Namespace::new_const(#namespace);
25            })
26        });
27
28        module.prepend(quote! { #( #namespace_constants )* });
29    }
30}