@@ -53,64 +53,71 @@ impl AmqpConnectionApis for Fe2o3AmqpConnection {
5353 options : Option < AmqpConnectionOptions > ,
5454 ) -> Result < ( ) > {
5555 {
56+ let options = options. unwrap_or_default ( ) ;
57+ let mut endpoint = url. clone ( ) ;
58+
5659 // All AMQP clients have a similar set of options.
5760 let mut builder = fe2o3_amqp:: Connection :: builder ( )
5861 . sasl_profile ( fe2o3_amqp:: sasl_profile:: SaslProfile :: Anonymous )
5962 . alt_tls_establishment ( true )
6063 . container_id ( id)
6164 . max_frame_size ( 65536 ) ;
6265
63- if let Some ( options) = options {
64- if let Some ( frame_size) = options. max_frame_size {
65- builder = builder. max_frame_size ( frame_size) ;
66- }
66+ if let Some ( frame_size) = options. max_frame_size {
67+ builder = builder. max_frame_size ( frame_size) ;
68+ }
6769
68- if let Some ( channel_max) = options. channel_max {
69- builder = builder. channel_max ( channel_max) ;
70- }
71- if let Some ( idle_timeout) = options. idle_timeout {
72- builder = builder. idle_time_out ( idle_timeout. whole_milliseconds ( ) as u32 ) ;
73- }
74- if let Some ( outgoing_locales) = options. outgoing_locales . as_ref ( ) {
75- for locale in outgoing_locales {
76- builder = builder. add_outgoing_locales ( locale. as_str ( ) ) ;
77- }
78- }
79- if let Some ( incoming_locales) = options. incoming_locales {
80- for locale in incoming_locales {
81- builder = builder. add_incoming_locales ( locale. as_str ( ) ) ;
82- }
70+ if let Some ( channel_max) = options. channel_max {
71+ builder = builder. channel_max ( channel_max) ;
72+ }
73+ if let Some ( idle_timeout) = options. idle_timeout {
74+ builder = builder. idle_time_out ( idle_timeout. whole_milliseconds ( ) as u32 ) ;
75+ }
76+ if let Some ( outgoing_locales) = options. outgoing_locales . as_ref ( ) {
77+ for locale in outgoing_locales {
78+ builder = builder. add_outgoing_locales ( locale. as_str ( ) ) ;
8379 }
84- if let Some ( offered_capabilities) = options. offered_capabilities . as_ref ( ) {
85- for capability in offered_capabilities {
86- let capability: fe2o3_amqp_types:: primitives:: Symbol =
87- capability. clone ( ) . into ( ) ;
88- builder = builder. add_offered_capabilities ( capability) ;
89- }
80+ }
81+ if let Some ( incoming_locales) = options. incoming_locales {
82+ for locale in incoming_locales {
83+ builder = builder. add_incoming_locales ( locale. as_str ( ) ) ;
9084 }
91- if let Some ( desired_capabilities ) = options . desired_capabilities . as_ref ( ) {
92- for capability in desired_capabilities {
93- let capability: fe2o3_amqp_types :: primitives :: Symbol =
94- capability . clone ( ) . into ( ) ;
95- builder = builder . add_desired_capabilities ( capability ) ;
96- }
85+ }
86+ if let Some ( offered_capabilities ) = options . offered_capabilities . as_ref ( ) {
87+ for capability in offered_capabilities {
88+ let capability : fe2o3_amqp_types :: primitives :: Symbol =
89+ capability . clone ( ) . into ( ) ;
90+ builder = builder . add_offered_capabilities ( capability ) ;
9791 }
98- if let Some ( properties) = options. properties . as_ref ( ) {
99- let mut fields = fe2o3_amqp:: types:: definitions:: Fields :: new ( ) ;
100- for property in properties. iter ( ) {
101- let k = fe2o3_amqp_types:: primitives:: Symbol :: from ( property. 0 ) ;
102- let v = fe2o3_amqp_types:: primitives:: Value :: from ( property. 1 ) ;
103-
104- fields. insert ( k, v) ;
105- }
106- builder = builder. properties ( fields) ;
92+ }
93+ if let Some ( desired_capabilities) = options. desired_capabilities . as_ref ( ) {
94+ for capability in desired_capabilities {
95+ let capability: fe2o3_amqp_types:: primitives:: Symbol =
96+ capability. clone ( ) . into ( ) ;
97+ builder = builder. add_desired_capabilities ( capability) ;
10798 }
108- if let Some ( buffer_size) = options. buffer_size {
109- builder = builder. buffer_size ( buffer_size) ;
99+ }
100+ if let Some ( properties) = options. properties . as_ref ( ) {
101+ let mut fields = fe2o3_amqp:: types:: definitions:: Fields :: new ( ) ;
102+ for property in properties. iter ( ) {
103+ let k = fe2o3_amqp_types:: primitives:: Symbol :: from ( property. 0 ) ;
104+ let v = fe2o3_amqp_types:: primitives:: Value :: from ( property. 1 ) ;
105+
106+ fields. insert ( k, v) ;
110107 }
108+ builder = builder. properties ( fields) ;
111109 }
110+ if let Some ( buffer_size) = options. buffer_size {
111+ builder = builder. buffer_size ( buffer_size) ;
112+ }
113+
114+ if let Some ( custom_endpoint) = options. custom_endpoint {
115+ endpoint = custom_endpoint;
116+ builder = builder. hostname ( url. host_str ( ) ) ;
117+ }
118+
112119 self . connection
113- . set ( Mutex :: new ( builder. open ( url ) . await . map_err ( |e| {
120+ . set ( Mutex :: new ( builder. open ( endpoint ) . await . map_err ( |e| {
114121 azure_core:: Error :: from ( Fe2o3ConnectionOpenError ( e) )
115122 } ) ?) )
116123 . map_err ( |_| Self :: connection_already_set ( ) ) ?;
@@ -142,7 +149,7 @@ impl AmqpConnectionApis for Fe2o3AmqpConnection {
142149 let mut connection = self
143150 . connection
144151 . get ( )
145- . ok_or ( Self :: connection_not_set ( ) ) ?
152+ . ok_or_else ( Self :: connection_not_set) ?
146153 . lock ( )
147154 . await ;
148155 let res = connection
0 commit comments