use crate::volcengine::client::config as client_config; use crate::volcengine::config; use crate::volcengine::endpoint::endpoint; use crate::volcengine::error::error; use crate::volcengine::request::handles; use crate::volcengine::util::url;
#[derive(Debug, Clone)]
pub struct Session {
config: config::Config, handles: handles::Handles, }
impl Session {
pub fn builder() -> SessionBuilder {
SessionBuilder {
config: None,
handles: None,
} }
pub fn new_client_config(
&self,
client_service_name: client_config::ClientServiceName, ) -> client_config::Config {
let mut client_config = client_config::Config {
config: self.config.clone(), endpoint: String::new(), signing_region: String::new(), signing_name: String::new(), signing_name_derived: false, handles: self.handles.clone(), };
if client_config.config.endpoint.is_empty() {
let endpoint_url = url::Url {
service_name: client_service_name, region: self.config.region.clone(), }
.get_endpoint();
client_config.config.endpoint = endpoint_url.to_string(); }
let resolved_endpoint = self.resolve_endpoint(&client_config.config.endpoint);
client_config.endpoint = resolved_endpoint.url; client_config.signing_region = resolved_endpoint.signing_region; client_config.signing_name = resolved_endpoint.signing_name; client_config.signing_name_derived = resolved_endpoint.signing_name_derived;
client_config
}
fn resolve_endpoint(&self, endpoint: &str) -> endpoint::ResolvedEndpoint {
let mut resolved_endpoint = endpoint::ResolvedEndpoint {
url: String::new(), signing_region: String::new(), signing_name: String::new(), signing_name_derived: false, };
if !endpoint.is_empty() {
let endpoint_url = endpoint::add_scheme(endpoint, self.config.disable_ssl); resolved_endpoint.url = endpoint_url; resolved_endpoint.signing_region = self.config.region.clone(); }
resolved_endpoint
}
}
pub struct SessionBuilder {
config: Option<config::Config>, handles: Option<handles::Handles>, }
impl SessionBuilder {
pub fn with_config(mut self, config: config::Config) -> Self {
self.config = Some(config); self
}
pub fn with_handles(mut self, handles: handles::Handles) -> Self {
self.handles = Some(handles); self
}
pub fn build(self) -> Result<Session, error::Error> {
if self.config.is_none() {
return Err(error::Error::ErrUtilSessionBuildSessionNoConfig); }
Ok(Session {
config: self.config.unwrap(), handles: handles::Handles {}, })
}
}