1use crate::{proc::GenericProcedure, util::TripleS};
4
5use super::module::Module;
6
7pub struct ModuleBuilder<Cx: TripleS + Clone> {
9 pub(crate) create: Option<Box<dyn GenericProcedure<Cx> + TripleS>>,
11
12 pub(crate) read: Option<Box<dyn GenericProcedure<Cx> + TripleS>>,
14
15 pub(crate) update: Option<Box<dyn GenericProcedure<Cx> + TripleS>>,
17
18 pub(crate) delete: Option<Box<dyn GenericProcedure<Cx> + TripleS>>,
20}
21
22impl<Cx: TripleS + Clone> Default for ModuleBuilder<Cx> {
23 fn default() -> Self {
24 Self {
25 create: None,
26 read: None,
27 update: None,
28 delete: None,
29 }
30 }
31}
32
33impl<Cx: TripleS + Clone> ModuleBuilder<Cx> {
34 pub fn create<Proc: GenericProcedure<Cx> + TripleS>(mut self, proc: Proc) -> Self {
36 self.create = Some(Box::new(proc));
37 self
38 }
39
40 pub fn read<Proc: GenericProcedure<Cx> + TripleS>(mut self, proc: Proc) -> Self {
42 self.read = Some(Box::new(proc));
43 self
44 }
45
46 pub fn update<Proc: GenericProcedure<Cx> + TripleS>(mut self, proc: Proc) -> Self {
48 self.update = Some(Box::new(proc));
49 self
50 }
51
52 pub fn delete<Proc: GenericProcedure<Cx> + TripleS>(mut self, proc: Proc) -> Self {
54 self.delete = Some(Box::new(proc));
55 self
56 }
57
58 pub fn build(self) -> Module<Cx> {
60 Module::new(self)
61 }
62}