Skip to content

Commit ab254f0

Browse files
authored
Merge pull request #11 from asteurer/update-base
feat(wit): refactor wit a bit
2 parents 60df119 + f170d89 commit ab254f0

File tree

6 files changed

+91
-83
lines changed

6 files changed

+91
-83
lines changed

rust/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
mod tracing;
2+
mod types;
23

34
pub use tracing::*;
45

rust/src/tracing/conversion.rs

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::wit::wasi::otel::tracing::*;
2-
use std::time::UNIX_EPOCH;
32

43
impl From<opentelemetry_sdk::trace::SpanData> for SpanData {
54
fn from(value: opentelemetry_sdk::trace::SpanData) -> Self {
@@ -91,57 +90,6 @@ impl From<opentelemetry::trace::SpanKind> for SpanKind {
9190
}
9291
}
9392

94-
impl From<std::time::SystemTime> for Datetime {
95-
fn from(value: std::time::SystemTime) -> Self {
96-
let duration_since_epoch = value
97-
.duration_since(UNIX_EPOCH)
98-
.expect("SystemTime should be after UNIX EPOCH");
99-
Self {
100-
seconds: duration_since_epoch.as_secs(),
101-
nanoseconds: duration_since_epoch.subsec_nanos(),
102-
}
103-
}
104-
}
105-
106-
impl From<opentelemetry::KeyValue> for KeyValue {
107-
fn from(value: opentelemetry::KeyValue) -> Self {
108-
Self {
109-
key: value.key.to_string(),
110-
value: value.value.into(),
111-
}
112-
}
113-
}
114-
115-
impl From<&opentelemetry::KeyValue> for KeyValue {
116-
fn from(value: &opentelemetry::KeyValue) -> Self {
117-
Self {
118-
key: value.key.to_string(),
119-
value: value.value.clone().into(),
120-
}
121-
}
122-
}
123-
124-
impl From<opentelemetry::Value> for Value {
125-
fn from(value: opentelemetry::Value) -> Self {
126-
match value {
127-
opentelemetry::Value::Bool(v) => Self::Bool(v),
128-
opentelemetry::Value::I64(v) => Self::S64(v),
129-
opentelemetry::Value::F64(v) => Self::F64(v),
130-
opentelemetry::Value::String(v) => Self::String(v.to_string()),
131-
opentelemetry::Value::Array(v) => match v {
132-
opentelemetry::Array::Bool(items) => Self::BoolArray(items),
133-
opentelemetry::Array::I64(items) => Self::S64Array(items),
134-
opentelemetry::Array::F64(items) => Self::F64Array(items),
135-
opentelemetry::Array::String(items) => {
136-
Self::StringArray(items.into_iter().map(Into::into).collect())
137-
}
138-
_ => unimplemented!(),
139-
},
140-
_ => unimplemented!(),
141-
}
142-
}
143-
}
144-
14593
impl From<opentelemetry::trace::Event> for Event {
14694
fn from(value: opentelemetry::trace::Event) -> Self {
14795
Self {

rust/src/types.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
use crate::wit::wasi::{
2+
clocks0_2_0::wall_clock::Datetime,
3+
otel::types::{KeyValue, Value},
4+
};
5+
use std::time::UNIX_EPOCH;
6+
7+
impl From<opentelemetry::KeyValue> for KeyValue {
8+
fn from(value: opentelemetry::KeyValue) -> Self {
9+
Self {
10+
key: value.key.to_string(),
11+
value: value.value.into(),
12+
}
13+
}
14+
}
15+
16+
impl From<&opentelemetry::KeyValue> for KeyValue {
17+
fn from(value: &opentelemetry::KeyValue) -> Self {
18+
Self {
19+
key: value.key.to_string(),
20+
value: value.value.clone().into(),
21+
}
22+
}
23+
}
24+
25+
impl From<opentelemetry::Value> for Value {
26+
fn from(value: opentelemetry::Value) -> Self {
27+
match value {
28+
opentelemetry::Value::Bool(v) => Self::Bool(v),
29+
opentelemetry::Value::I64(v) => Self::S64(v),
30+
opentelemetry::Value::F64(v) => Self::F64(v),
31+
opentelemetry::Value::String(v) => Self::String(v.to_string()),
32+
opentelemetry::Value::Array(v) => match v {
33+
opentelemetry::Array::Bool(items) => Self::BoolArray(items),
34+
opentelemetry::Array::I64(items) => Self::S64Array(items),
35+
opentelemetry::Array::F64(items) => Self::F64Array(items),
36+
opentelemetry::Array::String(items) => {
37+
Self::StringArray(items.into_iter().map(Into::into).collect())
38+
}
39+
_ => unimplemented!(),
40+
},
41+
_ => unimplemented!(),
42+
}
43+
}
44+
}
45+
46+
impl From<std::time::SystemTime> for Datetime {
47+
fn from(value: std::time::SystemTime) -> Self {
48+
let duration_since_epoch = value
49+
.duration_since(UNIX_EPOCH)
50+
.expect("SystemTime should be after UNIX EPOCH");
51+
Self {
52+
seconds: duration_since_epoch.as_secs(),
53+
nanoseconds: duration_since_epoch.subsec_nanos(),
54+
}
55+
}
56+
}

wit/tracing.wit

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
interface tracing {
22
use wasi:clocks/wall-clock@0.2.0.{datetime};
3+
use types.{key-value};
34

45
/// Called when a span is started.
56
on-start: func(context: span-context);
@@ -91,37 +92,6 @@ interface tracing {
9192
internal
9293
}
9394

94-
/// A key-value pair describing an attribute.
95-
record key-value {
96-
/// The attribute name.
97-
key: key,
98-
/// The attribute value.
99-
value: value,
100-
}
101-
102-
/// The key part of attribute `key-value` pairs.
103-
type key = string;
104-
105-
/// The value part of attribute `key-value` pairs.
106-
variant value {
107-
/// A string value.
108-
%string(string),
109-
/// A boolean value.
110-
%bool(bool),
111-
/// A double precision floating point value.
112-
%f64(f64),
113-
/// A signed 64 bit integer value.
114-
%s64(s64),
115-
/// A homogeneous array of string values.
116-
string-array(list<string>),
117-
/// A homogeneous array of boolean values.
118-
bool-array(list<bool>),
119-
/// A homogeneous array of double precision floating point values.
120-
f64-array(list<f64>),
121-
/// A homogeneous array of 64 bit integer values.
122-
s64-array(list<s64>),
123-
}
124-
12595
/// An event describing a specific moment in time on a span and associated attributes.
12696
record event {
12797
/// Event name.

wit/types.wit

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
interface types {
2+
/// A key-value pair describing an attribute.
3+
record key-value {
4+
/// The attribute name.
5+
key: key,
6+
/// The attribute value.
7+
value: value,
8+
}
9+
10+
/// The key part of attribute `key-value` pairs.
11+
type key = string;
12+
13+
/// The value part of attribute `key-value` pairs.
14+
variant value {
15+
/// A string value.
16+
%string(string),
17+
/// A boolean value.
18+
%bool(bool),
19+
/// A double precision floating point value.
20+
%f64(f64),
21+
/// A signed 64 bit integer value.
22+
%s64(s64),
23+
/// A homogeneous array of string values.
24+
string-array(list<string>),
25+
/// A homogeneous array of boolean values.
26+
bool-array(list<bool>),
27+
/// A homogeneous array of double precision floating point values.
28+
f64-array(list<f64>),
29+
/// A homogeneous array of 64 bit integer values.
30+
s64-array(list<s64>),
31+
}
32+
}

wit/world.wit

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package wasi:otel@0.2.0-draft;
22

33
world imports {
4+
import types;
45
import tracing;
56
}
67

0 commit comments

Comments
 (0)