substrait/
proto.rs

1// SPDX-License-Identifier: Apache-2.0
2
3#![allow(
4    clippy::doc_overindented_list_items,
5    clippy::large_enum_variant,
6    clippy::needless_borrow,
7    clippy::needless_borrows_for_generic_args,
8    clippy::needless_lifetimes,
9    rustdoc::invalid_html_tags
10)]
11
12//! Generated types for the protobuf `substrait` package.
13
14/// Generated types for the protobuf `substrait.extensions` package
15pub mod extensions {
16    include!(concat!(env!("OUT_DIR"), "/substrait.extensions.rs"));
17
18    #[cfg(feature = "serde")]
19    include!(concat!(env!("OUT_DIR"), "/substrait.extensions.serde.rs"));
20}
21
22include!(concat!(env!("OUT_DIR"), "/substrait.rs"));
23
24#[cfg(feature = "serde")]
25include!(concat!(env!("OUT_DIR"), "/substrait.serde.rs"));
26
27#[cfg(test)]
28mod tests {
29    #[cfg(feature = "serde")]
30    #[test]
31    fn pbjson_serde() -> Result<(), Box<dyn std::error::Error>> {
32        let plan = serde_json::from_str::<super::Plan>(
33            r#"{
34  "version": { "minorNumber": 75, "producer": "substrait-rs" },
35  "extensionUrns": [
36    {
37      "extensionUrnAnchor": 1,
38      "urn": "extension:io.substrait:functions_string"
39    }
40  ]
41}"#,
42        )?;
43        assert_eq!(
44            plan.version,
45            Some(super::Version {
46                minor_number: 75,
47                producer: "substrait-rs".into(),
48                ..Default::default()
49            })
50        );
51        assert_eq!(plan.extension_urns.len(), 1);
52        Ok(())
53    }
54
55    #[cfg(feature = "serde")]
56    #[test]
57    fn forward_compatible_unknown_fields() -> Result<(), Box<dyn std::error::Error>> {
58        // Test that unknown fields are ignored for forward compatibility
59        let plan = serde_json::from_str::<super::Plan>(
60            r#"{
61  "version": { "minorNumber": 75, "producer": "substrait-rs" },
62  "unknownField": "this field doesn't exist in the proto",
63  "anotherUnknownField": {"nested": "data"},
64  "extensionUrns": [
65    {
66      "extensionUrnAnchor": 1,
67      "urn": "extension:io.substrait:functions_string",
68      "futureField": "should be ignored"
69    }
70  ]
71}"#,
72        )?;
73        assert_eq!(
74            plan.version,
75            Some(super::Version {
76                minor_number: 75,
77                producer: "substrait-rs".into(),
78                ..Default::default()
79            })
80        );
81        assert_eq!(plan.extension_urns.len(), 1);
82        Ok(())
83    }
84}