Add serde support for protobuf generated struct. (#35)
* Add serde support for generated struct.
* Add serde tests.
diff --git a/Cargo.toml b/Cargo.toml
index 64c5268..9287bd5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -44,6 +44,7 @@
futures-util = "0.3.21"
prost = "0.10.4"
prost-derive = "0.10.1"
+serde = { version = "1.0.138", features = ["derive"] }
thiserror = "1.0.31"
tokio = { version = "1.18.2", features = ["parking_lot"] }
tonic = { version = "0.7.2", features = ["codegen"] }
diff --git a/build.rs b/build.rs
index 5c56668..76f6381 100644
--- a/build.rs
+++ b/build.rs
@@ -15,9 +15,12 @@
//
fn main() -> Result<(), Box<dyn std::error::Error>> {
- tonic_build::configure().build_server(false).compile(
- &["./skywalking-data-collect-protocol/language-agent/Tracing.proto"],
- &["./skywalking-data-collect-protocol"],
- )?;
+ tonic_build::configure()
+ .build_server(false)
+ .type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
+ .compile(
+ &["./skywalking-data-collect-protocol/language-agent/Tracing.proto"],
+ &["./skywalking-data-collect-protocol"],
+ )?;
Ok(())
}
diff --git a/src/skywalking_proto/v3/mod.rs b/src/skywalking_proto/v3/mod.rs
index cd8302a..e535cbf 100644
--- a/src/skywalking_proto/v3/mod.rs
+++ b/src/skywalking_proto/v3/mod.rs
@@ -49,3 +49,20 @@
});
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ trait AssertSerialize: serde::Serialize {}
+
+ impl AssertSerialize for SegmentObject {}
+
+ impl AssertSerialize for SpanObject {}
+
+ trait AssertDeserialize<'de>: serde::Deserialize<'de> {}
+
+ impl AssertDeserialize<'_> for SegmentObject {}
+
+ impl AssertDeserialize<'_> for SpanObject {}
+}