Skip to main content

synth_ai/
tunnels_api.rs

1use std::sync::Arc;
2
3use serde::{Deserialize, Serialize};
4
5use crate::models::JsonMap;
6use crate::openapi_paths;
7use crate::transport::Transport;
8use crate::types::Result;
9
10#[derive(Debug, Clone, Serialize, Deserialize, Default)]
11pub struct SynthTunnelLeaseCreateRequest {
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub local_port: Option<u16>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub ttl_seconds: Option<u64>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub backend: Option<String>,
18    #[serde(flatten)]
19    pub extra: JsonMap,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, Default)]
23pub struct SynthTunnelLease {
24    #[serde(default)]
25    pub lease_id: Option<String>,
26    #[serde(default)]
27    pub url: Option<String>,
28    #[serde(default)]
29    pub worker_token: Option<String>,
30    #[serde(default)]
31    pub status: Option<String>,
32    #[serde(flatten)]
33    pub extra: JsonMap,
34}
35
36#[derive(Clone)]
37pub struct TunnelsClient {
38    transport: Arc<Transport>,
39}
40
41impl TunnelsClient {
42    pub(crate) fn new(transport: Arc<Transport>) -> Self {
43        Self { transport }
44    }
45
46    pub async fn create_lease(
47        &self,
48        request: &SynthTunnelLeaseCreateRequest,
49    ) -> Result<SynthTunnelLease> {
50        self.transport
51            .post_json(openapi_paths::API_V1_SYNTHTUNNEL_LEASES, request)
52            .await
53    }
54
55    pub async fn delete_lease(&self, lease_id: &str) -> Result<()> {
56        self.transport
57            .delete_empty(&openapi_paths::api_v1_synthtunnel_lease(lease_id))
58            .await
59    }
60}