@@ -5,12 +5,11 @@ use std::sync::Arc;
55use std:: time:: Duration ;
66
77use http:: Uri ;
8- #[ cfg( feature = "hyper-rustls" ) ]
9- use hyper_rustls:: HttpsConnectorBuilder ;
108use launchdarkly_server_sdk_evaluation:: Reference ;
119use thiserror:: Error ;
1210
13- use crate :: events:: sender:: HyperEventSender ;
11+ use crate :: events:: sender:: HttpEventSender ;
12+ use crate :: transport:: HttpTransport ;
1413use crate :: { service_endpoints, LAUNCHDARKLY_TAGS_HEADER } ;
1514
1615use super :: processor:: {
@@ -61,41 +60,29 @@ pub trait EventProcessorFactory {
6160///
6261/// Adjust the flush interval
6362/// ```
64- /// # use launchdarkly_server_sdk::{EventProcessorBuilder, ConfigBuilder};
65- /// # use hyper_rustls::HttpsConnector;
66- /// # use hyper_util::client::legacy::connect::HttpConnector;
63+ /// # use launchdarkly_server_sdk::{EventProcessorBuilder, ConfigBuilder, HyperTransport};
6764/// # use std::time::Duration;
6865/// # fn main() {
69- /// ConfigBuilder::new("sdk-key").event_processor(EventProcessorBuilder::<HttpsConnector<HttpConnector> >::new()
66+ /// ConfigBuilder::new("sdk-key").event_processor(EventProcessorBuilder::<HyperTransport >::new()
7067/// .flush_interval(Duration::from_secs(10)));
7168/// # }
7269/// ```
7370#[ derive( Clone ) ]
74- pub struct EventProcessorBuilder < C > {
71+ pub struct EventProcessorBuilder < T : HttpTransport = crate :: HyperTransport > {
7572 capacity : usize ,
7673 flush_interval : Duration ,
7774 context_keys_capacity : NonZeroUsize ,
7875 context_keys_flush_interval : Duration ,
7976 event_sender : Option < Arc < dyn EventSender > > ,
8077 all_attributes_private : bool ,
8178 private_attributes : HashSet < Reference > ,
82- connector : Option < C > ,
79+ transport : Option < T > ,
8380 omit_anonymous_contexts : bool ,
8481 compress_events : bool ,
8582 // diagnostic_recording_interval: Duration
8683}
8784
88- impl < C > EventProcessorFactory for EventProcessorBuilder < C >
89- where
90- C : tower:: Service < Uri > + Clone + Send + Sync + ' static ,
91- C :: Response : hyper_util:: client:: legacy:: connect:: Connection
92- + hyper:: rt:: Read
93- + hyper:: rt:: Write
94- + Send
95- + Unpin ,
96- C :: Future : Send + Unpin + ' static ,
97- C :: Error : Into < Box < dyn std:: error:: Error + Send + Sync > > ,
98- {
85+ impl < T : HttpTransport > EventProcessorFactory for EventProcessorBuilder < T > {
9986 fn build (
10087 & self ,
10188 endpoints : & service_endpoints:: ServiceEndpoints ,
@@ -114,26 +101,20 @@ where
114101 // NOTE: This would only be possible under unit testing conditions.
115102 if let Some ( event_sender) = & self . event_sender {
116103 Ok ( event_sender. clone ( ) )
117- } else if let Some ( connector ) = & self . connector {
118- Ok ( Arc :: new ( HyperEventSender :: new (
119- connector . clone ( ) ,
120- hyper :: Uri :: from_str ( url_string. as_str ( ) ) . unwrap ( ) ,
104+ } else if let Some ( transport ) = & self . transport {
105+ Ok ( Arc :: new ( HttpEventSender :: new (
106+ transport . clone ( ) ,
107+ Uri :: from_str ( url_string. as_str ( ) ) . unwrap ( ) ,
121108 sdk_key,
122109 default_headers,
123110 self . compress_events ,
124111 ) ) )
125112 } else {
126113 #[ cfg( feature = "hyper-rustls" ) ]
127114 {
128- let connector = HttpsConnectorBuilder :: new ( )
129- . with_webpki_roots ( )
130- . https_or_http ( )
131- . enable_http1 ( )
132- . enable_http2 ( )
133- . build ( ) ;
134-
135- Ok ( Arc :: new ( HyperEventSender :: new (
136- connector,
115+ let transport = crate :: HyperTransport :: new_https ( ) ;
116+ Ok ( Arc :: new ( HttpEventSender :: new (
117+ transport,
137118 Uri :: from_str ( url_string. as_str ( ) ) . unwrap ( ) ,
138119 sdk_key,
139120 default_headers,
@@ -142,7 +123,7 @@ where
142123 }
143124 #[ cfg( not( feature = "hyper-rustls" ) ) ]
144125 Err ( BuildError :: InvalidConfig (
145- "https connector is required when rustls is disabled" . into ( ) ,
126+ "transport is required when hyper- rustls feature is disabled" . into ( ) ,
146127 ) )
147128 } ;
148129 let event_sender = event_sender_result?;
@@ -169,7 +150,7 @@ where
169150 }
170151}
171152
172- impl < C > EventProcessorBuilder < C > {
153+ impl < T : HttpTransport > EventProcessorBuilder < T > {
173154 /// Create a new [EventProcessorBuilder] with all default values.
174155 pub fn new ( ) -> Self {
175156 Self {
@@ -182,7 +163,7 @@ impl<C> EventProcessorBuilder<C> {
182163 all_attributes_private : false ,
183164 private_attributes : HashSet :: new ( ) ,
184165 omit_anonymous_contexts : false ,
185- connector : None ,
166+ transport : None ,
186167 compress_events : false ,
187168 }
188169 }
@@ -246,12 +227,12 @@ impl<C> EventProcessorBuilder<C> {
246227 self
247228 }
248229
249- /// Sets the connector for the event sender to use. This allows for re-use of a connector
230+ /// Sets the transport for the event sender to use. This allows for re-use of a transport
250231 /// between multiple client instances. This is especially useful for the `sdk-test-harness`
251232 /// where many client instances are created throughout the test and reading the native
252233 /// certificates is a substantial portion of the runtime.
253- pub fn https_connector ( & mut self , connector : C ) -> & mut Self {
254- self . connector = Some ( connector ) ;
234+ pub fn transport ( & mut self , transport : T ) -> & mut Self {
235+ self . transport = Some ( transport ) ;
255236 self
256237 }
257238
@@ -284,7 +265,7 @@ impl<C> EventProcessorBuilder<C> {
284265 }
285266}
286267
287- impl < C > Default for EventProcessorBuilder < C > {
268+ impl < T : HttpTransport > Default for EventProcessorBuilder < T > {
288269 fn default ( ) -> Self {
289270 Self :: new ( )
290271 }
@@ -325,7 +306,6 @@ impl Default for NullEventProcessorBuilder {
325306
326307#[ cfg( test) ]
327308mod tests {
328- use hyper_util:: client:: legacy:: connect:: HttpConnector ;
329309 use launchdarkly_server_sdk_evaluation:: ContextBuilder ;
330310 use maplit:: hashset;
331311 use mockito:: Matcher ;
@@ -337,36 +317,36 @@ mod tests {
337317
338318 #[ test]
339319 fn default_builder_has_correct_defaults ( ) {
340- let builder = EventProcessorBuilder :: < HttpConnector > :: new ( ) ;
320+ let builder = EventProcessorBuilder :: < crate :: HyperTransport > :: new ( ) ;
341321 assert_eq ! ( builder. capacity, DEFAULT_EVENT_CAPACITY ) ;
342322 assert_eq ! ( builder. flush_interval, DEFAULT_FLUSH_POLL_INTERVAL ) ;
343323 }
344324
345325 #[ test]
346326 fn capacity_can_be_adjusted ( ) {
347- let mut builder = EventProcessorBuilder :: < HttpConnector > :: new ( ) ;
327+ let mut builder = EventProcessorBuilder :: < crate :: HyperTransport > :: new ( ) ;
348328 builder. capacity ( 1234 ) ;
349329 assert_eq ! ( builder. capacity, 1234 ) ;
350330 }
351331
352332 #[ test]
353333 fn flush_interval_can_be_adjusted ( ) {
354- let mut builder = EventProcessorBuilder :: < HttpConnector > :: new ( ) ;
334+ let mut builder = EventProcessorBuilder :: < crate :: HyperTransport > :: new ( ) ;
355335 builder. flush_interval ( Duration :: from_secs ( 1234 ) ) ;
356336 assert_eq ! ( builder. flush_interval, Duration :: from_secs( 1234 ) ) ;
357337 }
358338
359339 #[ test]
360340 fn context_keys_capacity_can_be_adjusted ( ) {
361- let mut builder = EventProcessorBuilder :: < HttpConnector > :: new ( ) ;
341+ let mut builder = EventProcessorBuilder :: < crate :: HyperTransport > :: new ( ) ;
362342 let cap = NonZeroUsize :: new ( 1234 ) . expect ( "1234 > 0" ) ;
363343 builder. context_keys_capacity ( cap) ;
364344 assert_eq ! ( builder. context_keys_capacity, cap) ;
365345 }
366346
367347 #[ test]
368348 fn context_keys_flush_interval_can_be_adjusted ( ) {
369- let mut builder = EventProcessorBuilder :: < HttpConnector > :: new ( ) ;
349+ let mut builder = EventProcessorBuilder :: < crate :: HyperTransport > :: new ( ) ;
370350 builder. context_keys_flush_interval ( Duration :: from_secs ( 1000 ) ) ;
371351 assert_eq ! (
372352 builder. context_keys_flush_interval,
@@ -376,7 +356,7 @@ mod tests {
376356
377357 #[ test]
378358 fn all_attribute_private_can_be_adjusted ( ) {
379- let mut builder = EventProcessorBuilder :: < HttpConnector > :: new ( ) ;
359+ let mut builder = EventProcessorBuilder :: < crate :: HyperTransport > :: new ( ) ;
380360
381361 assert ! ( !builder. all_attributes_private) ;
382362 builder. all_attributes_private ( true ) ;
@@ -385,7 +365,7 @@ mod tests {
385365
386366 #[ test]
387367 fn attribte_names_can_be_adjusted ( ) {
388- let mut builder = EventProcessorBuilder :: < HttpConnector > :: new ( ) ;
368+ let mut builder = EventProcessorBuilder :: < crate :: HyperTransport > :: new ( ) ;
389369
390370 assert ! ( builder. private_attributes. is_empty( ) ) ;
391371 builder. private_attributes ( hashset ! [ "name" ] ) ;
@@ -410,7 +390,7 @@ mod tests {
410390 . build ( )
411391 . expect ( "Service endpoints failed to be created" ) ;
412392
413- let builder = EventProcessorBuilder :: < HttpConnector > :: new ( ) ;
393+ let builder = EventProcessorBuilder :: < crate :: HyperTransport > :: new ( ) ;
414394 let processor = builder
415395 . build ( & service_endpoints, "sdk-key" , tag)
416396 . expect ( "Processor failed to build" ) ;
0 commit comments