1use crate::build_loader::RpcHashMap;
4use crate::page::{I18nConfig, PageDef};
5use crate::procedure::{ProcedureDef, SubscriptionDef};
6use crate::resolve::ResolveStrategy;
7
8pub struct SeamParts {
11 pub procedures: Vec<ProcedureDef>,
12 pub subscriptions: Vec<SubscriptionDef>,
13 pub pages: Vec<PageDef>,
14 pub rpc_hash_map: Option<RpcHashMap>,
15 pub i18n_config: Option<I18nConfig>,
16 pub strategies: Vec<Box<dyn ResolveStrategy>>,
17}
18
19impl SeamParts {
20 pub fn has_url_prefix(&self) -> bool {
21 self.strategies.iter().any(|s| s.kind() == "url_prefix")
22 }
23}
24
25pub struct SeamServer {
26 procedures: Vec<ProcedureDef>,
27 subscriptions: Vec<SubscriptionDef>,
28 pages: Vec<PageDef>,
29 rpc_hash_map: Option<RpcHashMap>,
30 i18n_config: Option<I18nConfig>,
31 strategies: Vec<Box<dyn ResolveStrategy>>,
32}
33
34impl SeamServer {
35 pub fn new() -> Self {
36 Self {
37 procedures: Vec::new(),
38 subscriptions: Vec::new(),
39 pages: Vec::new(),
40 rpc_hash_map: None,
41 i18n_config: None,
42 strategies: Vec::new(),
43 }
44 }
45
46 pub fn procedure(mut self, proc: ProcedureDef) -> Self {
47 self.procedures.push(proc);
48 self
49 }
50
51 pub fn subscription(mut self, sub: SubscriptionDef) -> Self {
52 self.subscriptions.push(sub);
53 self
54 }
55
56 pub fn page(mut self, page: PageDef) -> Self {
57 self.pages.push(page);
58 self
59 }
60
61 pub fn rpc_hash_map(mut self, map: RpcHashMap) -> Self {
62 self.rpc_hash_map = Some(map);
63 self
64 }
65
66 pub fn i18n_config(mut self, config: I18nConfig) -> Self {
67 self.i18n_config = Some(config);
68 self
69 }
70
71 pub fn resolve_strategies(mut self, strategies: Vec<Box<dyn ResolveStrategy>>) -> Self {
72 self.strategies = strategies;
73 self
74 }
75
76 pub fn into_parts(self) -> SeamParts {
78 SeamParts {
79 procedures: self.procedures,
80 subscriptions: self.subscriptions,
81 pages: self.pages,
82 rpc_hash_map: self.rpc_hash_map,
83 i18n_config: self.i18n_config,
84 strategies: self.strategies,
85 }
86 }
87}
88
89impl Default for SeamServer {
90 fn default() -> Self {
91 Self::new()
92 }
93}