use super::super::{
super::regions::{DomainWithPort, IpAddrWithPort},
ResponseError, RetriedStatsInfo,
};
use maybe_owned::{MaybeOwned, MaybeOwnedMut};
use qiniu_http::{Extensions, Metrics};
use std::mem::replace;
#[derive(Debug)]
pub struct ChooserFeedback<'f> {
ips: &'f [IpAddrWithPort],
domain: Option<&'f DomainWithPort>,
retried: MaybeOwned<'f, RetriedStatsInfo>,
extensions: MaybeOwnedMut<'f, Extensions>,
metrics: Option<&'f Metrics>,
error: Option<&'f ResponseError>,
}
impl<'f> ChooserFeedback<'f> {
#[inline]
pub fn builder(ips: &'f [IpAddrWithPort]) -> ChooserFeedbackBuilder<'f> {
ChooserFeedbackBuilder::new(ips)
}
#[inline]
pub fn ips(&'f self) -> &'f [IpAddrWithPort] {
self.ips
}
#[inline]
pub fn domain(&'f self) -> Option<&'f DomainWithPort> {
self.domain
}
#[inline]
pub fn retried(&'f self) -> &'f RetriedStatsInfo {
&self.retried
}
#[inline]
pub fn extensions(&'f self) -> &'f Extensions {
&self.extensions
}
#[inline]
pub fn extensions_mut(&'f mut self) -> &'f mut Extensions {
&mut self.extensions
}
#[inline]
pub fn metrics(&'f self) -> Option<&'f Metrics> {
self.metrics
}
#[inline]
pub fn error(&'f self) -> Option<&'f ResponseError> {
self.error
}
}
#[derive(Debug)]
pub struct ChooserFeedbackBuilder<'f>(ChooserFeedback<'f>);
impl<'f> ChooserFeedbackBuilder<'f> {
#[inline]
pub fn new(ips: &'f [IpAddrWithPort]) -> Self {
Self(ChooserFeedback {
ips,
domain: None,
metrics: None,
error: None,
retried: Default::default(),
extensions: Default::default(),
})
}
#[inline]
pub fn domain(&mut self, domain: &'f DomainWithPort) -> &mut Self {
self.0.domain = Some(domain);
self
}
#[inline]
pub fn retried(&mut self, retried: &'f RetriedStatsInfo) -> &mut Self {
self.0.retried = MaybeOwned::from(retried);
self
}
#[inline]
pub fn extensions(&mut self, extensions: &'f mut Extensions) -> &mut Self {
self.0.extensions = MaybeOwnedMut::from(extensions);
self
}
#[inline]
pub fn metrics(&mut self, metrics: &'f Metrics) -> &mut Self {
self.0.metrics = Some(metrics);
self
}
#[inline]
pub fn error(&mut self, error: &'f ResponseError) -> &mut Self {
self.0.error = Some(error);
self
}
#[inline]
pub fn build(&mut self) -> ChooserFeedback<'f> {
let ips = self.0.ips;
replace(
&mut self.0,
ChooserFeedback {
ips,
domain: None,
metrics: None,
error: None,
retried: Default::default(),
extensions: Default::default(),
},
)
}
}