@@ -7,6 +7,7 @@ use crossbeam_channel::Receiver;
77use log:: info;
88use serde_json:: Value ;
99
10+ use crate :: errors:: Result ;
1011use crate :: fields:: FieldHolder ;
1112use crate :: response:: Response ;
1213use crate :: Event ;
@@ -109,9 +110,9 @@ impl Client {
109110
110111 /// close waits for all in-flight messages to be sent. You should call close() before
111112 /// app termination.
112- pub fn close ( mut self ) {
113+ pub fn close ( mut self ) -> Result < ( ) > {
113114 info ! ( "closing libhoney client" ) ;
114- self . transmission . stop ( ) ;
115+ self . transmission . stop ( )
115116 }
116117
117118 /// flush closes and reopens the Transmission, ensuring events are sent without
@@ -120,10 +121,11 @@ impl Client {
120121 /// Flush if asynchronous sends are not guaranteed to run (i.e. running in AWS Lambda)
121122 /// Flush is not thread safe - use it only when you are sure that no other parts of
122123 /// your program are calling Send
123- pub fn flush ( & mut self ) {
124+ pub fn flush ( & mut self ) -> Result < ( ) > {
124125 info ! ( "flushing libhoney client" ) ;
125- self . transmission . stop ( ) ;
126+ self . transmission . stop ( ) ? ;
126127 self . transmission . start ( ) ;
128+ Ok ( ( ) )
127129 }
128130
129131 /// new_builder creates a new event builder. The builder inherits any Dynamic or
@@ -146,16 +148,16 @@ impl Client {
146148
147149#[ cfg( test) ]
148150mod tests {
149- use super :: * ;
151+ use super :: { Client , FieldHolder , Options , Transmission , Value } ;
150152 use crate :: transmission;
151153
152154 #[ test]
153155 fn test_init ( ) {
154156 let client = Client :: new (
155157 Options :: default ( ) ,
156- Transmission :: new ( transmission:: Options :: default ( ) ) ,
158+ Transmission :: new ( transmission:: Options :: default ( ) ) . unwrap ( ) ,
157159 ) ;
158- client. close ( ) ;
160+ client. close ( ) . unwrap ( ) ;
159161 }
160162
161163 #[ test]
@@ -179,36 +181,37 @@ mod tests {
179181 api_host : api_host. to_string ( ) ,
180182 ..Options :: default ( )
181183 } ,
182- Transmission :: new ( transmission:: Options :: default ( ) ) ,
184+ Transmission :: new ( transmission:: Options :: default ( ) ) . unwrap ( ) ,
183185 ) ;
184186
185187 let mut event = client. new_event ( ) ;
186188 event. add_field ( "some_field" , Value :: String ( "some_value" . to_string ( ) ) ) ;
187189 event. metadata = Some ( json ! ( "some metadata in a string" ) ) ;
188- event. send ( & mut client) ;
190+ event. send ( & mut client) . unwrap ( ) ;
189191
190192 let response = client. responses ( ) . iter ( ) . next ( ) . unwrap ( ) ;
191193 assert_eq ! ( response. status_code, Some ( StatusCode :: ACCEPTED ) ) ;
192194 assert_eq ! ( response. metadata, Some ( json!( "some metadata in a string" ) ) ) ;
193195
194- client. flush ( ) ;
196+ client. flush ( ) . unwrap ( ) ;
195197
196198 event = client. new_event ( ) ;
197199 event. add_field ( "some_field" , Value :: String ( "some_value" . to_string ( ) ) ) ;
198200 event. metadata = Some ( json ! ( "some metadata in a string" ) ) ;
199- event. send ( & mut client) ;
201+ event. send ( & mut client) . unwrap ( ) ;
200202
201203 let response = client. responses ( ) . iter ( ) . next ( ) . unwrap ( ) ;
202204 assert_eq ! ( response. status_code, Some ( StatusCode :: ACCEPTED ) ) ;
203205 assert_eq ! ( response. metadata, Some ( json!( "some metadata in a string" ) ) ) ;
204206
205- client. close ( ) ;
207+ client. close ( ) . unwrap ( ) ;
206208 }
207209
208210 #[ test]
209211 fn test_send_without_api_key ( ) {
210212 use serde_json:: json;
211- use std:: time:: Duration ;
213+
214+ use crate :: errors:: ErrorKind ;
212215
213216 let api_host = & mockito:: server_url ( ) ;
214217 let _m = mockito:: mock (
@@ -225,17 +228,19 @@ mod tests {
225228 api_host : api_host. to_string ( ) ,
226229 ..Options :: default ( )
227230 } ,
228- Transmission :: new ( transmission:: Options :: default ( ) ) ,
231+ Transmission :: new ( transmission:: Options :: default ( ) ) . unwrap ( ) ,
229232 ) ;
230233
231234 let mut event = client. new_event ( ) ;
232235 event. add_field ( "some_field" , Value :: String ( "some_value" . to_string ( ) ) ) ;
233236 event. metadata = Some ( json ! ( "some metadata in a string" ) ) ;
234- event. send ( & mut client) ;
235- client
236- . responses ( )
237- . recv_timeout ( Duration :: from_millis ( 100 ) )
238- . err ( ) ;
239- client. close ( ) ;
237+ let err = event. send ( & mut client) . err ( ) . unwrap ( ) ;
238+
239+ assert_eq ! ( err. kind, ErrorKind :: MissingOption ) ;
240+ assert_eq ! (
241+ err. message,
242+ "missing option 'api_key', can't send to Honeycomb"
243+ ) ;
244+ client. close ( ) . unwrap ( ) ;
240245 }
241246}
0 commit comments