wacht 0.1.0-beta.5

Official Rust SDK for the Wacht platform, providing type-safe API client and authentication middleware
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioEnabledApp {
    pub slug: String,
    pub auth_config_id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub display_name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub logo_url: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub auth_scheme: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioConfigResponse {
    pub enabled: bool,
    pub use_platform_key: bool,
    pub api_key_set: bool,
    pub enabled_apps: Vec<ComposioEnabledApp>,
}

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct UpdateComposioConfigRequest {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub enabled: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub use_platform_key: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub api_key: Option<Option<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub enabled_apps: Option<Vec<ComposioEnabledApp>>,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioToolkit {
    pub slug: String,
    pub name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub logo: Option<String>,
    pub categories: Vec<String>,
    pub auth_schemes: Vec<String>,
    pub tool_count: i64,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioToolkitListResponse {
    pub toolkits: Vec<ComposioToolkit>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioAuthConfigSummary {
    pub id: String,
    pub name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub auth_scheme: Option<String>,
    pub is_composio_managed: bool,
    pub toolkit_slug: String,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioAuthConfigListResponse {
    pub auth_configs: Vec<ComposioAuthConfigSummary>,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum ComposioEnableAppAuth {
    Managed {
        #[serde(skip_serializing_if = "Option::is_none")]
        auth_scheme: Option<String>,
        #[serde(default, skip_serializing_if = "serde_json::Map::is_empty")]
        credentials: serde_json::Map<String, Value>,
    },
    Custom {
        auth_scheme: String,
        #[serde(default)]
        credentials: serde_json::Map<String, Value>,
    },
    UseExisting {
        auth_config_id: String,
        #[serde(skip_serializing_if = "Option::is_none")]
        auth_scheme: Option<String>,
    },
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct EnableComposioAppRequest {
    pub slug: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub display_name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub logo_url: Option<String>,
    pub auth: ComposioEnableAppAuth,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioToolkitAuthField {
    pub name: String,
    pub display_name: String,
    #[serde(rename = "type")]
    pub field_type: String,
    pub description: String,
    pub required: bool,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub default: Option<String>,
}

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioToolkitAuthFields {
    pub required: Vec<ComposioToolkitAuthField>,
    pub optional: Vec<ComposioToolkitAuthField>,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioToolkitAuthMode {
    pub mode: String,
    pub name: String,
    pub auth_config_creation: ComposioToolkitAuthFields,
    pub connected_account_initiation: ComposioToolkitAuthFields,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub auth_hint_url: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ComposioToolkitDetailsResponse {
    pub slug: String,
    pub name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub logo: Option<String>,
    pub composio_managed_auth_schemes: Vec<String>,
    pub auth_modes: Vec<ComposioToolkitAuthMode>,
}