rpc_rs/module/
builder.rs

1//! The [`ModuleBuilder`] module.
2
3use crate::{proc::GenericProcedure, util::TripleS};
4
5use super::module::Module;
6
7/// A builder for a [`Module`].
8pub struct ModuleBuilder<Cx: TripleS + Clone> {
9    /// The handler for [`rpc_rs::Method::Create`] calls.
10    pub(crate) create: Option<Box<dyn GenericProcedure<Cx> + TripleS>>,
11
12    /// The handler for [`rpc_rs::Method::Read`] calls.
13    pub(crate) read: Option<Box<dyn GenericProcedure<Cx> + TripleS>>,
14
15    /// The handler for [`rpc_rs::Method::Update`] calls.
16    pub(crate) update: Option<Box<dyn GenericProcedure<Cx> + TripleS>>,
17
18    /// The handler for [`rpc_rs::Method::Delete`] calls.
19    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    /// Attach a handler for [`rpc_rs::Method::Create`].
35    pub fn create<Proc: GenericProcedure<Cx> + TripleS>(mut self, proc: Proc) -> Self {
36        self.create = Some(Box::new(proc));
37        self
38    }
39
40    /// Attach a handler for [`rpc_rs::Method::Read`].
41    pub fn read<Proc: GenericProcedure<Cx> + TripleS>(mut self, proc: Proc) -> Self {
42        self.read = Some(Box::new(proc));
43        self
44    }
45
46    /// Attach a handler for [`rpc_rs::Method::Update`].
47    pub fn update<Proc: GenericProcedure<Cx> + TripleS>(mut self, proc: Proc) -> Self {
48        self.update = Some(Box::new(proc));
49        self
50    }
51
52    /// Attach a handler for [`rpc_rs::Method::Delete`].
53    pub fn delete<Proc: GenericProcedure<Cx> + TripleS>(mut self, proc: Proc) -> Self {
54        self.delete = Some(Box::new(proc));
55        self
56    }
57
58    /// Build this [`ModuleBuilder`], converting it into a [`Module`].
59    pub fn build(self) -> Module<Cx> {
60        Module::new(self)
61    }
62}