use chrono::offset::Utc;
use chrono::DateTime;
use serde::Deserialize;
use std::collections::HashMap;
use crate::framework::endpoint::{Endpoint, Method};
use crate::framework::response::ApiResult;
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct Bucket {
pub name: String,
pub creation_date: DateTime<Utc>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct ListBucketsResult {
pub buckets: Vec<Bucket>,
}
type EmptyMap = HashMap<(), ()>;
impl ApiResult for EmptyMap {}
impl ApiResult for ListBucketsResult {}
#[derive(Debug)]
pub struct ListBuckets<'a> {
pub account_identifier: &'a str,
}
impl<'a> Endpoint<ListBucketsResult> for ListBuckets<'a> {
fn method(&self) -> Method {
Method::Get
}
fn path(&self) -> String {
format!("accounts/{}/r2/buckets", self.account_identifier)
}
}
#[derive(Debug)]
pub struct CreateBucket<'a> {
pub account_identifier: &'a str,
pub bucket_name: &'a str,
}
impl<'a> Endpoint<EmptyMap> for CreateBucket<'a> {
fn method(&self) -> Method {
Method::Put
}
fn path(&self) -> String {
format!(
"accounts/{}/r2/buckets/{}",
self.account_identifier, self.bucket_name
)
}
}
#[derive(Debug)]
pub struct DeleteBucket<'a> {
pub account_identifier: &'a str,
pub bucket_name: &'a str,
}
impl<'a> Endpoint<EmptyMap> for DeleteBucket<'a> {
fn method(&self) -> Method {
Method::Delete
}
fn path(&self) -> String {
format!(
"accounts/{}/r2/buckets/{}",
self.account_identifier, self.bucket_name
)
}
}