origin-asset 0.2.0

Rust SDK for the Origin Asset Gateway service
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AssetType {
    Image,
    Video,
    Audio,
    Music,
    Tts,
    Model3d,
    Sprite,
    World,
    Text,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ImageEditMode {
    Edit,
    Inpaint,
    Restyle,
    Expand,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GenerateRequest {
    pub asset_type: AssetType,
    pub prompt: Option<String>,
    pub model: Option<String>,
    pub input_file: Option<String>,
    pub provider: Option<String>,
    pub size: Option<String>,
    pub transparent: Option<bool>,
    #[serde(default)]
    pub reference_images: Vec<String>,
    pub edit_mode: Option<ImageEditMode>,
    pub session_id: Option<String>,
    #[serde(default)]
    pub params: Value,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GenerateResponse {
    pub provider_id: String,
    pub output_path: Option<String>,
    pub output_url: Option<String>,
    pub output_data: Option<String>,
    #[serde(default)]
    pub metadata: Value,
    pub cost_usd: Option<f64>,
    pub elapsed_ms: Option<u64>,
    pub job_id: Option<String>,
    pub user_id: Option<String>,
    pub session_id: Option<String>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ImageOptions {
    pub model: Option<String>,
    pub provider: Option<String>,
    pub size: Option<String>,
    pub transparent: Option<bool>,
    pub input: Option<String>,
    #[serde(default)]
    pub reference_images: Vec<String>,
    pub edit_mode: Option<ImageEditMode>,
    pub session_id: Option<String>,
    #[serde(default)]
    pub params: Value,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VideoOptions {
    pub model: Option<String>,
    pub provider: Option<String>,
    pub input: Option<String>,
    pub size: Option<String>,
    #[serde(default)]
    pub params: Value,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AudioOptions {
    pub model: Option<String>,
    pub provider: Option<String>,
    pub audio_type: Option<String>,
    pub duration: Option<u32>,
    #[serde(default)]
    pub params: Value,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TtsOptions {
    pub model: Option<String>,
    pub provider: Option<String>,
    pub voice: Option<String>,
    pub voice_id: Option<String>,
    pub language: Option<String>,
    pub instructions: Option<String>,
    #[serde(default)]
    pub params: Value,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct MusicOptions {
    pub model: Option<String>,
    pub provider: Option<String>,
    pub duration: Option<u32>,
    pub force_instrumental: Option<bool>,
    pub output_format: Option<String>,
    #[serde(default)]
    pub params: Value,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Model3dOptions {
    pub model: Option<String>,
    pub provider: Option<String>,
    pub input: Option<String>,
    pub model_version: Option<String>,
    pub face_limit: Option<u32>,
    pub pbr: Option<bool>,
    pub texture_quality: Option<String>,
    pub auto_size: Option<bool>,
    pub negative_prompt: Option<String>,
    #[serde(default)]
    pub multiview: Vec<String>,
    pub style: Option<String>,
    #[serde(default)]
    pub params: Value,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SpriteOptions {
    pub model: Option<String>,
    pub provider: Option<String>,
    pub input: Option<String>,
    pub animation_type: Option<String>,
    pub direction: Option<String>,
    pub duration: Option<u32>,
    pub style: Option<String>,
    pub output_format: Option<String>,
    pub fps: Option<u32>,
    #[serde(default)]
    pub params: Value,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CropMode {
    Tightest,
    PowerOf2,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ComposeDirection {
    Horizontal,
    Vertical,
    Grid,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "op", rename_all = "snake_case")]
pub enum ProcessOperation {
    SmartCrop {
        mode: Option<CropMode>,
    },
    Resize {
        width: u32,
        height: u32,
    },
    Compose {
        direction: ComposeDirection,
        columns: Option<u32>,
        padding: Option<u32>,
        frame_width: Option<u32>,
        frame_height: Option<u32>,
    },
    ExtractFrames {
        count: Option<u32>,
    },
    RemoveBg {
        bg_color: Option<String>,
    },
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessRequest {
    pub input: Option<String>,
    #[serde(default)]
    pub inputs: Vec<String>,
    pub operations: Vec<ProcessOperation>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessOutputItem {
    pub output_data: String,
    pub width: u32,
    pub height: u32,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProcessResponse {
    pub output_data: String,
    pub width: u32,
    pub height: u32,
    #[serde(default)]
    pub outputs: Vec<ProcessOutputItem>,
    #[serde(default)]
    pub operations_applied: Vec<String>,
    pub elapsed_ms: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JobSummary {
    pub id: String,
    pub user_id: Option<String>,
    pub asset_type: String,
    pub provider_id: String,
    pub status: String,
    pub error_message: Option<String>,
    pub output_path: Option<String>,
    pub cost_usd: Option<f64>,
    pub created_at: String,
    pub started_at: Option<String>,
    pub completed_at: Option<String>,
    pub duration_ms: Option<i64>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderCapabilities {
    pub supports_transparency: bool,
    pub supports_streaming: bool,
    pub max_concurrent: u32,
    pub rate_limit_rpm: Option<u32>,
    pub priority: i32,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderInfo {
    pub id: String,
    pub display_name: String,
    pub asset_types: Vec<AssetType>,
    pub capabilities: ProviderCapabilities,
}