Skip to main content

supercode_harness/
frontend_contract_generated.rs

1// @generated by sdk/frontend/generate.mjs from contract.json. Do not edit.
2
3/// One method in the versioned language-neutral frontend facade.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5pub enum FrontendFacadeMethod {
6    Describe,
7    Attach,
8    SendInput,
9    Submit,
10    Interrupt,
11    Steer,
12    Respond,
13    Invoke,
14    Lease,
15    AcquireControl,
16    TakeControl,
17    Heartbeat,
18    Detach,
19    Close,
20}
21
22impl FrontendFacadeMethod {
23    pub const ALL: [Self; 14] = [
24        Self::Describe,
25        Self::Attach,
26        Self::SendInput,
27        Self::Submit,
28        Self::Interrupt,
29        Self::Steer,
30        Self::Respond,
31        Self::Invoke,
32        Self::Lease,
33        Self::AcquireControl,
34        Self::TakeControl,
35        Self::Heartbeat,
36        Self::Detach,
37        Self::Close,
38    ];
39
40    pub const fn id(self) -> &'static str {
41        match self {
42            Self::Describe => "describe",
43            Self::Attach => "attach",
44            Self::SendInput => "send_input",
45            Self::Submit => "submit",
46            Self::Interrupt => "interrupt",
47            Self::Steer => "steer",
48            Self::Respond => "respond",
49            Self::Invoke => "invoke",
50            Self::Lease => "lease",
51            Self::AcquireControl => "acquire_control",
52            Self::TakeControl => "take_control",
53            Self::Heartbeat => "heartbeat",
54            Self::Detach => "detach",
55            Self::Close => "close",
56        }
57    }
58
59    pub const fn wire_name(self) -> &'static str {
60        match self {
61            Self::Describe => "frontend.v2.describe",
62            Self::Attach => "frontend.v2.attach",
63            Self::SendInput => "frontend.v2.send_input",
64            Self::Submit => "frontend.v2.submit",
65            Self::Interrupt => "frontend.v2.interrupt",
66            Self::Steer => "frontend.v2.steer",
67            Self::Respond => "frontend.v2.respond",
68            Self::Invoke => "frontend.v2.invoke",
69            Self::Lease => "frontend.v2.lease",
70            Self::AcquireControl => "frontend.v2.acquire_control",
71            Self::TakeControl => "frontend.v2.take_control",
72            Self::Heartbeat => "frontend.v2.heartbeat",
73            Self::Detach => "frontend.v2.detach",
74            Self::Close => "frontend.v2.close",
75        }
76    }
77
78    pub const fn sdk_action(self) -> &'static str {
79        match self {
80            Self::Describe => "resume",
81            Self::Attach => "events",
82            Self::SendInput => "input",
83            Self::Submit => "input",
84            Self::Interrupt => "interrupt",
85            Self::Steer => "steer",
86            Self::Respond => "respond",
87            Self::Invoke => "input",
88            Self::Lease => "events",
89            Self::AcquireControl => "input",
90            Self::TakeControl => "input",
91            Self::Heartbeat => "events",
92            Self::Detach => "events",
93            Self::Close => "close",
94        }
95    }
96
97    pub fn from_wire_name(value: &str) -> Option<Self> {
98        match value {
99            "frontend.v2.describe" => Some(Self::Describe),
100            "frontend.v2.attach" => Some(Self::Attach),
101            "frontend.v2.send_input" => Some(Self::SendInput),
102            "frontend.v2.submit" => Some(Self::Submit),
103            "frontend.v2.interrupt" => Some(Self::Interrupt),
104            "frontend.v2.steer" => Some(Self::Steer),
105            "frontend.v2.respond" => Some(Self::Respond),
106            "frontend.v2.invoke" => Some(Self::Invoke),
107            "frontend.v2.lease" => Some(Self::Lease),
108            "frontend.v2.acquire_control" => Some(Self::AcquireControl),
109            "frontend.v2.take_control" => Some(Self::TakeControl),
110            "frontend.v2.heartbeat" => Some(Self::Heartbeat),
111            "frontend.v2.detach" => Some(Self::Detach),
112            "frontend.v2.close" => Some(Self::Close),
113            "frontend.describe" => Some(Self::Describe),
114            "frontend.attach" => Some(Self::Attach),
115            "frontend.send_input" => Some(Self::SendInput),
116            "frontend.invoke" => Some(Self::Invoke),
117            "frontend.lease" => Some(Self::Lease),
118            "frontend.acquire_control" => Some(Self::AcquireControl),
119            "frontend.take_control" => Some(Self::TakeControl),
120            "frontend.heartbeat" => Some(Self::Heartbeat),
121            "frontend.detach" => Some(Self::Detach),
122            "frontend.close" => Some(Self::Close),
123            "submit" => Some(Self::Submit),
124            "interrupt" => Some(Self::Interrupt),
125            "steer" => Some(Self::Steer),
126            "respond" => Some(Self::Respond),
127            _ => None,
128        }
129    }
130}
131
132/// Transport seam consumed by the generated Rust facade client.
133pub trait FrontendFacadeTransport: Send + Sync {
134    fn call<'a>(
135        &'a self,
136        method: FrontendFacadeMethod,
137        params: serde_json::Value,
138    ) -> std::pin::Pin<
139        Box<
140            dyn std::future::Future<Output = Result<serde_json::Value, crate::FrontendRuntimeError>>
141                + Send
142                + 'a,
143        >,
144    >;
145}
146
147/// Generated typed Rust client over any facade transport.
148pub struct GeneratedFrontendClient<T> {
149    transport: T,
150}
151
152impl<T> GeneratedFrontendClient<T> {
153    pub const fn new(transport: T) -> Self {
154        Self { transport }
155    }
156}
157
158impl<T: FrontendFacadeTransport> GeneratedFrontendClient<T> {
159    pub async fn describe(
160        &self,
161    ) -> Result<crate::FrontendRuntimeDescriptor, crate::FrontendRuntimeError> {
162        let value = self
163            .transport
164            .call(FrontendFacadeMethod::Describe, serde_json::json!({}))
165            .await?;
166        serde_json::from_value::<crate::FrontendRuntimeDescriptor>(value)
167            .map_err(|error| crate::FrontendRuntimeError::Transport(error.to_string()))
168    }
169
170    pub async fn attach(
171        &self,
172        limit: u64,
173        after_sequence: Option<u64>,
174    ) -> Result<crate::FrontendAttachSnapshot, crate::FrontendRuntimeError> {
175        let mut params = serde_json::json!({"limit": limit});
176        if let Some(value) = after_sequence {
177            params["after_sequence"] = serde_json::json!(value);
178        }
179        let value = self
180            .transport
181            .call(FrontendFacadeMethod::Attach, params)
182            .await?;
183        serde_json::from_value::<crate::FrontendAttachSnapshot>(value)
184            .map_err(|error| crate::FrontendRuntimeError::Transport(error.to_string()))
185    }
186
187    pub async fn send_input(
188        &self,
189        prompt: String,
190        image_urls: Option<Vec<String>>,
191    ) -> Result<bool, crate::FrontendRuntimeError> {
192        let mut params = serde_json::json!({"prompt": prompt});
193        if let Some(value) = image_urls {
194            params["image_urls"] = serde_json::json!(value);
195        }
196        let value = self
197            .transport
198            .call(FrontendFacadeMethod::SendInput, params)
199            .await?;
200        value
201            .get("accepted")
202            .and_then(serde_json::Value::as_bool)
203            .ok_or_else(|| {
204                crate::FrontendRuntimeError::Transport(
205                    "invalid frontend.v2.send_input result".into(),
206                )
207            })
208    }
209
210    pub async fn submit(
211        &self,
212        prompt: String,
213        image_urls: Option<Vec<String>>,
214    ) -> Result<String, crate::FrontendRuntimeError> {
215        let mut params = serde_json::json!({"prompt": prompt});
216        if let Some(value) = image_urls {
217            params["image_urls"] = serde_json::json!(value);
218        }
219        let value = self
220            .transport
221            .call(FrontendFacadeMethod::Submit, params)
222            .await?;
223        value
224            .get("reply")
225            .and_then(serde_json::Value::as_str)
226            .map(|value| value.to_string())
227            .ok_or_else(|| {
228                crate::FrontendRuntimeError::Transport("invalid frontend.v2.submit result".into())
229            })
230    }
231
232    pub async fn interrupt(&self) -> Result<bool, crate::FrontendRuntimeError> {
233        let value = self
234            .transport
235            .call(FrontendFacadeMethod::Interrupt, serde_json::json!({}))
236            .await?;
237        value
238            .get("interrupted")
239            .and_then(serde_json::Value::as_bool)
240            .ok_or_else(|| {
241                crate::FrontendRuntimeError::Transport(
242                    "invalid frontend.v2.interrupt result".into(),
243                )
244            })
245    }
246
247    pub async fn steer(&self, prompt: String) -> Result<bool, crate::FrontendRuntimeError> {
248        let value = self
249            .transport
250            .call(
251                FrontendFacadeMethod::Steer,
252                serde_json::json!({"prompt": prompt}),
253            )
254            .await?;
255        value
256            .get("queued")
257            .and_then(serde_json::Value::as_bool)
258            .ok_or_else(|| {
259                crate::FrontendRuntimeError::Transport("invalid frontend.v2.steer result".into())
260            })
261    }
262
263    pub async fn respond(
264        &self,
265        response: crate::FrontendResponse,
266    ) -> Result<bool, crate::FrontendRuntimeError> {
267        let value = self
268            .transport
269            .call(
270                FrontendFacadeMethod::Respond,
271                serde_json::json!({"response": response}),
272            )
273            .await?;
274        value
275            .get("accepted")
276            .and_then(serde_json::Value::as_bool)
277            .ok_or_else(|| {
278                crate::FrontendRuntimeError::Transport("invalid frontend.v2.respond result".into())
279            })
280    }
281
282    pub async fn invoke(
283        &self,
284        operation: crate::FrontendOperationInvocation,
285    ) -> Result<crate::FrontendOperationResult, crate::FrontendRuntimeError> {
286        let value = self
287            .transport
288            .call(
289                FrontendFacadeMethod::Invoke,
290                serde_json::json!({"operation": operation}),
291            )
292            .await?;
293        serde_json::from_value::<crate::FrontendOperationResult>(value)
294            .map_err(|error| crate::FrontendRuntimeError::Transport(error.to_string()))
295    }
296
297    pub async fn lease(&self) -> Result<crate::RuntimeLeaseSnapshot, crate::FrontendRuntimeError> {
298        let value = self
299            .transport
300            .call(FrontendFacadeMethod::Lease, serde_json::json!({}))
301            .await?;
302        serde_json::from_value::<crate::RuntimeLeaseSnapshot>(value)
303            .map_err(|error| crate::FrontendRuntimeError::Transport(error.to_string()))
304    }
305
306    pub async fn acquire_control(
307        &self,
308    ) -> Result<crate::RuntimeLeaseSnapshot, crate::FrontendRuntimeError> {
309        let value = self
310            .transport
311            .call(FrontendFacadeMethod::AcquireControl, serde_json::json!({}))
312            .await?;
313        serde_json::from_value::<crate::RuntimeLeaseSnapshot>(value)
314            .map_err(|error| crate::FrontendRuntimeError::Transport(error.to_string()))
315    }
316
317    pub async fn take_control(
318        &self,
319    ) -> Result<crate::RuntimeLeaseSnapshot, crate::FrontendRuntimeError> {
320        let value = self
321            .transport
322            .call(FrontendFacadeMethod::TakeControl, serde_json::json!({}))
323            .await?;
324        serde_json::from_value::<crate::RuntimeLeaseSnapshot>(value)
325            .map_err(|error| crate::FrontendRuntimeError::Transport(error.to_string()))
326    }
327
328    pub async fn heartbeat(
329        &self,
330    ) -> Result<crate::RuntimeLeaseSnapshot, crate::FrontendRuntimeError> {
331        let value = self
332            .transport
333            .call(FrontendFacadeMethod::Heartbeat, serde_json::json!({}))
334            .await?;
335        serde_json::from_value::<crate::RuntimeLeaseSnapshot>(value)
336            .map_err(|error| crate::FrontendRuntimeError::Transport(error.to_string()))
337    }
338
339    pub async fn detach(&self) -> Result<crate::RuntimeLeaseSnapshot, crate::FrontendRuntimeError> {
340        let value = self
341            .transport
342            .call(FrontendFacadeMethod::Detach, serde_json::json!({}))
343            .await?;
344        serde_json::from_value::<crate::RuntimeLeaseSnapshot>(value)
345            .map_err(|error| crate::FrontendRuntimeError::Transport(error.to_string()))
346    }
347
348    pub async fn close(&self) -> Result<bool, crate::FrontendRuntimeError> {
349        let value = self
350            .transport
351            .call(FrontendFacadeMethod::Close, serde_json::json!({}))
352            .await?;
353        value
354            .get("closed")
355            .and_then(serde_json::Value::as_bool)
356            .ok_or_else(|| {
357                crate::FrontendRuntimeError::Transport("invalid frontend.v2.close result".into())
358            })
359    }
360}