veecle_os_data_support_someip/
lib.rs

1//! Support for working with SOME/IP within a runtime instance.
2
3#![no_std]
4#![forbid(unsafe_code)]
5// Set by `cargo-llvm-cov` https://github.com/taiki-e/cargo-llvm-cov?tab=readme-ov-file#exclude-code-from-coverage
6#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
7
8#[cfg(test)]
9macro_rules! test_round_trip {
10    ($type:ty, $value:expr, $expected:expr) => {
11        let value = $value;
12
13        // Serialize valid.
14        let mut buffer = [0u8; 2048];
15        let buffer_length = crate::serialize::Serialize::required_length(&value);
16        let serialized_data = crate::serialize::SerializeExt::serialize(&value, &mut buffer);
17
18        assert!(matches!(serialized_data, Ok(..)));
19
20        let serialized_data = serialized_data.unwrap();
21
22        // Required length.
23
24        assert_eq!(serialized_data.len(), buffer_length);
25
26        assert_eq!(serialized_data, $expected);
27
28        // Parse valid.
29
30        let parsed = <$type as crate::parse::ParseExt>::parse(serialized_data);
31
32        assert!(matches!(parsed, Ok(..)));
33        assert_eq!(parsed.unwrap(), value);
34
35        // Serialize too short
36        for cut_off in 0..serialized_data.len().saturating_sub(1) {
37            let mut buffer = [0u8; 2048];
38
39            assert!(matches!(
40                crate::serialize::SerializeExt::serialize(&value, &mut buffer[..cut_off]),
41                Err(crate::serialize::SerializeError::BufferTooSmall)
42            ));
43        }
44
45        // Parse too short
46        for cut_off in 0..serialized_data.len().saturating_sub(1) {
47            assert!(matches!(
48                <$type as crate::parse::ParseExt>::parse(&serialized_data[..cut_off]),
49                Err(crate::parse::ParseError::PayloadTooShort)
50                    | Err(crate::parse::ParseError::MalformedMessage { .. })
51            ));
52        }
53
54        // Parse empty
55        assert!(matches!(
56            <$type as crate::parse::ParseExt>::parse(&[]),
57            Err(crate::parse::ParseError::PayloadTooShort)
58                | Err(crate::parse::ParseError::MalformedMessage { .. })
59        ));
60    };
61}
62
63pub mod array;
64pub mod header;
65pub mod length;
66pub mod parse;
67pub mod parse_impl;
68pub mod serialize;
69pub mod serialize_impl;
70pub mod service_discovery;
71pub mod string;
72
73// Make `Parse` derive macro work inside this crate.
74// This is required because the macro expects the `veecle_os_data_support_someip` crate to be imported.
75extern crate self as veecle_os_data_support_someip;