wacht 0.1.0-beta.5

Official Rust SDK for the Wacht platform, providing type-safe API client and authentication middleware
Documentation
/*
 * Wacht Backend API
 *
 * Backend API for the Wacht platform console
 *
 * The version of the OpenAPI document: 1.0.0
 *
 * Generated by: https://openapi-generator.tech
 */

use serde::{Deserialize, Serialize};

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct DeploymentRestrictionsUpdates {
    /// Enable allowlist mode
    #[serde(rename = "allowlist_enabled", skip_serializing_if = "Option::is_none")]
    pub allowlist_enabled: Option<bool>,

    /// Enable blocklist mode
    #[serde(rename = "blocklist_enabled", skip_serializing_if = "Option::is_none")]
    pub blocklist_enabled: Option<bool>,

    /// Block user+tag@gmail.com style email subaddresses
    #[serde(rename = "block_subaddresses", skip_serializing_if = "Option::is_none")]
    pub block_subaddresses: Option<bool>,

    /// Block disposable email services (guerrillamail, etc.)
    #[serde(
        rename = "block_disposable_emails",
        skip_serializing_if = "Option::is_none"
    )]
    pub block_disposable_emails: Option<bool>,

    /// Block VOIP phones (Google Voice, Skype, etc.)
    #[serde(rename = "block_voip_numbers", skip_serializing_if = "Option::is_none")]
    pub block_voip_numbers: Option<bool>,

    /// Country restrictions (nested object)
    #[serde(
        rename = "country_restrictions",
        skip_serializing_if = "Option::is_none"
    )]
    pub country_restrictions: Option<CountryRestrictions>,

    /// Keywords to block in emails
    #[serde(rename = "banned_keywords", skip_serializing_if = "Option::is_none")]
    pub banned_keywords: Option<Vec<String>>,

    /// Email addresses to allow (NOT domains!)
    #[serde(
        rename = "allowlisted_resources",
        skip_serializing_if = "Option::is_none"
    )]
    pub allowlisted_resources: Option<Vec<String>>,

    /// Email addresses to block (NOT domains!)
    #[serde(
        rename = "blocklisted_resources",
        skip_serializing_if = "Option::is_none"
    )]
    pub blocklisted_resources: Option<Vec<String>>,

    /// Sign up mode: public, restricted, or waitlist
    #[serde(rename = "sign_up_mode", skip_serializing_if = "Option::is_none")]
    pub sign_up_mode: Option<DeploymentRestrictionsSignUpMode>,

    /// Collect names on waitlist signup
    #[serde(
        rename = "waitlist_collect_names",
        skip_serializing_if = "Option::is_none"
    )]
    pub waitlist_collect_names: Option<bool>,

    // Session settings (moved to restrictions)
    #[serde(
        rename = "multi_session_support",
        skip_serializing_if = "Option::is_none"
    )]
    pub multi_session_support: Option<MultiSessionSupport>,

    #[serde(
        rename = "session_token_lifetime",
        skip_serializing_if = "Option::is_none"
    )]
    pub session_token_lifetime: Option<i64>,

    #[serde(
        rename = "session_validity_period",
        skip_serializing_if = "Option::is_none"
    )]
    pub session_validity_period: Option<i64>,

    #[serde(
        rename = "session_inactive_timeout",
        skip_serializing_if = "Option::is_none"
    )]
    pub session_inactive_timeout: Option<i64>,
}

/// Country restrictions nested object
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct CountryRestrictions {
    /// Enable country filtering
    pub enabled: bool,

    /// List of country codes (e.g., ["US", "CA", "GB"])
    #[serde(default)]
    pub country_codes: Vec<String>,
}

/// Multi-session support configuration
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct MultiSessionSupport {
    pub enabled: bool,
    pub max_accounts_per_session: i64,
    pub max_sessions_per_account: i64,
}

/// Sign up mode enum
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DeploymentRestrictionsSignUpMode {
    /// Open signup
    Public,
    /// Restricted mode
    Restricted,
    /// Waitlist mode
    Waitlist,
}

impl Default for DeploymentRestrictionsSignUpMode {
    fn default() -> Self {
        DeploymentRestrictionsSignUpMode::Public
    }
}

impl DeploymentRestrictionsUpdates {
    pub fn new() -> DeploymentRestrictionsUpdates {
        DeploymentRestrictionsUpdates::default()
    }
}