Skip to content

Commit fd550c0

Browse files
committed
Cleanup conversion code
Signed-off-by: Caleb Schoepp <caleb.schoepp@fermyon.com>
1 parent 75b03fa commit fd550c0

File tree

1 file changed

+100
-98
lines changed

1 file changed

+100
-98
lines changed

crates/world/src/conversions.rs

Lines changed: 100 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)