offline-cli 0.3.3

The Offline Protocol developer CLI
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct DeveloperProfile {
    pub id: i32,
    pub email: String,
    #[serde(default)]
    pub created_at: Option<String>,
    #[serde(default)]
    pub updated_at: Option<String>,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct Organization {
    pub id: String,
    pub name: String,
    #[serde(default)]
    pub owner_id: Option<i32>,
    #[serde(default, alias = "owner_developer_id")]
    pub owner_developer_id: Option<i32>,
    #[serde(default)]
    pub role: Option<String>,
    #[serde(default)]
    pub joined: Option<bool>,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct Application {
    pub id: String,
    pub name: String,
    #[serde(default)]
    pub description: Option<String>,
    #[serde(default, alias = "organizationId")]
    pub organization_id: Option<String>,
    #[serde(default)]
    pub origins: Vec<String>,
    #[serde(default)]
    pub plan_id: Option<i32>,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub struct ApiKeyRecord {
    #[serde(default)]
    pub key: Option<String>,
    #[serde(default, alias = "alias")]
    pub name: Option<String>,
    pub id: Option<String>,
    #[serde(default, alias = "applicationId")]
    pub application_id: Option<String>,
    #[serde(default)]
    pub product: Option<String>,
    #[serde(default)]
    pub permissions: Option<String>,
    #[serde(default)]
    pub status: Option<String>,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Default)]
pub struct MeshSdkSettings {
    #[serde(default, alias = "meshTelemetry")]
    pub mesh_telemetry: bool,
    #[serde(default, alias = "hostedRelay")]
    pub hosted_relay: bool,
}

#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct CliMeProductSettings {
    #[serde(default)]
    pub mesh_sdk: MeshSdkSettings,
}

#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct CliMe {
    #[serde(default, alias = "keyName")]
    pub key_name: Option<String>,
    #[serde(
        default,
        alias = "applicationId",
        alias = "projectId",
        alias = "project_id"
    )]
    pub app_id: Option<String>,
    #[serde(default)]
    pub product: Option<String>,
    #[serde(default)]
    pub permissions: Option<String>,
    #[serde(default)]
    pub email: Option<String>,
    #[serde(default)]
    pub product_settings: Option<CliMeProductSettings>,
}

#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct AuthSessionResult {
    pub developer: DeveloperProfile,
    pub token: String,
    /// This sign-in cancelled the account's scheduled deletion.
    #[serde(default)]
    pub deletion_cancelled: bool,
}

/// `POST /developers/sessions/refresh`: a fresh token for the same session
/// once the current one is past half its lifetime.
#[derive(Debug, Clone, Deserialize, PartialEq)]
pub struct SessionRefresh {
    pub renewed: bool,
    pub token: String,
}

#[derive(Serialize)]
pub struct CreateOrganizationBody<'a> {
    pub name: &'a str,
}

#[derive(Serialize)]
pub struct CreateApplicationBody<'a> {
    pub name: &'a str,
    #[serde(rename = "organizationId", alias = "organization_id")]
    pub organization_id: &'a str,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<&'a str>,
}

#[derive(Serialize)]
pub struct CreateApiKeyBody<'a> {
    pub alias: &'a str,
    pub product: &'a str,
    pub permissions: &'a str,
}