mod instrumentation;
mod user_agent;
pub use instrumentation::*;
use std::sync::Arc;
use typespec_client_core::http::policies::Policy;
pub use typespec_client_core::http::{
ClientMethodOptions, ExponentialRetryOptions, FixedRetryOptions, LoggingOptions,
PipelineOptions, RetryOptions, Transport,
};
pub use user_agent::*;
use crate::cloud::CloudConfiguration;
#[derive(Clone, Debug, Default)]
pub struct ClientOptions {
pub per_call_policies: Vec<Arc<dyn Policy>>,
pub per_try_policies: Vec<Arc<dyn Policy>>,
pub retry: RetryOptions,
pub transport: Option<Transport>,
pub user_agent: UserAgentOptions,
pub instrumentation: InstrumentationOptions,
pub logging: LoggingOptions,
pub cloud: Option<Arc<CloudConfiguration>>,
}
pub(crate) struct CoreClientOptions {
pub(crate) user_agent: UserAgentOptions,
pub(crate) instrumentation: InstrumentationOptions,
}
impl ClientOptions {
pub(in crate::http) fn deconstruct(
self,
) -> (CoreClientOptions, typespec_client_core::http::ClientOptions) {
let options = typespec_client_core::http::ClientOptions {
per_call_policies: self.per_call_policies,
per_try_policies: self.per_try_policies,
retry: self.retry,
transport: self.transport,
logging: self.logging,
};
(
CoreClientOptions {
user_agent: self.user_agent,
instrumentation: self.instrumentation,
},
options,
)
}
}