Skip to content

Commit 77e0374

Browse files
committed
feat: Implement RFC-0409 Accessor Capabilities
Signed-off-by: Xuanwo <[email protected]>
1 parent a4cec4a commit 77e0374

File tree

8 files changed

+32
-6
lines changed

8 files changed

+32
-6
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ backon = { version = "0.0.2", optional = true }
4949
base64 = "0.13.0"
5050
bytes = "1.1.0"
5151
dotenv = { version = "0.15.0", optional = true }
52+
flagset = "0.4.3"
5253
futures = { version = "0.3.21", features = ["alloc"] }
5354
hdrs = { version = "0.1.4", optional = true, features = ["futures-io"] }
5455
http = "0.2.6"

src/accessor.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ use std::io::Result;
1717
use std::sync::Arc;
1818

1919
use async_trait::async_trait;
20+
use flagset::flags;
21+
use flagset::FlagSet;
2022

2123
use crate::ops::OpCreate;
2224
use crate::ops::OpDelete;
@@ -148,6 +150,7 @@ pub struct AccessorMetadata {
148150
scheme: Scheme,
149151
root: String,
150152
name: String,
153+
capabilities: FlagSet<AccessorCapability>,
151154
}
152155

153156
impl AccessorMetadata {
@@ -185,4 +188,17 @@ impl AccessorMetadata {
185188
self.name = name.to_string();
186189
self
187190
}
191+
192+
pub(crate) fn set_capabilities(
193+
&mut self,
194+
capabilities: impl Into<FlagSet<AccessorCapability>>,
195+
) -> &mut Self {
196+
self.capabilities = capabilities.into();
197+
self
198+
}
199+
}
200+
201+
flags! {
202+
/// AccessorCapability describes accessor's advanced capability.
203+
pub(crate) enum AccessorCapability: u32 {}
188204
}

src/services/azblob/backend.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,8 @@ impl Accessor for Backend {
271271
let mut am = AccessorMetadata::default();
272272
am.set_scheme(Scheme::Azblob)
273273
.set_root(&self.root)
274-
.set_name(&self.container);
274+
.set_name(&self.container)
275+
.set_capabilities(None);
275276

276277
am
277278
}

src/services/fs/backend.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,9 @@ impl Backend {
149149
impl Accessor for Backend {
150150
fn metadata(&self) -> AccessorMetadata {
151151
let mut am = AccessorMetadata::default();
152-
am.set_scheme(Scheme::Fs).set_root(&self.root);
152+
am.set_scheme(Scheme::Fs)
153+
.set_root(&self.root)
154+
.set_capabilities(None);
153155

154156
am
155157
}

src/services/hdfs/backend.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,9 @@ impl Backend {
200200
impl Accessor for Backend {
201201
fn metadata(&self) -> AccessorMetadata {
202202
let mut am = AccessorMetadata::default();
203-
am.set_scheme(Scheme::Hdfs).set_root(&self.root);
203+
am.set_scheme(Scheme::Hdfs)
204+
.set_root(&self.root)
205+
.set_capabilities(None);
204206

205207
am
206208
}

src/services/http/backend.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,9 @@ impl Backend {
215215
impl Accessor for Backend {
216216
fn metadata(&self) -> AccessorMetadata {
217217
let mut ma = AccessorMetadata::default();
218-
ma.set_scheme(Scheme::Http).set_root(&self.root);
218+
ma.set_scheme(Scheme::Http)
219+
.set_root(&self.root)
220+
.set_capabilities(None);
219221

220222
ma
221223
}

src/services/memory/backend.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ impl Accessor for Backend {
8080
let mut am = AccessorMetadata::default();
8181
am.set_scheme(Scheme::Memory)
8282
.set_root("/")
83-
.set_name("memory");
83+
.set_name("memory")
84+
.set_capabilities(None);
8485

8586
am
8687
}

src/services/s3/backend.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -821,7 +821,8 @@ impl Accessor for Backend {
821821
let mut am = AccessorMetadata::default();
822822
am.set_scheme(Scheme::S3)
823823
.set_root(&self.root)
824-
.set_name(&self.bucket);
824+
.set_name(&self.bucket)
825+
.set_capabilities(None);
825826

826827
am
827828
}

0 commit comments

Comments
 (0)