Skip to content

Commit

Permalink
feat: add r2 endpoints (#170)
Browse files Browse the repository at this point in the history
  • Loading branch information
taylorlee authored and sssilver committed Dec 2, 2021
1 parent ff11f3b commit 1e70061
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
1 change: 1 addition & 0 deletions cloudflare/src/endpoints/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ pub mod argo_tunnel;
pub mod dns;
pub mod load_balancing;
pub mod plan;
pub mod r2;
pub mod user;
pub mod workers;
pub mod workerskv;
Expand Down
81 changes: 81 additions & 0 deletions cloudflare/src/endpoints/r2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
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;

/// A Bucket is a collection of Objects stored in R2.
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub struct Bucket {
/// Bucket name
pub name: String,
/// Creation date of the bucket
pub creation_date: DateTime<Utc>,
}

/// ListBucketsResult contains a list of buckets in an account.
#[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 {}

/// Lists all buckets within the account.
#[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)
}
}

/// Creates a bucket with the given name.
/// A 400 is returned if the account already owns a bucket with this name.
/// A bucket must be explicitly deleted to be replaced.
#[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
)
}
}

/// Deletes a bucket with the given 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
)
}
}

0 comments on commit 1e70061

Please sign in to comment.