1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::descriptor::{Context, Function, Identifier, Model, Treatment};
use std::sync::Arc;

#[derive(Debug)]
pub enum LoadingError {
    NoPackage,
    NotFound(u32),
    CircularReference,
    ContentError,
    ContextExpected,
    FunctionExpected,
    ModelExpected,
    TreatmentExpected,
}

pub trait Loader {
    fn load_context(&self, identifier: &Identifier) -> Result<Arc<dyn Context>, LoadingError>;
    fn load_function(&self, identifier: &Identifier) -> Result<Arc<dyn Function>, LoadingError>;
    fn load_model(&self, identifier: &Identifier) -> Result<Arc<dyn Model>, LoadingError>;
    fn load_treatment(&self, identifier: &Identifier) -> Result<Arc<dyn Treatment>, LoadingError>;
}