opendal/services/vercel_artifacts/
builder.rs1use std::fmt::Debug;
19use std::fmt::Formatter;
20use std::sync::Arc;
21
22use super::backend::VercelArtifactsBackend;
23use super::core::VercelArtifactsCore;
24use crate::raw::Access;
25use crate::raw::AccessorInfo;
26use crate::raw::HttpClient;
27use crate::services::VercelArtifactsConfig;
28use crate::Scheme;
29use crate::*;
30
31impl Configurator for VercelArtifactsConfig {
32 type Builder = VercelArtifactsBuilder;
33
34 #[allow(deprecated)]
35 fn into_builder(self) -> Self::Builder {
36 VercelArtifactsBuilder {
37 config: self,
38 http_client: None,
39 }
40 }
41}
42
43#[doc = include_str!("docs.md")]
45#[derive(Default)]
46pub struct VercelArtifactsBuilder {
47 config: VercelArtifactsConfig,
48
49 #[deprecated(since = "0.53.0", note = "Use `Operator::update_http_client` instead")]
50 http_client: Option<HttpClient>,
51}
52
53impl Debug for VercelArtifactsBuilder {
54 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
55 let mut d = f.debug_struct("VercelArtifactsBuilder");
56 d.field("config", &self.config);
57 d.finish_non_exhaustive()
58 }
59}
60
61impl VercelArtifactsBuilder {
62 pub fn access_token(mut self, access_token: &str) -> Self {
66 self.config.access_token = Some(access_token.to_string());
67 self
68 }
69
70 #[deprecated(since = "0.53.0", note = "Use `Operator::update_http_client` instead")]
77 #[allow(deprecated)]
78 pub fn http_client(mut self, http_client: HttpClient) -> Self {
79 self.http_client = Some(http_client);
80 self
81 }
82}
83
84impl Builder for VercelArtifactsBuilder {
85 const SCHEME: Scheme = Scheme::VercelArtifacts;
86 type Config = VercelArtifactsConfig;
87
88 fn build(self) -> Result<impl Access> {
89 let info = AccessorInfo::default();
90 info.set_scheme(Scheme::VercelArtifacts)
91 .set_native_capability(Capability {
92 stat: true,
93
94 read: true,
95
96 write: true,
97
98 shared: true,
99
100 ..Default::default()
101 });
102
103 #[allow(deprecated)]
105 if let Some(client) = self.http_client {
106 info.update_http_client(|_| client);
107 }
108
109 match self.config.access_token.clone() {
110 Some(access_token) => Ok(VercelArtifactsBackend {
111 core: Arc::new(VercelArtifactsCore {
112 info: Arc::new(info),
113 access_token,
114 }),
115 }),
116 None => Err(Error::new(ErrorKind::ConfigInvalid, "access_token not set")),
117 }
118 }
119}