utapi-rs 0.1.2

A Rust wrapper around the UploadThing API.
Documentation
use std::{collections::HashMap, path::PathBuf};

#[derive(serde::Serialize)]
pub enum ContentDisposition {
    Inline,
    Attachment,
}

#[derive(serde::Serialize)]
pub enum Acl {
    Private,
    PublicRead,
}

#[derive(Debug)]
pub struct FileObj {
    pub name: String,
    pub path: PathBuf,
}

#[derive(serde::Serialize)]
pub struct UploadFileOpts {
    pub metadata: Option<HashMap<String, String>>,
    #[serde(rename(serialize = "contentDisposition"))]
    pub content_disposition: Option<ContentDisposition>,
    pub acl: Option<Acl>,
}

#[derive(Debug, serde::Deserialize, Clone)]
pub struct UploadFileResponse {
    pub data: Vec<UploadFileResponseData>,
}

#[derive(Debug, serde::Deserialize, Clone)]
pub struct UploadFileResponseData {
    pub fields: serde_json::Value,
    #[serde(rename = "fileUrl")]
    pub file_url: String,
    pub key: String,
    #[serde(rename = "presignedUrl")]
    pub presigned_url: String,
    pub url: Option<String>,
    pub urls: Option<Vec<String>>,
    pub chunk_size: Option<u64>,
}

fn default_string() -> String {
    String::new()
}

#[derive(Debug, serde::Deserialize)]
pub struct Fields {
    #[serde(rename = "Content-Disposition")]
    pub content_disposition: String,
    #[serde(rename = "Content-Type")]
    pub content_type: String,
    pub policy: String,
    #[serde(rename = "X-Amz-Algorithm")]
    pub x_amz_algorithm: String,
    #[serde(rename = "X-Amz-Credential")]
    pub x_amz_credential: String,
    #[serde(rename = "X-Amz-Date")]
    pub x_amz_date: String,
    #[serde(rename = "X-Amz-Signature")]
    pub x_amz_signature: String,
    #[serde(default = "default_string")]
    pub acl: String,
    #[serde(default = "default_string")]
    pub bucket: String,
    #[serde(default = "default_string")]
    pub key: String,
}

#[derive(Debug, serde::Deserialize, Clone)]
pub struct FileUpload {
    pub key: String,
    pub url: String,
    pub name: String,
    pub size: u64,
}