use crate::output::extension;
use std::collections::HashMap;
use std::sync::Arc;
#[derive(Clone, Debug, Default)]
pub struct Builder {
pub extension_id: u64,
pub description: String,
pub actual_uri: String,
pub dependencies: HashMap<String, extension::simple::module::Reference>,
pub type_classes: extension::simple::type_class::NamespaceDefinition,
pub type_variations: extension::simple::type_variation::NamespaceDefinition,
pub function_impls: extension::simple::function::NamespaceDefinition,
}
impl From<Builder> for extension::simple::module::Definition {
fn from(builder: Builder) -> Self {
extension::simple::module::Definition {
extension_id: builder.extension_id,
description: builder.description,
actual_uri: builder.actual_uri,
dependencies: builder.dependencies,
type_classes: Arc::new(builder.type_classes),
type_variations: Arc::new(builder.type_variations),
function_impls: Arc::new(builder.function_impls),
}
}
}
impl extension::simple::module::Scope for Builder {
fn resolve_type_class<T>(&self, name: T) -> extension::simple::type_class::ResolutionResult
where
T: Into<extension::simple::type_class::UnresolvedReference>,
{
self.type_classes.resolve_local(name.into())
}
fn resolve_type_variation<T>(
&self,
name: T,
) -> extension::simple::type_variation::ResolutionResult
where
T: Into<extension::simple::type_variation::UnresolvedReference>,
{
self.type_variations.resolve_local(name.into())
}
fn resolve_function<T>(&self, name: T) -> extension::simple::function::ResolutionResult
where
T: Into<extension::simple::function::UnresolvedReference>,
{
self.function_impls.resolve_local(name.into())
}
}