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}