@@ -284,12 +284,6 @@ pub struct FinishedSpan {
284284}
285285
286286impl FinishedSpan {
287- fn span_data_ref ( & self ) -> & crate :: trace:: SpanData {
288- self . span
289- . as_ref ( )
290- . expect ( "Span data has already been consumed" )
291- }
292-
293287 /// Creates a new `FinishedSpan` with the given span data.
294288 pub fn new ( span_data : crate :: trace:: SpanData ) -> Self {
295289 FinishedSpan {
@@ -336,57 +330,87 @@ impl FinishedSpan {
336330
337331impl ReadableSpan for FinishedSpan {
338332 fn context ( & self ) -> & SpanContext {
339- & self . span_data_ref ( ) . span_context
333+ match self . span {
334+ Some ( ref data) => & data. span_context ,
335+ None => & SpanContext :: NONE ,
336+ }
340337 }
341338
342339 fn parent_span_id ( & self ) -> SpanId {
343- self . span_data_ref ( ) . parent_span_id
340+ match self . span {
341+ Some ( ref data) => data. parent_span_id ,
342+ None => SpanId :: INVALID ,
343+ }
344344 }
345345
346346 fn span_kind ( & self ) -> SpanKind {
347- self . span_data_ref ( ) . span_kind . clone ( )
347+ match self . span {
348+ Some ( ref data) => data. span_kind . clone ( ) ,
349+ None => SpanKind :: Internal ,
350+ }
348351 }
349352
350353 fn name ( & self ) -> Option < & str > {
351- Some ( & self . span_data_ref ( ) . name )
354+ self . span . as_ref ( ) . map ( |s| s . name . as_ref ( ) )
352355 }
353356 fn start_time ( & self ) -> Option < SystemTime > {
354- Some ( self . span_data_ref ( ) . start_time )
357+ self . span . as_ref ( ) . map ( |s| s . start_time )
355358 }
356359 fn end_time ( & self ) -> Option < SystemTime > {
357- Some ( self . span_data_ref ( ) . end_time )
360+ self . span . as_ref ( ) . map ( |s| s . end_time )
358361 }
359362 fn attributes ( & self ) -> & [ KeyValue ] {
360- self . span_data_ref ( ) . attributes . as_slice ( )
363+ match self . span {
364+ Some ( ref data) => data. attributes . as_slice ( ) ,
365+ None => & [ ] ,
366+ }
361367 }
362368 fn dropped_attributes_count ( & self ) -> u32 {
363- self . span_data_ref ( ) . dropped_attributes_count
369+ match self . span {
370+ Some ( ref data) => data. dropped_attributes_count ,
371+ None => 0 ,
372+ }
364373 }
365374 fn events ( & self ) -> & [ Event ] {
366- self . span_data_ref ( ) . events . events . as_slice ( )
375+ match self . span {
376+ Some ( ref data) => data. events . events . as_slice ( ) ,
377+ None => & [ ] ,
378+ }
367379 }
368380 fn dropped_events_count ( & self ) -> u32 {
369- self . span_data_ref ( ) . events . dropped_count
381+ match self . span {
382+ Some ( ref data) => data. events . dropped_count ,
383+ None => 0 ,
384+ }
370385 }
371386 fn links ( & self ) -> & [ Link ] {
372- self . span_data_ref ( ) . links . links . as_slice ( )
387+ match self . span {
388+ Some ( ref data) => data. links . links . as_slice ( ) ,
389+ None => & [ ] ,
390+ }
373391 }
392+
374393 fn dropped_links_count ( & self ) -> u32 {
375- self . span_data_ref ( ) . links . dropped_count
394+ match self . span {
395+ Some ( ref data) => data. links . dropped_count ,
396+ None => 0 ,
397+ }
376398 }
377399 fn status ( & self ) -> & Status {
378- & self . span_data_ref ( ) . status
400+ match self . span {
401+ Some ( ref data) => & data. status ,
402+ None => & Status :: Unset ,
403+ }
379404 }
380405}
381406
382407impl std:: fmt:: Debug for FinishedSpan {
383408 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
384409 let mut fmt = f. debug_struct ( "FinishedSpan" ) ;
385- if self . is_consumed {
386- fmt. field ( "consumed" , & self . is_consumed ) ;
387- } else {
388- fmt. field ( "span" , & self . span_data_ref ( ) ) ;
389- }
410+ match & self . span {
411+ Some ( s) if !self . is_consumed => fmt. field ( "span" , s) ,
412+ _ => fmt. field ( "consumed" , & self . is_consumed ) ,
413+ } ;
390414 fmt. finish ( )
391415 }
392416}
0 commit comments