synth-ai 0.9.1

Rust SDK for Synth AI - serverless post-training APIs
Documentation
use std::sync::Arc;

use serde::{Deserialize, Serialize};

use crate::models::JsonMap;
use crate::openapi_paths;
use crate::transport::Transport;
use crate::types::Result;

#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SynthTunnelLeaseCreateRequest {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub local_port: Option<u16>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub ttl_seconds: Option<u64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub backend: Option<String>,
    #[serde(flatten)]
    pub extra: JsonMap,
}

#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SynthTunnelLease {
    #[serde(default)]
    pub lease_id: Option<String>,
    #[serde(default)]
    pub url: Option<String>,
    #[serde(default)]
    pub worker_token: Option<String>,
    #[serde(default)]
    pub status: Option<String>,
    #[serde(flatten)]
    pub extra: JsonMap,
}

#[derive(Clone)]
pub struct TunnelsClient {
    transport: Arc<Transport>,
}

impl TunnelsClient {
    pub(crate) fn new(transport: Arc<Transport>) -> Self {
        Self { transport }
    }

    pub async fn create_lease(
        &self,
        request: &SynthTunnelLeaseCreateRequest,
    ) -> Result<SynthTunnelLease> {
        self.transport
            .post_json(openapi_paths::API_V1_SYNTHTUNNEL_LEASES, request)
            .await
    }

    pub async fn delete_lease(&self, lease_id: &str) -> Result<()> {
        self.transport
            .delete_empty(&openapi_paths::api_v1_synthtunnel_lease(lease_id))
            .await
    }
}