img_src 0.3.2

Rust SDK for img-src image processing and delivery API
Documentation
/*
 * img-src API
 *
 * Image processing and delivery API.  A serverless image processing and delivery API built on Cloudflare Workers with parameter-driven image transformation and on-demand transcoding.  ## Features  - **Image Upload**: Store original images in R2 with SHA256-based deduplication - **On-Demand Transformation**: Resize, crop, and convert images via URL parameters - **Format Conversion**: WebP, AVIF, JPEG, PNG output formats - **Path Organization**: Organize images into folders with multiple paths per image - **CDN Caching**: Automatic edge caching for transformed images  ## Authentication  Authenticate using API Keys with `imgsrc_` prefix. Create your API key at https://img-src.io/settings  ## Rate Limiting  - **Free Plan**: 100 requests/minute - **Pro Plan**: 500 requests/minute  Rate limit headers are included in all responses.
 *
 * The version of the OpenAPI document: 1.0.0
 * Contact: taehun@taehun.dev
 * Generated by: https://openapi-generator.tech
 */

use crate::models;
use serde::{Deserialize, Serialize};

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct UserSettings {
    /// Clerk user ID
    #[serde(rename = "id")]
    pub id: String,
    /// Username
    #[serde(rename = "username")]
    pub username: String,
    /// Email address
    #[serde(rename = "email", skip_serializing_if = "Option::is_none")]
    pub email: Option<String>,
    /// User's plan
    #[serde(rename = "plan")]
    pub plan: String,
    /// Preferred delivery formats (ordered)
    #[serde(rename = "delivery_formats")]
    pub delivery_formats: Vec<String>,
    /// Default image quality (1-100)
    #[serde(rename = "default_quality")]
    pub default_quality: i32,
    /// Default fit mode
    #[serde(rename = "default_fit_mode")]
    pub default_fit_mode: String,
    /// Default maximum width
    #[serde(rename = "default_max_width", skip_serializing_if = "Option::is_none")]
    pub default_max_width: Option<i32>,
    /// Default maximum height
    #[serde(rename = "default_max_height", skip_serializing_if = "Option::is_none")]
    pub default_max_height: Option<i32>,
    /// UI theme
    #[serde(rename = "theme")]
    pub theme: String,
    /// UI language
    #[serde(rename = "language")]
    pub language: String,
    /// Account creation timestamp (Unix epoch)
    #[serde(rename = "created_at")]
    pub created_at: i64,
    /// Last update timestamp (Unix epoch)
    #[serde(rename = "updated_at")]
    pub updated_at: i64,
    /// Total number of uploads
    #[serde(rename = "total_uploads")]
    pub total_uploads: i32,
    /// Total storage used in bytes
    #[serde(rename = "storage_used_bytes")]
    pub storage_used_bytes: i64,
}

impl UserSettings {
    pub fn new(
        id: String,
        username: String,
        plan: String,
        delivery_formats: Vec<String>,
        default_quality: i32,
        default_fit_mode: String,
        theme: String,
        language: String,
        created_at: i64,
        updated_at: i64,
        total_uploads: i32,
        storage_used_bytes: i64,
    ) -> UserSettings {
        UserSettings {
            id,
            username,
            email: None,
            plan,
            delivery_formats,
            default_quality,
            default_fit_mode,
            default_max_width: None,
            default_max_height: None,
            theme,
            language,
            created_at,
            updated_at,
            total_uploads,
            storage_used_bytes,
        }
    }
}