@@ -505,6 +505,10 @@ mod otel {
505505
506506 impl From < wasi_otel:: SpanData > for opentelemetry_sdk:: export:: trace:: SpanData {
507507 fn from ( value : wasi_otel:: SpanData ) -> Self {
508+ let mut span_events = SpanEvents :: default ( ) ;
509+ span_events. events = value. events . into_iter ( ) . map ( Into :: into) . collect ( ) ;
510+ let mut span_links = SpanLinks :: default ( ) ;
511+ span_links. links = value. links . into_iter ( ) . map ( Into :: into) . collect ( ) ;
508512 Self {
509513 span_context : value. span_context . into ( ) ,
510514 parent_span_id : opentelemetry:: trace:: SpanId :: from_hex ( & value. parent_span_id )
@@ -515,56 +519,14 @@ mod otel {
515519 end_time : value. end_time . into ( ) ,
516520 attributes : value. attributes . into_iter ( ) . map ( Into :: into) . collect ( ) ,
517521 dropped_attributes_count : 0 ,
518- events : SpanEvents :: default ( ) , // TODO
519- links : SpanLinks :: default ( ) , // TODO
522+ events : span_events ,
523+ links : span_links ,
520524 status : value. status . into ( ) ,
521525 instrumentation_scope : value. instrumentation_scope . into ( ) ,
522526 }
523527 }
524528 }
525529
526- impl From < wasi_otel:: Value > for opentelemetry:: Value {
527- fn from ( value : wasi_otel:: Value ) -> Self {
528- match value {
529- wasi_otel:: Value :: String ( v) => v. into ( ) ,
530- wasi_otel:: Value :: Bool ( v) => v. into ( ) ,
531- wasi_otel:: Value :: Float64 ( v) => v. into ( ) ,
532- wasi_otel:: Value :: S64 ( v) => v. into ( ) ,
533- wasi_otel:: Value :: StringArray ( v) => opentelemetry:: Value :: Array (
534- v. into_iter ( )
535- . map ( StringValue :: from)
536- . collect :: < Vec < _ > > ( )
537- . into ( ) ,
538- ) ,
539- wasi_otel:: Value :: BoolArray ( v) => opentelemetry:: Value :: Array ( v. into ( ) ) ,
540- wasi_otel:: Value :: Float64Array ( v) => opentelemetry:: Value :: Array ( v. into ( ) ) ,
541- wasi_otel:: Value :: S64Array ( v) => opentelemetry:: Value :: Array ( v. into ( ) ) ,
542- }
543- }
544- }
545-
546- impl From < wasi_otel:: KeyValue > for opentelemetry:: KeyValue {
547- fn from ( kv : wasi_otel:: KeyValue ) -> Self {
548- opentelemetry:: KeyValue :: new ( kv. key , kv. value )
549- }
550- }
551-
552- impl From < wasi_otel:: TraceFlags > for opentelemetry:: trace:: TraceFlags {
553- fn from ( flags : wasi_otel:: TraceFlags ) -> Self {
554- Self :: new ( flags. as_array ( ) [ 0 ] as u8 )
555- }
556- }
557-
558- impl From < opentelemetry:: trace:: TraceFlags > for wasi_otel:: TraceFlags {
559- fn from ( flags : opentelemetry:: trace:: TraceFlags ) -> Self {
560- if flags. is_sampled ( ) {
561- wasi_otel:: TraceFlags :: SAMPLED
562- } else {
563- wasi_otel:: TraceFlags :: empty ( )
564- }
565- }
566- }
567-
568530 impl From < wasi_otel:: SpanContext > for opentelemetry:: trace:: SpanContext {
569531 fn from ( sc : wasi_otel:: SpanContext ) -> Self {
570532 // TODO(Reviewer): Should this be try_from instead an propagate this error out of the WIT?
@@ -608,14 +570,18 @@ mod otel {
608570 }
609571 }
610572
611- impl From < wasi_otel:: Status > for opentelemetry:: trace:: Status {
612- fn from ( status : wasi_otel:: Status ) -> Self {
613- match status {
614- wasi_otel:: Status :: Unset => Self :: Unset ,
615- wasi_otel:: Status :: Ok => Self :: Ok ,
616- wasi_otel:: Status :: Error ( s) => Self :: Error {
617- description : s. into ( ) ,
618- } ,
573+ impl From < wasi_otel:: TraceFlags > for opentelemetry:: trace:: TraceFlags {
574+ fn from ( flags : wasi_otel:: TraceFlags ) -> Self {
575+ Self :: new ( flags. as_array ( ) [ 0 ] as u8 )
576+ }
577+ }
578+
579+ impl From < opentelemetry:: trace:: TraceFlags > for wasi_otel:: TraceFlags {
580+ fn from ( flags : opentelemetry:: trace:: TraceFlags ) -> Self {
581+ if flags. is_sampled ( ) {
582+ wasi_otel:: TraceFlags :: SAMPLED
583+ } else {
584+ wasi_otel:: TraceFlags :: empty ( )
619585 }
620586 }
621587 }
@@ -632,6 +598,43 @@ mod otel {
632598 }
633599 }
634600
601+ impl From < wasi_otel:: KeyValue > for opentelemetry:: KeyValue {
602+ fn from ( kv : wasi_otel:: KeyValue ) -> Self {
603+ opentelemetry:: KeyValue :: new ( kv. key , kv. value )
604+ }
605+ }
606+
607+ impl From < wasi_otel:: Value > for opentelemetry:: Value {
608+ fn from ( value : wasi_otel:: Value ) -> Self {
609+ match value {
610+ wasi_otel:: Value :: String ( v) => v. into ( ) ,
611+ wasi_otel:: Value :: Bool ( v) => v. into ( ) ,
612+ wasi_otel:: Value :: Float64 ( v) => v. into ( ) ,
613+ wasi_otel:: Value :: S64 ( v) => v. into ( ) ,
614+ wasi_otel:: Value :: StringArray ( v) => opentelemetry:: Value :: Array (
615+ v. into_iter ( )
616+ . map ( StringValue :: from)
617+ . collect :: < Vec < _ > > ( )
618+ . into ( ) ,
619+ ) ,
620+ wasi_otel:: Value :: BoolArray ( v) => opentelemetry:: Value :: Array ( v. into ( ) ) ,
621+ wasi_otel:: Value :: Float64Array ( v) => opentelemetry:: Value :: Array ( v. into ( ) ) ,
622+ wasi_otel:: Value :: S64Array ( v) => opentelemetry:: Value :: Array ( v. into ( ) ) ,
623+ }
624+ }
625+ }
626+
627+ impl From < wasi_otel:: Event > for opentelemetry:: trace:: Event {
628+ fn from ( event : wasi_otel:: Event ) -> Self {
629+ Self :: new (
630+ event. name ,
631+ event. time . into ( ) ,
632+ event. attributes . into_iter ( ) . map ( Into :: into) . collect ( ) ,
633+ 0 ,
634+ )
635+ }
636+ }
637+
635638 impl From < wasi_otel:: Link > for opentelemetry:: trace:: Link {
636639 fn from ( link : wasi_otel:: Link ) -> Self {
637640 Self :: new (
@@ -642,11 +645,15 @@ mod otel {
642645 }
643646 }
644647
645- impl From < wall_clock:: Datetime > for SystemTime {
646- fn from ( timestamp : wall_clock:: Datetime ) -> Self {
647- UNIX_EPOCH
648- + Duration :: from_secs ( timestamp. seconds )
649- + Duration :: from_nanos ( timestamp. nanoseconds as u64 )
648+ impl From < wasi_otel:: Status > for opentelemetry:: trace:: Status {
649+ fn from ( status : wasi_otel:: Status ) -> Self {
650+ match status {
651+ wasi_otel:: Status :: Unset => Self :: Unset ,
652+ wasi_otel:: Status :: Ok => Self :: Ok ,
653+ wasi_otel:: Status :: Error ( s) => Self :: Error {
654+ description : s. into ( ) ,
655+ } ,
656+ }
650657 }
651658 }
652659
@@ -666,45 +673,40 @@ mod otel {
666673 }
667674 }
668675
669- // #[allow(clippy::derivable_impls)]
670- // impl Default for wasi_otel::StartOptions {
671- // fn default() -> Self {
672- // Self {
673- // new_root: false,
674- // span_kind: None,
675- // attributes: None,
676- // links: None,
677- // timestamp: None,
678- // }
679- // }
680- // }
681-
682- // mod test {
683- // #[test]
684- // fn trace_flags() {
685- // let flags = opentelemetry::trace::TraceFlags::SAMPLED;
686- // let flags2 = crate::wasi::otel::tracing::TraceFlags::from(flags);
687- // let flags3 = opentelemetry::trace::TraceFlags::from(flags2);
688- // assert_eq!(flags, flags3);
689- // }
690-
691- // #[test]
692- // fn span_context() {
693- // let sc = opentelemetry::trace::SpanContext::new(
694- // opentelemetry::trace::TraceId::from_hex("4fb34cb4484029f7881399b149e41e98")
695- // .unwrap(),
696- // opentelemetry::trace::SpanId::from_hex("9ffd58d3cd4dd90b").unwrap(),
697- // opentelemetry::trace::TraceFlags::SAMPLED,
698- // false,
699- // opentelemetry::trace::TraceState::from_key_value(vec![
700- // ("foo", "bar"),
701- // ("baz", "qux"),
702- // ])
703- // .unwrap(),
704- // );
705- // let sc2 = crate::wasi::otel::tracing::SpanContext::from(sc.clone());
706- // let sc3 = opentelemetry::trace::SpanContext::from(sc2);
707- // assert_eq!(sc, sc3);
708- // }
709- // }
676+ impl From < wall_clock:: Datetime > for SystemTime {
677+ fn from ( timestamp : wall_clock:: Datetime ) -> Self {
678+ UNIX_EPOCH
679+ + Duration :: from_secs ( timestamp. seconds )
680+ + Duration :: from_nanos ( timestamp. nanoseconds as u64 )
681+ }
682+ }
683+
684+ mod test {
685+ #[ test]
686+ fn trace_flags ( ) {
687+ let flags = opentelemetry:: trace:: TraceFlags :: SAMPLED ;
688+ let flags2 = crate :: wasi:: otel:: tracing:: TraceFlags :: from ( flags) ;
689+ let flags3 = opentelemetry:: trace:: TraceFlags :: from ( flags2) ;
690+ assert_eq ! ( flags, flags3) ;
691+ }
692+
693+ #[ test]
694+ fn span_context ( ) {
695+ let sc = opentelemetry:: trace:: SpanContext :: new (
696+ opentelemetry:: trace:: TraceId :: from_hex ( "4fb34cb4484029f7881399b149e41e98" )
697+ . unwrap ( ) ,
698+ opentelemetry:: trace:: SpanId :: from_hex ( "9ffd58d3cd4dd90b" ) . unwrap ( ) ,
699+ opentelemetry:: trace:: TraceFlags :: SAMPLED ,
700+ false ,
701+ opentelemetry:: trace:: TraceState :: from_key_value ( vec ! [
702+ ( "foo" , "bar" ) ,
703+ ( "baz" , "qux" ) ,
704+ ] )
705+ . unwrap ( ) ,
706+ ) ;
707+ let sc2 = crate :: wasi:: otel:: tracing:: SpanContext :: from ( sc. clone ( ) ) ;
708+ let sc3 = opentelemetry:: trace:: SpanContext :: from ( sc2) ;
709+ assert_eq ! ( sc, sc3) ;
710+ }
711+ }
710712}
0 commit comments