pub struct Context<'a, 'types> {
pub meta: &'a MetaData<'types>,
pub data: &'a DataType<'types>,
pub ident: &'a TypeIdent,
pub values: Values,
/* private fields */
}Expand description
Context for the rendering process.
This contains different additional information and configuration that may be
needed by a Renderer to render the actual code. It is
also used to collect the rendered code and add it to the corresponding module.
Fields§
§meta: &'a MetaData<'types>Meta information for the rendering process.
data: &'a DataType<'types>Data type that needs to be rendered.
ident: &'a TypeIdentIdentifier of the data type that needs to be rendered.
values: ValuesGeneric data storage for any type that implements ValueKey.
Implementations§
Source§impl<'a, 'types> Context<'a, 'types>
impl<'a, 'types> Context<'a, 'types>
Sourcepub fn resolve_type_for_module(&self, target_type: &PathData) -> TokenStream
pub fn resolve_type_for_module(&self, target_type: &PathData) -> TokenStream
Resolves the passed ident relative to the module of the current rendered type.
Sourcepub fn resolve_build_in(&self, path: &str) -> IdentPath
pub fn resolve_build_in(&self, path: &str) -> IdentPath
Resolves the passed identifier path for build-in types before it can
be rendered.
If GeneratorFlags::BUILD_IN_ABSOLUTE_PATHS is set, the path is returned
as it, otherwise it will return the identifier only (without the path).
§Panics
Panics if the passed path is not a valid IdentPath.
Sourcepub fn resolve_ident_path(&self, path: &str) -> IdentPath
pub fn resolve_ident_path(&self, path: &str) -> IdentPath
Resolve the passed identifier path before it can be rendered.
If GeneratorFlags::ABSOLUTE_PATHS_INSTEAD_USINGS is set this will
returns the path as is, otherwise it will add a suitable using
(see add_usings) and returns the identifier
only (without the path).
Sourcepub fn add_usings<I>(&self, usings: I)
pub fn add_usings<I>(&self, usings: I)
Add using directives to the module the of the current rendered type.
Sourcepub fn add_root_usings<I>(&self, usings: I)
pub fn add_root_usings<I>(&self, usings: I)
Add using directives to the root module.
Sourcepub fn main_module(&mut self) -> &mut Module
pub fn main_module(&mut self) -> &mut Module
Returns a mutable reference to the main module.
This might be useful if you need to add code anywhere to the generated result.
Sourcepub fn current_module(&mut self) -> &mut Module
pub fn current_module(&mut self) -> &mut Module
Returns a mutable reference to the module of the current rendered type.
Sourcepub fn set<K>(&mut self, value: K::Type)where
K: ValueKey,
pub fn set<K>(&mut self, value: K::Type)where
K: ValueKey,
Set a value for the specified key K.
Sourcepub fn get<K>(&self) -> K::Type
pub fn get<K>(&self) -> K::Type
Get the value that was stored for the specified key K.
Panics if the key was not set before.
Sourcepub fn get_ref<K>(&self) -> &K::Typewhere
K: ValueKey,
pub fn get_ref<K>(&self) -> &K::Typewhere
K: ValueKey,
Get a reference to the value that was stored for the specified key K.
Panics if the key was not set before.
Sourcepub fn get_mut<K>(&mut self) -> &mut K::Typewhere
K: ValueKey,
pub fn get_mut<K>(&mut self) -> &mut K::Typewhere
K: ValueKey,
Get a mutable reference to the value that was stored for the specified key K.
Panics if the key was not set before.
Sourcepub fn get_or_create<K>(&mut self) -> &mut K::Type
pub fn get_or_create<K>(&mut self) -> &mut K::Type
Get a mutable reference to the value that was stored for the specified key K.
If no value is available a new one is created.
Sourcepub fn get_or_create_with<K, F>(&mut self, f: F) -> &mut K::Type
pub fn get_or_create_with<K, F>(&mut self, f: F) -> &mut K::Type
Get a mutable reference to the value that was stored for the specified key K.
If no value is available a new one is created with the provided function f.
Sourcepub fn extract<K>(&mut self) -> K::Typewhere
K: ValueKey,
pub fn extract<K>(&mut self) -> K::Typewhere
K: ValueKey,
Extracts the value stored for the specified key K.
Panics if the key was not set before.
Sourcepub fn patch_usings<I>(
&self,
usings: I,
) -> impl Iterator<Item = String> + use<'_, I>
pub fn patch_usings<I>( &self, usings: I, ) -> impl Iterator<Item = String> + use<'_, I>
Takes an iterator of usings (anything that implements ToString) and
executes patch_using for each element.
Sourcepub fn patch_using<'x>(&self, using: Cow<'x, str>) -> Cow<'x, str>
pub fn patch_using<'x>(&self, using: Cow<'x, str>) -> Cow<'x, str>
Replaces the alloc:: and xsd_parser:: in the path with the configured
name for the alloc and xsd-parser crate.
See Renderer::alloc_crate and
Renderer::xsd_parser_types
for details.
This should be used before you add using directives to a module manually.
Normally you should use add_usings which does the
patching automatically, but if you want to add code somewhere in the module
tree, this might be useful.
Methods from Deref<Target = MetaData<'types>>§
Sourcepub fn check_renderer_flags(&self, flags: RendererFlags) -> bool
pub fn check_renderer_flags(&self, flags: RendererFlags) -> bool
Whether the passed flags intersect with the renderer flags set in
the configuration, or not.
Methods from Deref<Target = GeneratorMetaData<'types>>§
Sourcepub fn check_generator_flags(&self, flags: GeneratorFlags) -> bool
pub fn check_generator_flags(&self, flags: GeneratorFlags) -> bool
Whether the passed flags intersect with the generator flags set in
the configuration, or not.
Methods from Deref<Target = MetaTypes>§
Sourcepub fn name_builder(&self) -> Box<dyn NameBuilderTrait>
pub fn name_builder(&self) -> Box<dyn NameBuilderTrait>
Create a new boxed NameBuilder, that can be used to build type names.
Sourcepub fn get_resolved<'a>(
&'a self,
ident: &'a TypeIdent,
) -> Option<(&'a TypeIdent, &'a MetaType)>
pub fn get_resolved<'a>( &'a self, ident: &'a TypeIdent, ) -> Option<(&'a TypeIdent, &'a MetaType)>
Get the identifier and the type of the passed ident with all single
type references resolved.
Tries to find the type specified by the passed ident and resolve simple
type definitions to the very base type. If the type could not be found None
is returned.
Sourcepub fn get_resolved_type<'a>(
&'a self,
ident: &'a TypeIdent,
) -> Option<&'a MetaType>
pub fn get_resolved_type<'a>( &'a self, ident: &'a TypeIdent, ) -> Option<&'a MetaType>
Get the type of the passed ident with all single type references resolved.
Like get_resolved, but instead of returning the identifier and
the type it will return only the resolved type.
Sourcepub fn get_resolved_ident<'a>(
&'a self,
ident: &'a TypeIdent,
) -> Option<&'a TypeIdent>
pub fn get_resolved_ident<'a>( &'a self, ident: &'a TypeIdent, ) -> Option<&'a TypeIdent>
Get the type ident of the passed ident with all single type references resolved.
Like get_resolved, but instead of returning the identifier and
the type it will return only the identifier of the resolved type.
Sourcepub fn get_variant(&self, ident: &TypeIdent) -> Option<&MetaTypeVariant>
pub fn get_variant(&self, ident: &TypeIdent) -> Option<&MetaTypeVariant>
Return the MetaTypeVariant of corresponding type for the passed identifier.
This is a shorthand for self.get(ident).map(|ty| &type.variant).