9
9
//! # Resolvers are `Service`s
10
10
//!
11
11
//! A resolver is just a
12
- //! `Service<Name, Response = impl Iterator<Item = IpAddr >>`.
12
+ //! `Service<Name, Response = impl Iterator<Item = SocketAddr >>`.
13
13
//!
14
14
//! A simple resolver that ignores the name and always returns a specific
15
15
//! address:
16
16
//!
17
17
//! ```rust,ignore
18
- //! use std::{convert::Infallible, iter, net::IpAddr };
18
+ //! use std::{convert::Infallible, iter, net::SocketAddr };
19
19
//!
20
20
//! let resolver = tower::service_fn(|_name| async {
21
- //! Ok::<_, Infallible>(iter::once(IpAddr ::from([127, 0, 0, 1])))
21
+ //! Ok::<_, Infallible>(iter::once(SocketAddr ::from(( [127, 0, 0, 1], 8080) )))
22
22
//! });
23
23
//! ```
24
24
use std:: error:: Error ;
25
25
use std:: future:: Future ;
26
- use std:: net:: { IpAddr , Ipv4Addr , Ipv6Addr , SocketAddr , SocketAddrV4 , SocketAddrV6 , ToSocketAddrs } ;
26
+ use std:: net:: { Ipv4Addr , Ipv6Addr , SocketAddr , SocketAddrV4 , SocketAddrV6 , ToSocketAddrs } ;
27
27
use std:: pin:: Pin ;
28
28
use std:: str:: FromStr ;
29
29
use std:: task:: { self , Poll } ;
@@ -48,12 +48,12 @@ pub struct GaiResolver {
48
48
49
49
/// An iterator of IP addresses returned from `getaddrinfo`.
50
50
pub struct GaiAddrs {
51
- inner : IpAddrs ,
51
+ inner : SocketAddrs ,
52
52
}
53
53
54
54
/// A future to resolve a name returned by `GaiResolver`.
55
55
pub struct GaiFuture {
56
- inner : JoinHandle < Result < IpAddrs , io:: Error > > ,
56
+ inner : JoinHandle < Result < SocketAddrs , io:: Error > > ,
57
57
}
58
58
59
59
impl Name {
@@ -121,7 +121,7 @@ impl Service<Name> for GaiResolver {
121
121
debug ! ( "resolving host={:?}" , name. host) ;
122
122
( & * name. host , 0 )
123
123
. to_socket_addrs ( )
124
- . map ( |i| IpAddrs { iter : i } )
124
+ . map ( |i| SocketAddrs { iter : i } )
125
125
} ) ;
126
126
127
127
GaiFuture { inner : blocking }
@@ -159,10 +159,10 @@ impl fmt::Debug for GaiFuture {
159
159
}
160
160
161
161
impl Iterator for GaiAddrs {
162
- type Item = IpAddr ;
162
+ type Item = SocketAddr ;
163
163
164
164
fn next ( & mut self ) -> Option < Self :: Item > {
165
- self . inner . next ( ) . map ( |sa| sa . ip ( ) )
165
+ self . inner . next ( )
166
166
}
167
167
}
168
168
@@ -172,47 +172,47 @@ impl fmt::Debug for GaiAddrs {
172
172
}
173
173
}
174
174
175
- pub ( super ) struct IpAddrs {
175
+ pub ( super ) struct SocketAddrs {
176
176
iter : vec:: IntoIter < SocketAddr > ,
177
177
}
178
178
179
- impl IpAddrs {
179
+ impl SocketAddrs {
180
180
pub ( super ) fn new ( addrs : Vec < SocketAddr > ) -> Self {
181
- IpAddrs {
181
+ SocketAddrs {
182
182
iter : addrs. into_iter ( ) ,
183
183
}
184
184
}
185
185
186
- pub ( super ) fn try_parse ( host : & str , port : u16 ) -> Option < IpAddrs > {
186
+ pub ( super ) fn try_parse ( host : & str , port : u16 ) -> Option < SocketAddrs > {
187
187
if let Ok ( addr) = host. parse :: < Ipv4Addr > ( ) {
188
188
let addr = SocketAddrV4 :: new ( addr, port) ;
189
- return Some ( IpAddrs {
189
+ return Some ( SocketAddrs {
190
190
iter : vec ! [ SocketAddr :: V4 ( addr) ] . into_iter ( ) ,
191
191
} ) ;
192
192
}
193
193
let host = host. trim_start_matches ( '[' ) . trim_end_matches ( ']' ) ;
194
194
if let Ok ( addr) = host. parse :: < Ipv6Addr > ( ) {
195
195
let addr = SocketAddrV6 :: new ( addr, port, 0 , 0 ) ;
196
- return Some ( IpAddrs {
196
+ return Some ( SocketAddrs {
197
197
iter : vec ! [ SocketAddr :: V6 ( addr) ] . into_iter ( ) ,
198
198
} ) ;
199
199
}
200
200
None
201
201
}
202
202
203
203
#[ inline]
204
- fn filter ( self , predicate : impl FnMut ( & SocketAddr ) -> bool ) -> IpAddrs {
205
- IpAddrs :: new ( self . iter . filter ( predicate) . collect ( ) )
204
+ fn filter ( self , predicate : impl FnMut ( & SocketAddr ) -> bool ) -> SocketAddrs {
205
+ SocketAddrs :: new ( self . iter . filter ( predicate) . collect ( ) )
206
206
}
207
207
208
208
pub ( super ) fn split_by_preference (
209
209
self ,
210
210
local_addr_ipv4 : Option < Ipv4Addr > ,
211
211
local_addr_ipv6 : Option < Ipv6Addr > ,
212
- ) -> ( IpAddrs , IpAddrs ) {
212
+ ) -> ( SocketAddrs , SocketAddrs ) {
213
213
match ( local_addr_ipv4, local_addr_ipv6) {
214
- ( Some ( _) , None ) => ( self . filter ( SocketAddr :: is_ipv4) , IpAddrs :: new ( vec ! [ ] ) ) ,
215
- ( None , Some ( _) ) => ( self . filter ( SocketAddr :: is_ipv6) , IpAddrs :: new ( vec ! [ ] ) ) ,
214
+ ( Some ( _) , None ) => ( self . filter ( SocketAddr :: is_ipv4) , SocketAddrs :: new ( vec ! [ ] ) ) ,
215
+ ( None , Some ( _) ) => ( self . filter ( SocketAddr :: is_ipv6) , SocketAddrs :: new ( vec ! [ ] ) ) ,
216
216
_ => {
217
217
let preferring_v6 = self
218
218
. iter
@@ -225,7 +225,7 @@ impl IpAddrs {
225
225
. iter
226
226
. partition :: < Vec < _ > , _ > ( |addr| addr. is_ipv6 ( ) == preferring_v6) ;
227
227
228
- ( IpAddrs :: new ( preferred) , IpAddrs :: new ( fallback) )
228
+ ( SocketAddrs :: new ( preferred) , SocketAddrs :: new ( fallback) )
229
229
}
230
230
}
231
231
}
@@ -239,7 +239,7 @@ impl IpAddrs {
239
239
}
240
240
}
241
241
242
- impl Iterator for IpAddrs {
242
+ impl Iterator for SocketAddrs {
243
243
type Item = SocketAddr ;
244
244
#[ inline]
245
245
fn next ( & mut self ) -> Option < SocketAddr > {
@@ -312,13 +312,13 @@ impl Future for TokioThreadpoolGaiFuture {
312
312
*/
313
313
314
314
mod sealed {
315
- use super :: { IpAddr , Name } ;
315
+ use super :: { SocketAddr , Name } ;
316
316
use crate :: common:: { task, Future , Poll } ;
317
317
use tower_service:: Service ;
318
318
319
319
// "Trait alias" for `Service<Name, Response = Addrs>`
320
320
pub trait Resolve {
321
- type Addrs : Iterator < Item = IpAddr > ;
321
+ type Addrs : Iterator < Item = SocketAddr > ;
322
322
type Error : Into < Box < dyn std:: error:: Error + Send + Sync > > ;
323
323
type Future : Future < Output = Result < Self :: Addrs , Self :: Error > > ;
324
324
@@ -329,7 +329,7 @@ mod sealed {
329
329
impl < S > Resolve for S
330
330
where
331
331
S : Service < Name > ,
332
- S :: Response : Iterator < Item = IpAddr > ,
332
+ S :: Response : Iterator < Item = SocketAddr > ,
333
333
S :: Error : Into < Box < dyn std:: error:: Error + Send + Sync > > ,
334
334
{
335
335
type Addrs = S :: Response ;
@@ -366,42 +366,42 @@ mod tests {
366
366
let v4_addr = ( ip_v4, 80 ) . into ( ) ;
367
367
let v6_addr = ( ip_v6, 80 ) . into ( ) ;
368
368
369
- let ( mut preferred, mut fallback) = IpAddrs {
369
+ let ( mut preferred, mut fallback) = SocketAddrs {
370
370
iter : vec ! [ v4_addr, v6_addr] . into_iter ( ) ,
371
371
}
372
372
. split_by_preference ( None , None ) ;
373
373
assert ! ( preferred. next( ) . unwrap( ) . is_ipv4( ) ) ;
374
374
assert ! ( fallback. next( ) . unwrap( ) . is_ipv6( ) ) ;
375
375
376
- let ( mut preferred, mut fallback) = IpAddrs {
376
+ let ( mut preferred, mut fallback) = SocketAddrs {
377
377
iter : vec ! [ v6_addr, v4_addr] . into_iter ( ) ,
378
378
}
379
379
. split_by_preference ( None , None ) ;
380
380
assert ! ( preferred. next( ) . unwrap( ) . is_ipv6( ) ) ;
381
381
assert ! ( fallback. next( ) . unwrap( ) . is_ipv4( ) ) ;
382
382
383
- let ( mut preferred, mut fallback) = IpAddrs {
383
+ let ( mut preferred, mut fallback) = SocketAddrs {
384
384
iter : vec ! [ v4_addr, v6_addr] . into_iter ( ) ,
385
385
}
386
386
. split_by_preference ( Some ( ip_v4) , Some ( ip_v6) ) ;
387
387
assert ! ( preferred. next( ) . unwrap( ) . is_ipv4( ) ) ;
388
388
assert ! ( fallback. next( ) . unwrap( ) . is_ipv6( ) ) ;
389
389
390
- let ( mut preferred, mut fallback) = IpAddrs {
390
+ let ( mut preferred, mut fallback) = SocketAddrs {
391
391
iter : vec ! [ v6_addr, v4_addr] . into_iter ( ) ,
392
392
}
393
393
. split_by_preference ( Some ( ip_v4) , Some ( ip_v6) ) ;
394
394
assert ! ( preferred. next( ) . unwrap( ) . is_ipv6( ) ) ;
395
395
assert ! ( fallback. next( ) . unwrap( ) . is_ipv4( ) ) ;
396
396
397
- let ( mut preferred, fallback) = IpAddrs {
397
+ let ( mut preferred, fallback) = SocketAddrs {
398
398
iter : vec ! [ v4_addr, v6_addr] . into_iter ( ) ,
399
399
}
400
400
. split_by_preference ( Some ( ip_v4) , None ) ;
401
401
assert ! ( preferred. next( ) . unwrap( ) . is_ipv4( ) ) ;
402
402
assert ! ( fallback. is_empty( ) ) ;
403
403
404
- let ( mut preferred, fallback) = IpAddrs {
404
+ let ( mut preferred, fallback) = SocketAddrs {
405
405
iter : vec ! [ v4_addr, v6_addr] . into_iter ( ) ,
406
406
}
407
407
. split_by_preference ( None , Some ( ip_v6) ) ;
@@ -422,7 +422,7 @@ mod tests {
422
422
let dst = :: http:: Uri :: from_static ( "http://[::1]:8080/" ) ;
423
423
424
424
let mut addrs =
425
- IpAddrs :: try_parse ( dst. host ( ) . expect ( "host" ) , dst. port_u16 ( ) . expect ( "port" ) )
425
+ SocketAddrs :: try_parse ( dst. host ( ) . expect ( "host" ) , dst. port_u16 ( ) . expect ( "port" ) )
426
426
. expect ( "try_parse" ) ;
427
427
428
428
let expected = "[::1]:8080" . parse :: < SocketAddr > ( ) . expect ( "expected" ) ;
0 commit comments