civitai 0.1.3

Load models from civit ai.
Documentation
use serde_derive::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelInfo {
    pub id: i64,
    pub name: String,
    pub description: String,
    #[serde(rename = "type")]
    pub type_field: String,
    pub poi: bool,
    pub nsfw: bool,
    pub allow_no_credit: bool,
    pub allow_commercial_use: String,
    pub allow_derivatives: bool,
    pub allow_different_license: bool,
    pub rank: Rank,
    pub creator: Creator,
    pub tags: Vec<String>,
    pub model_versions: Vec<ModelVersion>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Rank {
    pub download_count_all_time: i64,
    pub comment_count_all_time: i64,
    pub favorite_count_all_time: i64,
    pub rating_count_all_time: i64,
    pub rating_all_time: i64,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Creator {
    pub username: String,
    pub image: Value,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelVersion {
    pub id: i64,
    pub model_id: i64,
    pub name: String,
    pub created_at: String,
    pub updated_at: String,
    pub trained_words: Vec<String>,
    pub base_model: String,
    pub early_access_time_frame: i64,
    pub description: Value,
    pub files: Vec<File>,
    pub images: Vec<Image>,
    pub download_url: String,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct File {
    pub name: String,
    pub id: i64,
    #[serde(rename = "sizeKB")]
    pub size_kb: i64,
    #[serde(rename = "type")]
    pub type_field: String,
    pub format: String,
    pub pickle_scan_result: String,
    pub pickle_scan_message: String,
    pub virus_scan_result: String,
    pub scanned_at: String,
    pub hashes: Hashes,
    pub download_url: String,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Hashes {
    #[serde(rename = "AutoV1")]
    pub auto_v1: String,
    #[serde(rename = "AutoV2")]
    pub auto_v2: String,
    #[serde(rename = "SHA256")]
    pub sha256: String,
    #[serde(rename = "CRC32")]
    pub crc32: String,
    #[serde(rename = "BLAKE3")]
    pub blake3: String,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Image {
    pub url: String,
    pub nsfw: bool,
    pub width: i64,
    pub height: i64,
    pub hash: String,
    pub meta: Value,
    pub generation_process: Value,
    pub needs_review: bool,
    pub tags: Vec<Tag>,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Tag {
    pub tag: Tag2,
    pub automated: bool,
}

#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Tag2 {
    pub id: i64,
    pub name: String,
    pub is_category: bool,
}