@@ -21,7 +21,7 @@ use futures_util::{future, stream, StreamExt, TryStreamExt};
21
21
use http:: HeaderValue ;
22
22
use tower_service:: Service ;
23
23
24
- use super :: connection :: Connection ;
24
+ use super :: builder :: { ClientBoxService , ClientBuilder } ;
25
25
use crate :: filter:: service:: FilterService ;
26
26
use crate :: filter:: Filter ;
27
27
use crate :: invocation:: { IntoStreamingRequest , Metadata , Request , Response } ;
@@ -32,33 +32,43 @@ use crate::triple::encode::encode;
32
32
33
33
#[ derive( Debug , Clone , Default ) ]
34
34
pub struct TripleClient < T > {
35
- host : Option < http :: Uri > ,
35
+ builder : Option < ClientBuilder > ,
36
36
inner : T ,
37
37
send_compression_encoding : Option < CompressionEncoding > ,
38
38
}
39
39
40
- impl TripleClient < Connection > {
40
+ impl TripleClient < ClientBoxService > {
41
41
pub fn connect ( host : String ) -> Self {
42
42
let uri = match http:: Uri :: from_str ( & host) {
43
- Ok ( v) => Some ( v ) ,
43
+ Ok ( v) => v ,
44
44
Err ( err) => {
45
45
tracing:: error!( "http uri parse error: {}, host: {}" , err, host) ;
46
46
panic ! ( "http uri parse error: {}, host: {}" , err, host)
47
47
}
48
48
} ;
49
49
50
+ let builder = ClientBuilder :: from ( uri) ;
51
+
50
52
TripleClient {
51
- host : uri. clone ( ) ,
52
- inner : Connection :: new ( ) . with_host ( uri. unwrap ( ) ) ,
53
+ builder : Some ( builder. clone ( ) ) ,
54
+ inner : builder. connect ( ) ,
55
+ send_compression_encoding : Some ( CompressionEncoding :: Gzip ) ,
56
+ }
57
+ }
58
+
59
+ pub fn with_builder ( builder : ClientBuilder ) -> Self {
60
+ TripleClient {
61
+ builder : Some ( builder. clone ( ) ) ,
62
+ inner : builder. connect ( ) ,
53
63
send_compression_encoding : Some ( CompressionEncoding :: Gzip ) ,
54
64
}
55
65
}
56
66
}
57
67
58
68
impl < T > TripleClient < T > {
59
- pub fn new ( inner : T , host : Option < http :: Uri > ) -> Self {
69
+ pub fn new ( inner : T , builder : ClientBuilder ) -> Self {
60
70
TripleClient {
61
- host ,
71
+ builder : Some ( builder ) ,
62
72
inner,
63
73
send_compression_encoding : Some ( CompressionEncoding :: Gzip ) ,
64
74
}
@@ -68,7 +78,10 @@ impl<T> TripleClient<T> {
68
78
where
69
79
F : Filter ,
70
80
{
71
- TripleClient :: new ( FilterService :: new ( self . inner , filter) , self . host )
81
+ TripleClient :: new (
82
+ FilterService :: new ( self . inner , filter) ,
83
+ self . builder . unwrap ( ) ,
84
+ )
72
85
}
73
86
}
74
87
82
95
path : http:: uri:: PathAndQuery ,
83
96
body : hyper:: Body ,
84
97
) -> http:: Request < hyper:: Body > {
85
- let mut parts = match self . host . as_ref ( ) {
86
- Some ( v) => v. to_owned ( ) . into_parts ( ) ,
98
+ let mut parts = match self . builder . as_ref ( ) {
99
+ Some ( v) => v. to_owned ( ) . uri . into_parts ( ) ,
87
100
None => {
88
101
tracing:: error!( "client host is empty" ) ;
89
102
return http:: Request :: new ( hyper:: Body :: empty ( ) ) ;
0 commit comments