@@ -505,6 +505,10 @@ mod otel {
505
505
506
506
impl From < wasi_otel:: SpanData > for opentelemetry_sdk:: export:: trace:: SpanData {
507
507
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 ( ) ;
508
512
Self {
509
513
span_context : value. span_context . into ( ) ,
510
514
parent_span_id : opentelemetry:: trace:: SpanId :: from_hex ( & value. parent_span_id )
@@ -515,56 +519,14 @@ mod otel {
515
519
end_time : value. end_time . into ( ) ,
516
520
attributes : value. attributes . into_iter ( ) . map ( Into :: into) . collect ( ) ,
517
521
dropped_attributes_count : 0 ,
518
- events : SpanEvents :: default ( ) , // TODO
519
- links : SpanLinks :: default ( ) , // TODO
522
+ events : span_events ,
523
+ links : span_links ,
520
524
status : value. status . into ( ) ,
521
525
instrumentation_scope : value. instrumentation_scope . into ( ) ,
522
526
}
523
527
}
524
528
}
525
529
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
-
568
530
impl From < wasi_otel:: SpanContext > for opentelemetry:: trace:: SpanContext {
569
531
fn from ( sc : wasi_otel:: SpanContext ) -> Self {
570
532
// TODO(Reviewer): Should this be try_from instead an propagate this error out of the WIT?
@@ -608,14 +570,18 @@ mod otel {
608
570
}
609
571
}
610
572
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 ( )
619
585
}
620
586
}
621
587
}
@@ -632,6 +598,43 @@ mod otel {
632
598
}
633
599
}
634
600
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
+
635
638
impl From < wasi_otel:: Link > for opentelemetry:: trace:: Link {
636
639
fn from ( link : wasi_otel:: Link ) -> Self {
637
640
Self :: new (
@@ -642,11 +645,15 @@ mod otel {
642
645
}
643
646
}
644
647
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
+ }
650
657
}
651
658
}
652
659
@@ -666,45 +673,40 @@ mod otel {
666
673
}
667
674
}
668
675
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
+ }
710
712
}
0 commit comments