@@ -129,7 +129,7 @@ impl trace::SpanExporter for Exporter {
129
129
pub struct PipelineBuilder {
130
130
agent_endpoint : Vec < net:: SocketAddr > ,
131
131
#[ cfg( any( feature = "collector_client" , feature = "wasm_collector_client" ) ) ]
132
- collector_endpoint : Option < http:: Uri > ,
132
+ collector_endpoint : Option < Result < http:: Uri , http :: uri :: InvalidUri > > ,
133
133
#[ cfg( any( feature = "collector_client" , feature = "wasm_collector_client" ) ) ]
134
134
collector_username : Option < String > ,
135
135
#[ cfg( any( feature = "collector_client" , feature = "wasm_collector_client" ) ) ]
@@ -206,9 +206,12 @@ impl PipelineBuilder {
206
206
pub fn with_collector_endpoint < T > ( self , collector_endpoint : T ) -> Self
207
207
where
208
208
http:: Uri : core:: convert:: TryFrom < T > ,
209
+ <http:: Uri as core:: convert:: TryFrom < T > >:: Error : Into < http:: uri:: InvalidUri > ,
209
210
{
210
211
PipelineBuilder {
211
- collector_endpoint : core:: convert:: TryFrom :: try_from ( collector_endpoint) . ok ( ) ,
212
+ collector_endpoint : Some (
213
+ core:: convert:: TryFrom :: try_from ( collector_endpoint) . map_err ( Into :: into) ,
214
+ ) ,
212
215
..self
213
216
}
214
217
}
@@ -314,7 +317,11 @@ impl PipelineBuilder {
314
317
315
318
#[ cfg( feature = "collector_client" ) ]
316
319
fn init_uploader ( self ) -> Result < ( Process , uploader:: BatchUploader ) , TraceError > {
317
- if let Some ( collector_endpoint) = self . collector_endpoint {
320
+ if let Some ( collector_endpoint) = self
321
+ . collector_endpoint
322
+ . transpose ( )
323
+ . map_err :: < Error , _ > ( Into :: into) ?
324
+ {
318
325
#[ cfg( all(
319
326
not( feature = "isahc_collector_client" ) ,
320
327
not( feature = "surf_collector_client" ) ,
@@ -402,7 +409,11 @@ impl PipelineBuilder {
402
409
403
410
#[ cfg( all( feature = "wasm_collector_client" , not( feature = "collector_client" ) ) ) ]
404
411
fn init_uploader ( self ) -> Result < ( Process , uploader:: BatchUploader ) , TraceError > {
405
- if let Some ( collector_endpoint) = self . collector_endpoint {
412
+ if let Some ( collector_endpoint) = self
413
+ . collector_endpoint
414
+ . transpose ( )
415
+ . map_err :: < Error , _ > ( Into :: into) ?
416
+ {
406
417
let collector = CollectorAsyncClientHttp :: new (
407
418
collector_endpoint,
408
419
self . collector_username ,
@@ -680,6 +691,11 @@ pub enum Error {
680
691
feature = "reqwest_blocking_collector_client"
681
692
) ) ]
682
693
ReqwestClientError ( #[ from] reqwest:: Error ) ,
694
+
695
+ /// invalid collector uri is provided.
696
+ #[ error( "collector uri is invalid, {0}" ) ]
697
+ #[ cfg( any( feature = "collector_client" , feature = "wasm_collector_client" ) ) ]
698
+ InvalidUri ( #[ from] http:: uri:: InvalidUri ) ,
683
699
}
684
700
685
701
impl ExportError for Error {
@@ -737,6 +753,30 @@ mod collector_client_tests {
737
753
738
754
Ok ( ( ) )
739
755
}
756
+
757
+ #[ test]
758
+ #[ cfg( any(
759
+ feature = "isahc_collector_client" ,
760
+ feature = "surf_collector_client" ,
761
+ feature = "reqwest_collector_client" ,
762
+ feature = "reqwest_blocking_collector_client"
763
+ ) ) ]
764
+ fn test_set_collector_endpoint ( ) {
765
+ let invalid_uri = new_pipeline ( )
766
+ . with_collector_endpoint ( "127.0.0.1:14268/api/traces" )
767
+ . init_uploader ( ) ;
768
+ assert ! ( invalid_uri. is_err( ) ) ;
769
+ assert_eq ! (
770
+ format!( "{:?}" , invalid_uri. err( ) . unwrap( ) ) ,
771
+ "ExportFailed(InvalidUri(InvalidUri(InvalidFormat)))"
772
+ ) ;
773
+
774
+ let valid_uri = new_pipeline ( )
775
+ . with_collector_endpoint ( "http://127.0.0.1:14268/api/traces" )
776
+ . init_uploader ( ) ;
777
+
778
+ assert ! ( valid_uri. is_ok( ) ) ;
779
+ }
740
780
}
741
781
742
782
#[ cfg( test) ]
0 commit comments