Skip to main content

rustenium_bidi_definitions/session/
command_builders.rs

1use super::commands::*;
2#[derive(Debug, Clone, Default)]
3pub struct StatusBuilder;
4impl StatusBuilder {
5    pub fn new() -> Self {
6        Self
7    }
8    pub fn build(self) -> Status {
9        Status {
10            method: StatusMethod::Status,
11            params: StatusParams {},
12        }
13    }
14}
15impl Status {
16    pub fn builder() -> StatusBuilder {
17        StatusBuilder
18    }
19}
20impl New {
21    pub fn builder() -> NewBuilder {
22        <NewBuilder as Default>::default()
23    }
24}
25#[derive(Default, Clone)]
26pub struct NewBuilder {
27    capabilities: Option<super::types::CapabilitiesRequest>,
28}
29impl NewBuilder {
30    pub fn capabilities(
31        mut self,
32        capabilities: impl Into<super::types::CapabilitiesRequest>,
33    ) -> Self {
34        self.capabilities = Some(capabilities.into());
35        self
36    }
37    pub fn build(self) -> Result<New, String> {
38        Ok(New {
39            method: NewMethod::New,
40            params: NewParams {
41                capabilities: self.capabilities.ok_or_else(|| {
42                    format!("Field `{}` is mandatory.", std::stringify!(capabilities))
43                })?,
44            },
45        })
46    }
47}
48#[derive(Debug, Clone, Default)]
49pub struct EndBuilder;
50impl EndBuilder {
51    pub fn new() -> Self {
52        Self
53    }
54    pub fn build(self) -> End {
55        End {
56            method: EndMethod::End,
57            params: EndParams {},
58        }
59    }
60}
61impl End {
62    pub fn builder() -> EndBuilder {
63        EndBuilder
64    }
65}
66impl Subscribe {
67    pub fn builder() -> SubscribeBuilder {
68        <SubscribeBuilder as Default>::default()
69    }
70}
71#[derive(Default, Clone)]
72pub struct SubscribeBuilder {
73    events: Option<Vec<String>>,
74    contexts: Option<Vec<crate::browsing_context::types::BrowsingContext>>,
75    user_contexts: Option<Vec<crate::browser::types::UserContext>>,
76}
77impl SubscribeBuilder {
78    pub fn event(mut self, event: impl Into<String>) -> Self {
79        let v = self.events.get_or_insert(Vec::new());
80        v.push(event.into());
81        self
82    }
83    pub fn events<I, S>(mut self, events: I) -> Self
84    where
85        I: IntoIterator<Item = S>,
86        S: Into<String>,
87    {
88        let v = self.events.get_or_insert(Vec::new());
89        for val in events {
90            v.push(val.into());
91        }
92        self
93    }
94    pub fn context(
95        mut self,
96        context: impl Into<crate::browsing_context::types::BrowsingContext>,
97    ) -> Self {
98        let v = self.contexts.get_or_insert(Vec::new());
99        v.push(context.into());
100        self
101    }
102    pub fn contexts<I, S>(mut self, contexts: I) -> Self
103    where
104        I: IntoIterator<Item = S>,
105        S: Into<crate::browsing_context::types::BrowsingContext>,
106    {
107        let v = self.contexts.get_or_insert(Vec::new());
108        for val in contexts {
109            v.push(val.into());
110        }
111        self
112    }
113    pub fn user_context(
114        mut self,
115        user_context: impl Into<crate::browser::types::UserContext>,
116    ) -> Self {
117        let v = self.user_contexts.get_or_insert(Vec::new());
118        v.push(user_context.into());
119        self
120    }
121    pub fn user_contexts<I, S>(mut self, user_contexts: I) -> Self
122    where
123        I: IntoIterator<Item = S>,
124        S: Into<crate::browser::types::UserContext>,
125    {
126        let v = self.user_contexts.get_or_insert(Vec::new());
127        for val in user_contexts {
128            v.push(val.into());
129        }
130        self
131    }
132    pub fn build(self) -> Result<Subscribe, String> {
133        Ok(Subscribe {
134            method: SubscribeMethod::Subscribe,
135            params: SubscribeParams {
136                events: self
137                    .events
138                    .ok_or_else(|| format!("Field `{}` is mandatory.", std::stringify!(events)))?,
139                contexts: self.contexts,
140                user_contexts: self.user_contexts,
141            },
142        })
143    }
144}
145impl Unsubscribe {
146    pub fn builder() -> UnsubscribeBuilder {
147        <UnsubscribeBuilder as Default>::default()
148    }
149}
150#[derive(Default, Clone)]
151pub struct UnsubscribeBuilder {
152    unsubscribe_parameters: Option<super::types::UnsubscribeParameters>,
153}
154impl UnsubscribeBuilder {
155    pub fn unsubscribe_parameters(
156        mut self,
157        unsubscribe_parameters: impl Into<super::types::UnsubscribeParameters>,
158    ) -> Self {
159        self.unsubscribe_parameters = Some(unsubscribe_parameters.into());
160        self
161    }
162    pub fn build(self) -> Result<Unsubscribe, String> {
163        Ok(Unsubscribe {
164            method: UnsubscribeMethod::Unsubscribe,
165            params: UnsubscribeParams {
166                unsubscribe_parameters: self.unsubscribe_parameters.ok_or_else(|| {
167                    format!(
168                        "Field `{}` is mandatory.",
169                        std::stringify!(unsubscribe_parameters)
170                    )
171                })?,
172            },
173        })
174    }
175}