use super::common::Node;
use super::declared_parameter::DeclaredParameter;
use super::model::Model;
use super::treatment::Treatment;
use std::fmt::Debug;
use std::sync::{Arc, RwLock};
pub trait DeclarativeElement: Node + Debug + Send + Sync {
fn declarative_element(&'_ self) -> DeclarativeElementType<'_>;
fn find_declared_parameter(&self, name: &str) -> Option<&Arc<RwLock<DeclaredParameter>>>;
}
#[derive(Debug)]
pub enum DeclarativeElementType<'a> {
Model(&'a Model),
Treatment(&'a Treatment),
None,
}
#[derive(Debug)]
pub struct NoneDeclarativeElement;
impl DeclarativeElement for NoneDeclarativeElement {
fn declarative_element(&'_ self) -> DeclarativeElementType<'_> {
DeclarativeElementType::None
}
fn find_declared_parameter(&self, _name: &str) -> Option<&Arc<RwLock<DeclaredParameter>>> {
None
}
}
impl Node for NoneDeclarativeElement {}