rmp_ipc/namespaces/
builder.rs

1use crate::error::Result;
2use crate::event::Event;
3use crate::events::event_handler::EventHandler;
4use crate::ipc::context::Context;
5use crate::namespaces::namespace::Namespace;
6use crate::IPCBuilder;
7use std::future::Future;
8use std::pin::Pin;
9
10pub struct NamespaceBuilder {
11    name: String,
12    handler: EventHandler,
13    ipc_builder: IPCBuilder,
14}
15
16impl NamespaceBuilder {
17    pub(crate) fn new(ipc_builder: IPCBuilder, name: String) -> Self {
18        Self {
19            name,
20            handler: EventHandler::new(),
21            ipc_builder,
22        }
23    }
24
25    /// Adds an event callback on the namespace
26    pub fn on<F: 'static>(mut self, event: &str, callback: F) -> Self
27    where
28        F: for<'a> Fn(
29                &'a Context,
30                Event,
31            ) -> Pin<Box<(dyn Future<Output = Result<()>> + Send + 'a)>>
32            + Send
33            + Sync,
34    {
35        self.handler.on(event, callback);
36
37        self
38    }
39
40    /// Builds the namespace
41    #[tracing::instrument(skip(self))]
42    pub fn build(self) -> IPCBuilder {
43        let namespace = Namespace::new(self.name, self.handler);
44        self.ipc_builder.add_namespace(namespace)
45    }
46}