rmp_ipc/namespaces/
builder.rs1use 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 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 #[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}