You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2026/03/18 11:06:09 UTC
(opendal-reqsign) branch main updated: feat(volcengine-tos): migrate default credential builder api (#712)
This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal-reqsign.git
The following commit(s) were added to refs/heads/main by this push:
new 4b8be5e feat(volcengine-tos): migrate default credential builder api (#712)
4b8be5e is described below
commit 4b8be5ec348d29a40c9de77b74b78e8cd053a82c
Author: Xuanwo <gi...@xuanwo.io>
AuthorDate: Wed Mar 18 19:06:04 2026 +0800
feat(volcengine-tos): migrate default credential builder api (#712)
Migrate the Volcengine TOS default credential provider to the slot-based
builder API from the default credential provider design. This removes
the legacy configure/disable env API, keeps env as the only public slot,
and adds coverage that `no_env()` actually removes the provider from the
chain.
This PR is part of the service-by-service migration toward the new
`DefaultCredentialProvider` API documented in
`docs/default-credential-provider-api.md`.
---
.../src/provide_credential/default.rs | 53 ++++++++++++++--------
1 file changed, 34 insertions(+), 19 deletions(-)
diff --git a/services/volcengine-tos/src/provide_credential/default.rs b/services/volcengine-tos/src/provide_credential/default.rs
index 63cca8e..4c3a2a4 100644
--- a/services/volcengine-tos/src/provide_credential/default.rs
+++ b/services/volcengine-tos/src/provide_credential/default.rs
@@ -77,36 +77,34 @@ impl DefaultCredentialProvider {
/// Builder for `DefaultCredentialProvider`.
///
-/// Use `configure_env` to customize environment loading and
-/// `disable_env(bool)` to control participation, then `build()` to create the provider.
-#[derive(Default)]
+/// Use `env(...)` to set the environment provider slot or `no_env()` to remove it.
pub struct DefaultCredentialProviderBuilder {
env: Option<EnvCredentialProvider>,
}
+impl Default for DefaultCredentialProviderBuilder {
+ fn default() -> Self {
+ Self {
+ env: Some(EnvCredentialProvider),
+ }
+ }
+}
+
impl DefaultCredentialProviderBuilder {
/// Create a new builder with default state.
pub fn new() -> Self {
Self::default()
}
- /// Configure the environment credential provider.
- pub fn configure_env<F>(mut self, f: F) -> Self
- where
- F: FnOnce(EnvCredentialProvider) -> EnvCredentialProvider,
- {
- let p = self.env.take().unwrap_or_default();
- self.env = Some(f(p));
+ /// Set the environment credential provider slot.
+ pub fn env(mut self, provider: EnvCredentialProvider) -> Self {
+ self.env = Some(provider);
self
}
- /// Disable (true) or ensure enabled (false) the environment provider.
- pub fn disable_env(mut self, disable: bool) -> Self {
- if disable {
- self.env = None;
- } else if self.env.is_none() {
- self.env = Some(EnvCredentialProvider::new());
- }
+ /// Remove the environment credential provider slot.
+ pub fn no_env(mut self) -> Self {
+ self.env = None;
self
}
@@ -115,8 +113,6 @@ impl DefaultCredentialProviderBuilder {
let mut chain = ProvideCredentialChain::new();
if let Some(p) = self.env {
chain = chain.push(p);
- } else {
- chain = chain.push(EnvCredentialProvider::new());
}
DefaultCredentialProvider::with_chain(chain)
}
@@ -190,4 +186,23 @@ mod tests {
assert_eq!("secret_access_key", credential.secret_access_key);
assert_eq!("security_token", credential.session_token.unwrap());
}
+
+ #[tokio::test]
+ async fn test_default_loader_with_no_env() {
+ let ctx = Context::new().with_env(StaticEnv {
+ home_dir: None,
+ envs: HashMap::from_iter([
+ (ENV_ACCESS_KEY_ID.to_string(), "access_key_id".to_string()),
+ (
+ ENV_SECRET_ACCESS_KEY.to_string(),
+ "secret_access_key".to_string(),
+ ),
+ ]),
+ });
+
+ let loader = DefaultCredentialProvider::builder().no_env().build();
+ let credential = loader.provide_credential(&ctx).await.unwrap();
+
+ assert!(credential.is_none());
+ }
}