use super::FdfsClient;
use crate::Result;
use crate::Version;
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct ClientOptions {
pub tracker_addrs: Vec<String>,
pub max_connections: usize,
pub connect_timeout: Duration,
pub network_timeout: Duration,
pub idle_timeout: Duration,
pub retry_count: usize,
pub version: Version,
}
impl Default for ClientOptions {
fn default() -> Self {
Self {
tracker_addrs: Default::default(),
max_connections: 10,
connect_timeout: Duration::from_secs(5),
network_timeout: Duration::from_secs(30),
idle_timeout: Duration::from_secs(60),
retry_count: 3,
version: Version::latest(),
}
}
}
impl ClientOptions {
pub fn new<S: AsRef<str>>(tracker_addrs: Vec<S>) -> Self {
let tracker_addrs = tracker_addrs
.into_iter()
.map(|s| s.as_ref().to_string())
.collect();
Self {
tracker_addrs,
..Default::default()
}
}
pub fn max_connections(mut self, n: usize) -> Self {
self.max_connections = n;
self
}
pub fn connect_timeout(mut self, timeout: Duration) -> Self {
self.connect_timeout = timeout;
self
}
pub fn network_timeout(mut self, timeout: Duration) -> Self {
self.network_timeout = timeout;
self
}
pub fn idle_timeout(mut self, timeout: Duration) -> Self {
self.idle_timeout = timeout;
self
}
pub fn retry_count(mut self, n: usize) -> Self {
self.retry_count = n;
self
}
pub fn version(mut self, v: Version) -> Self {
self.version = v;
self
}
pub fn build(self) -> Result<FdfsClient> {
FdfsClient::new(self)
}
}