use super::assigned_model::AssignedModel;
use super::assigned_parameter::AssignedParameter;
use super::common::Node;
use super::declarative_element::DeclarativeElement;
use super::model::Model;
use super::model_instanciation::ModelInstanciation;
use super::treatment_instanciation::TreatmentInstanciation;
use std::fmt::Debug;
use std::sync::{Arc, RwLock};
pub trait AssignativeElement: Node + Debug + Send + Sync {
fn assignative_element(&'_ self) -> AssignativeElementType<'_>;
fn associated_declarative_element(&self) -> Arc<RwLock<dyn DeclarativeElement>>;
fn find_assigned_model(&self, _name: &str) -> Option<&Arc<RwLock<AssignedModel>>> {
None
}
fn find_assigned_parameter(&self, name: &str) -> Option<&Arc<RwLock<AssignedParameter>>>;
}
#[derive(Debug)]
pub enum AssignativeElementType<'a> {
Model(&'a Model),
ModelInstanciation(&'a ModelInstanciation),
Treatment(&'a TreatmentInstanciation),
}