use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use crate::sha256::Sha256;
pub type Oid = Sha256;
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Operation {
Upload,
Download,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum Transfer {
Basic,
LfsStandaloneFile,
#[serde(other)]
Custom,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct RequestObject {
pub oid: Oid,
pub size: u64,
}
#[derive(Clone, Default, Debug, Serialize, Deserialize)]
pub struct Action {
pub href: String,
pub header: Option<BTreeMap<String, String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_in: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ObjectError {
pub code: u32,
pub message: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Actions {
#[serde(skip_serializing_if = "Option::is_none")]
pub download: Option<Action>,
#[serde(skip_serializing_if = "Option::is_none")]
pub upload: Option<Action>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verify: Option<Action>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ResponseObject {
pub oid: Oid,
pub size: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<ObjectError>,
#[serde(skip_serializing_if = "Option::is_none")]
pub authenticated: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub actions: Option<Actions>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BatchRequest {
pub operation: Operation,
#[serde(skip_serializing_if = "Option::is_none")]
pub transfers: Option<Vec<Transfer>>,
#[serde(rename = "ref")]
#[serde(skip_serializing_if = "Option::is_none")]
pub refs: Option<BTreeMap<String, String>>,
pub objects: Vec<RequestObject>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BatchResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub transfer: Option<Transfer>,
pub objects: Vec<ResponseObject>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BatchResponseError {
pub message: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub documentation_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_id: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct VerifyRequest {
pub oid: Oid,
pub size: u64,
}