qiniu_http_client/client/chooser/
feedback.rs1use super::super::{
2 super::regions::{DomainWithPort, IpAddrWithPort},
3 ResponseError, RetriedStatsInfo,
4};
5use maybe_owned::{MaybeOwned, MaybeOwnedMut};
6use qiniu_http::{Extensions, Metrics};
7use std::mem::replace;
8
9#[derive(Debug)]
13pub struct ChooserFeedback<'f> {
14 ips: &'f [IpAddrWithPort],
15 domain: Option<&'f DomainWithPort>,
16 retried: MaybeOwned<'f, RetriedStatsInfo>,
17 extensions: MaybeOwnedMut<'f, Extensions>,
18 metrics: Option<&'f Metrics>,
19 error: Option<&'f ResponseError>,
20}
21
22impl<'f> ChooserFeedback<'f> {
23 #[inline]
25 pub fn builder(ips: &'f [IpAddrWithPort]) -> ChooserFeedbackBuilder<'f> {
26 ChooserFeedbackBuilder::new(ips)
27 }
28
29 #[inline]
31 pub fn ips(&'f self) -> &'f [IpAddrWithPort] {
32 self.ips
33 }
34
35 #[inline]
39 pub fn domain(&'f self) -> Option<&'f DomainWithPort> {
40 self.domain
41 }
42
43 #[inline]
45 pub fn retried(&'f self) -> &'f RetriedStatsInfo {
46 &self.retried
47 }
48
49 #[inline]
51 pub fn extensions(&'f self) -> &'f Extensions {
52 &self.extensions
53 }
54
55 #[inline]
57 pub fn extensions_mut(&'f mut self) -> &'f mut Extensions {
58 &mut self.extensions
59 }
60
61 #[inline]
63 pub fn metrics(&'f self) -> Option<&'f Metrics> {
64 self.metrics
65 }
66
67 #[inline]
69 pub fn error(&'f self) -> Option<&'f ResponseError> {
70 self.error
71 }
72}
73
74#[derive(Debug)]
76pub struct ChooserFeedbackBuilder<'f>(ChooserFeedback<'f>);
77
78impl<'f> ChooserFeedbackBuilder<'f> {
79 #[inline]
81 pub fn new(ips: &'f [IpAddrWithPort]) -> Self {
82 Self(ChooserFeedback {
83 ips,
84 domain: None,
85 metrics: None,
86 error: None,
87 retried: Default::default(),
88 extensions: Default::default(),
89 })
90 }
91
92 #[inline]
94 pub fn domain(&mut self, domain: &'f DomainWithPort) -> &mut Self {
95 self.0.domain = Some(domain);
96 self
97 }
98
99 #[inline]
101 pub fn retried(&mut self, retried: &'f RetriedStatsInfo) -> &mut Self {
102 self.0.retried = MaybeOwned::from(retried);
103 self
104 }
105
106 #[inline]
108 pub fn extensions(&mut self, extensions: &'f mut Extensions) -> &mut Self {
109 self.0.extensions = MaybeOwnedMut::from(extensions);
110 self
111 }
112
113 #[inline]
115 pub fn metrics(&mut self, metrics: &'f Metrics) -> &mut Self {
116 self.0.metrics = Some(metrics);
117 self
118 }
119
120 #[inline]
122 pub fn error(&mut self, error: &'f ResponseError) -> &mut Self {
123 self.0.error = Some(error);
124 self
125 }
126
127 #[inline]
129 pub fn build(&mut self) -> ChooserFeedback<'f> {
130 let ips = self.0.ips;
131 replace(
132 &mut self.0,
133 ChooserFeedback {
134 ips,
135 domain: None,
136 metrics: None,
137 error: None,
138 retried: Default::default(),
139 extensions: Default::default(),
140 },
141 )
142 }
143}