rpc_router/router/
router_builder.rs1use crate::handler::RpcHandlerWrapperTrait;
2use crate::router::router_inner::RouterInner;
3use crate::{FromResources, Handler, ResourcesBuilder, ResourcesInner, Router};
4
5#[derive(Debug, Default)]
6pub struct RouterBuilder {
7 inner: RouterInner,
8 base_resources_inner: ResourcesInner,
9}
10
11impl RouterBuilder {
12 pub fn append_dyn(mut self, name: &'static str, dyn_handler: Box<dyn RpcHandlerWrapperTrait>) -> Self {
23 self.inner.append_dyn(name, dyn_handler);
24 self
25 }
26
27 pub fn append<F, T, P, R>(mut self, name: &'static str, handler: F) -> Self
37 where
38 F: Handler<T, P, R> + Clone + Send + Sync + 'static,
39 T: Send + Sync + 'static,
40 P: Send + Sync + 'static,
41 R: Send + Sync + 'static,
42 {
43 self.inner.append_dyn(name, handler.into_dyn());
44 self
45 }
46
47 pub fn extend(mut self, other_builder: RouterBuilder) -> Self {
49 self.inner.extend(other_builder.inner);
50 self.base_resources_inner.extend(other_builder.base_resources_inner);
51 self
52 }
53
54 pub fn append_resource<T>(mut self, val: T) -> Self
55 where
56 T: FromResources + Clone + Send + Sync + 'static,
57 {
58 self.base_resources_inner.insert(val);
59 self
60 }
61
62 pub fn extend_resources(mut self, resources_builder: Option<ResourcesBuilder>) -> Self {
65 if let Some(resources_builder) = resources_builder {
66 if self.base_resources_inner.is_empty() {
68 self.base_resources_inner = resources_builder.resources_inner
69 }
70 else {
72 self.base_resources_inner.extend(resources_builder.resources_inner)
73 }
74 }
75 self
76 }
77
78 pub fn set_resources(mut self, resources_builder: ResourcesBuilder) -> Self {
86 self.base_resources_inner = resources_builder.resources_inner;
87 self
88 }
89
90 pub fn build(self) -> Router {
94 Router::new(self.inner, self.base_resources_inner)
95 }
96}