qiniu_http_client/client/callback/
extended.rs1use super::{
2 super::{Authorization, Idempotent, InnerRequestParts, QueryPair, RetriedStatsInfo},
3 context::CallbackContext,
4 simplified::SimplifiedCallbackContext,
5};
6use auto_impl::auto_impl;
7use qiniu_http::{
8 uri::Scheme, Extensions, HeaderMap, Method, RequestParts as HttpRequestParts, Uri, UserAgent, Version,
9};
10use std::{borrow::Cow, net::IpAddr};
11
12#[auto_impl(&mut, Box)]
16pub trait ExtendedCallbackContext: CallbackContext {
17 fn url(&self) -> &Uri;
19
20 fn version_mut(&mut self) -> &mut Version;
22
23 fn headers_mut(&mut self) -> &mut HeaderMap;
25
26 fn user_agent(&self) -> UserAgent;
28
29 fn set_appended_user_agent(&mut self, appended_user_agent: UserAgent);
31
32 fn resolved_ip_addrs(&self) -> Option<&[IpAddr]>;
34
35 fn set_resolved_ip_addrs(&mut self, resolved_ip_addrs: Vec<IpAddr>);
37
38 fn retried(&self) -> &RetriedStatsInfo;
40}
41
42#[derive(Debug)]
43pub(in super::super) struct ExtendedCallbackContextImpl<'reqref, 'req, 'retried, 'httpreqref, 'httpreq> {
44 request: &'reqref InnerRequestParts<'req>,
45 http_request: &'httpreqref mut HttpRequestParts<'httpreq>,
46 retried: &'retried RetriedStatsInfo,
47}
48
49impl<'reqref, 'req, 'retried, 'httpreqref, 'httpreq>
50 ExtendedCallbackContextImpl<'reqref, 'req, 'retried, 'httpreqref, 'httpreq>
51{
52 pub(in super::super) fn new(
53 request: &'reqref InnerRequestParts<'req>,
54 http_request: &'httpreqref mut HttpRequestParts<'httpreq>,
55 retried: &'retried RetriedStatsInfo,
56 ) -> Self {
57 Self {
58 request,
59 http_request,
60 retried,
61 }
62 }
63}
64
65impl SimplifiedCallbackContext for ExtendedCallbackContextImpl<'_, '_, '_, '_, '_> {
66 #[inline]
67 fn use_https(&self) -> bool {
68 self.http_request.url().scheme() == Some(&Scheme::HTTPS)
69 }
70
71 #[inline]
72 fn method(&self) -> &Method {
73 self.http_request.method()
74 }
75
76 #[inline]
77 fn version(&self) -> Version {
78 self.http_request.version()
79 }
80
81 #[inline]
82 fn path(&self) -> &str {
83 self.request.path()
84 }
85
86 #[inline]
87 fn query(&self) -> &str {
88 self.request.query()
89 }
90
91 #[inline]
92 fn query_pairs(&self) -> &[QueryPair] {
93 self.request.query_pairs()
94 }
95
96 #[inline]
97 fn headers(&self) -> &HeaderMap {
98 self.http_request.headers()
99 }
100
101 #[inline]
102 fn appended_user_agent(&self) -> &UserAgent {
103 self.http_request.appended_user_agent()
104 }
105
106 #[inline]
107 fn authorization(&self) -> Option<&Authorization> {
108 self.request.authorization()
109 }
110
111 #[inline]
112 fn idempotent(&self) -> Idempotent {
113 self.request.idempotent()
114 }
115}
116
117impl CallbackContext for ExtendedCallbackContextImpl<'_, '_, '_, '_, '_> {
118 #[inline]
119 fn extensions(&self) -> &Extensions {
120 self.http_request.extensions()
121 }
122
123 #[inline]
124 fn extensions_mut(&mut self) -> &mut Extensions {
125 self.http_request.extensions_mut()
126 }
127}
128
129impl ExtendedCallbackContext for ExtendedCallbackContextImpl<'_, '_, '_, '_, '_> {
130 #[inline]
131 fn url(&self) -> &Uri {
132 self.http_request.url()
133 }
134
135 #[inline]
136 fn version_mut(&mut self) -> &mut Version {
137 self.http_request.version_mut()
138 }
139
140 #[inline]
141 fn headers_mut(&mut self) -> &mut HeaderMap {
142 self.http_request.headers_mut()
143 }
144
145 #[inline]
146 fn user_agent(&self) -> UserAgent {
147 self.http_request.user_agent()
148 }
149
150 #[inline]
151 fn set_appended_user_agent(&mut self, appended_user_agent: UserAgent) {
152 *self.http_request.appended_user_agent_mut() = appended_user_agent;
153 }
154
155 #[inline]
156 fn resolved_ip_addrs(&self) -> Option<&[IpAddr]> {
157 self.http_request.resolved_ip_addrs()
158 }
159
160 #[inline]
161 fn set_resolved_ip_addrs(&mut self, resolved_ip_addrs: Vec<IpAddr>) {
162 *self.http_request.resolved_ip_addrs_mut() = Some(Cow::Owned(resolved_ip_addrs));
163 }
164
165 #[inline]
166 fn retried(&self) -> &RetriedStatsInfo {
167 self.retried
168 }
169}