1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use appscraps_dll::util::FuncList;
use appscraps_dll::util::FuncMap;
use appscraps_event::util::EventList;
use appscraps_event::util::EventMap;
use appscraps_module::util::ModuleList;
use appscraps_module::util::ModuleMap;
use appscraps_module::util::PathResolver;
use simplisp::Environment as LispEnvironment;
use std::sync::LockResult;
use std::sync::RwLock;
use std::sync::RwLockReadGuard;
use std::sync::RwLockWriteGuard;

pub struct Environment {
    event_list: EventList,
    event_map: EventMap,
    func_list: FuncList,
    func_map: FuncMap,
    lisp_environment: RwLock<LispEnvironment<Environment>>,
    module_list: ModuleList,
    module_map: ModuleMap,
    path_resolver: PathResolver,
}

impl Environment {
    pub fn new(
        event_list: EventList,
        event_map: EventMap,
        func_list: FuncList,
        func_map: FuncMap,
        lisp_environment: LispEnvironment<Environment>,
        module_list: ModuleList,
        module_map: ModuleMap,
        path_resolver: PathResolver,
    ) -> Self {
        Environment {
            event_list: event_list,
            event_map: event_map,
            func_list: func_list,
            func_map: func_map,
            lisp_environment: RwLock::new(lisp_environment),
            module_list: module_list,
            module_map: module_map,
            path_resolver: path_resolver,
        }
    }

    pub fn get_event_list(&self) -> &EventList {
        &self.event_list
    }

    pub fn get_event_map(&self) -> &EventMap {
        &self.event_map
    }

    pub fn get_func_list(&self) -> &FuncList {
        &self.func_list
    }

    pub fn get_func_map(&self) -> &FuncMap {
        &self.func_map
    }

    pub fn get_lisp_environment(&self) -> LockResult<RwLockReadGuard<LispEnvironment<Environment>>> {
        self.lisp_environment.read()
    }

    pub fn get_lisp_environment_mut(&self) -> LockResult<RwLockWriteGuard<LispEnvironment<Environment>>> {
        self.lisp_environment.write()
    }

    pub fn get_module_list(&self) -> &ModuleList {
        &self.module_list
    }

    pub fn get_module_map(&self) -> &ModuleMap {
        &self.module_map
    }

    pub fn get_path_resolver(&self) -> &PathResolver {
        &self.path_resolver
    }
}