From 555a3d731eaacef92006c1a28f8bc84205fcccde Mon Sep 17 00:00:00 2001 From: Joao Rebelo Date: Tue, 12 May 2026 17:19:52 +0200 Subject: [PATCH 1/7] Add first version of Dust DDS tests --- .gitignore | 3 + srcRs/DustDDS/Cargo.lock | 534 +++++++++++++++++++++++++++++++ srcRs/DustDDS/Cargo.toml | 11 + srcRs/DustDDS/src/main.rs | 641 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 1189 insertions(+) create mode 100644 srcRs/DustDDS/Cargo.lock create mode 100644 srcRs/DustDDS/Cargo.toml create mode 100644 srcRs/DustDDS/src/main.rs diff --git a/.gitignore b/.gitignore index dac6903..89c445d 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,6 @@ doc/detailed_report.rst doc/test_results.rst test_description.rst doc/test_description.rst + +# Rust target files +target/ \ No newline at end of file diff --git a/srcRs/DustDDS/Cargo.lock b/srcRs/DustDDS/Cargo.lock new file mode 100644 index 0000000..da9022b --- /dev/null +++ b/srcRs/DustDDS/Cargo.lock @@ -0,0 +1,534 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "cc" +version = "1.2.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "clap" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "ctrlc" +version = "3.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162" +dependencies = [ + "dispatch2", + "nix", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "dust_dds" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0a1a8670f436a711942d5218b2ef20aa579e8745a9912721de540e5a2e29dae" +dependencies = [ + "critical-section", + "dust_dds_derive", + "md5", + "network-interface", + "regex", + "socket2", + "tracing", +] + +[[package]] +name = "dust_dds_derive" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56b01180d953c1a42e2e0b556daf15fde64d84daf836834457de949fcbddece2" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "xml-rs", +] + +[[package]] +name = "dust_dds_test_main" +version = "0.1.0" +dependencies = [ + "clap", + "ctrlc", + "dust_dds", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "network-interface" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddcb8865ad3d9950f22f42ffa0ef0aecbfbf191867b3122413602b0a360b2a6" +dependencies = [ + "cc", + "libc", + "thiserror", + "winapi", +] + +[[package]] +name = "nix" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" +dependencies = [ + "bitflags", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "xml-rs" +version = "0.8.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" diff --git a/srcRs/DustDDS/Cargo.toml b/srcRs/DustDDS/Cargo.toml new file mode 100644 index 0000000..d0a755e --- /dev/null +++ b/srcRs/DustDDS/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "dust_dds_test_main" +version = "0.1.0" +description = "OMG DDS_XTYPES Interoperability" +edition = "2024" +rust-version = "1.85" + +[dependencies] +clap = { version = "4.5.47", features = ["derive", "string"] } +ctrlc = "3.4" +dust_dds = { version = "0.15.0" } diff --git a/srcRs/DustDDS/src/main.rs b/srcRs/DustDDS/src/main.rs new file mode 100644 index 0000000..d2e7380 --- /dev/null +++ b/srcRs/DustDDS/src/main.rs @@ -0,0 +1,641 @@ +use clap::{Parser, ValueEnum}; +use ctrlc; +use dust_dds::{ + domain::{ + domain_participant::DomainParticipant, + domain_participant_factory::DomainParticipantFactory, + domain_participant_listener::DomainParticipantListener, + }, + infrastructure::{ + error::DdsError, + qos::{DataReaderQos, DataWriterQos, PublisherQos, QosKind, SubscriberQos}, + qos_policy::{ + self, DataRepresentationQosPolicy, DurabilityQosPolicy, HistoryQosPolicy, + HistoryQosPolicyKind, OwnershipQosPolicy, OwnershipQosPolicyKind, + OwnershipStrengthQosPolicy, PartitionQosPolicy, ReliabilityQosPolicy, + XCDR_DATA_REPRESENTATION, XCDR2_DATA_REPRESENTATION, + }, + sample_info::{ANY_INSTANCE_STATE, ANY_SAMPLE_STATE, ANY_VIEW_STATE}, + status::{InconsistentTopicStatus, NO_STATUS, StatusKind}, + time::DurationKind, + }, + listener::NO_LISTENER, + publication::data_writer::DataWriter, + subscription::data_reader::DataReader, + xtypes::{ + dynamic_type::DynamicData, + dynamic_type::DynamicDataFactory, + dynamic_type::{DynamicType, DynamicTypeBuilderFactory}, + }, +}; +use std::{ + fmt::Debug, + io::Write, + process::{ExitCode, Termination}, + sync::mpsc::Receiver, +}; + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] +#[clap(rename_all = "kebab_case")] +enum TypeConsistencyArg { + /// True + T, + /// False + F, + /// Default + D, +} + +#[derive(Parser, Clone)] +#[command(author, version, about, long_about = None)] +struct Options { + /// domain id (default: 0) + #[clap(short = 'd', default_value_t = 0)] + domain_id: i32, + + /// BEST_EFFORT reliability + #[clap(short = 'b', default_value_t = false)] + best_effort_reliability: bool, + + /// RELIABLE reliability + #[clap(short = 'r', default_value_t = false)] + reliable_reliability: bool, + + /// keep history depth [0: KEEP_ALL] + #[clap(short = 'k', default_value_t = -1, allow_negative_numbers = true)] + history_depth: i32, + + /// set a 'deadline' with interval (seconds) [0: OFF] + #[clap(short = 'f', default_value_t = 0)] + deadline_interval: u64, + + /// apply 'time based filter' with interval (seconds) [0: OFF] + #[clap(short = 'i', default_value_t = 0)] + timebasedfilter_interval: u64, + + /// set ownership strength [-1: SHARED] + #[clap(short = 's', default_value_t = -1, allow_negative_numbers = true)] + ownership_strength: i32, + + /// set the topic name + #[clap(short = 't')] + topic_name: Option, + + /// set the type name + #[clap(short = 'y')] + type_name: Option, + + /// set a 'partition' string + #[clap(short = 'p')] + partition: Option, + + /// set durability [v: VOLATILE, l: TRANSIENT_LOCAL, t: TRANSIENT, p: PERSISTENT] + #[clap(short = 'D', default_value_t = 'v')] + durability_kind: char, + + /// publish samples + #[clap(short = 'P', default_value_t = false)] + publish: bool, + + /// subscribe samples + #[clap(short = 'S', default_value_t = false)] + subscribe: bool, + + /// set data representation [1: XCDR, 2: XCDR2] + #[clap(short = 'x', default_value_t = 1)] + data_representation: u16, + + /// folder containing type definitions (eg: types) + #[clap(long)] + type_folder: Option, + + /// type definition file name without extension + #[clap(long)] + type_file: Option, + + /// folder containing data samples (eg: data) + #[clap(long)] + data_folder: Option, + + /// data sample file name without extension + #[clap(long)] + data_file: Option, + + /// print Publisher's samples + #[clap(short = 'w', default_value_t = false)] + print_writer_samples: bool, + + /// enable, disable or default value for type_consistency.force_type_validation + #[clap(long)] + force_type_validation: Option, + + /// enable, disable or default value for type_consistency.ignore_member_names + #[clap(long)] + ignore_member_names: Option, + + /// enable, disable or default value for type_consistency.ignore_sequence_bounds + #[clap(long)] + ignore_seq_bounds: Option, + + /// enable, disable or default value for type_consistency.ignore_string_bounds + #[clap(long)] + ignore_str_bounds: Option, + + /// enable, disable or default value for type_consistency.prevent_type_widening + #[clap(long)] + prevent_type_widening: Option, + + /// enable, disable type coercion or default value for type_consistency.kind + #[clap(long)] + allow_type_coercion: Option, + + /// disable sending the type info for type assignability + #[clap(long, default_value_t = false)] + disable_type_info: bool, + + /// set the Type Object version to use. Default: 2. + #[clap(long, default_value_t = 2)] + type_object_version: u32, + + /// print typeid (TypeObjectV1) or equivalence hash (TypeObjectV2) + #[clap(long, default_value_t = false)] + print_typeid: bool, + + /// set log message verbosity [e: ERROR, d: DEBUG] + #[clap(short = 'v', default_value_t = 'e')] + log_message_verbosity: char, +} + +impl Options { + fn validate(&self) -> Result<(), ParsingError> { + if self.topic_name.is_none() { + return Err(ParsingError( + "topic name unspecified [-t], using \"test\" by default".to_string(), + )); + } + if self.type_name.is_none() { + return Err(ParsingError("please specify type name [-y]".to_string())); + } + if !self.publish && !self.subscribe { + return Err(ParsingError( + "please specify publish [-P] or subscribe [-S]".to_string(), + )); + } + if self.publish && self.subscribe { + return Err(ParsingError( + "please specify only one of: publish [-P] or subscribe [-S]".to_string(), + )); + } + if self.type_folder.is_none() && self.type_file.is_none() { + return Err(ParsingError( + "please provide the types via --type-folder or --type-file".to_string(), + )); + } + Ok(()) + } + + fn reliability_qos_policy(&self) -> ReliabilityQosPolicy { + let mut reliability = DataWriterQos::default().reliability; + if self.best_effort_reliability { + reliability.kind = qos_policy::ReliabilityQosPolicyKind::BestEffort; + } + if self.reliable_reliability { + reliability.kind = qos_policy::ReliabilityQosPolicyKind::Reliable; + } + reliability + } + + fn partition_qos_policy(&self) -> PartitionQosPolicy { + if let Some(partition) = &self.partition { + PartitionQosPolicy { + name: vec![partition.to_owned()], + } + } else { + PartitionQosPolicy::default() + } + } + + fn durability_qos_policy(&self) -> DurabilityQosPolicy { + DurabilityQosPolicy { + kind: match self.durability_kind { + 'v' => qos_policy::DurabilityQosPolicyKind::Volatile, + 'l' => qos_policy::DurabilityQosPolicyKind::TransientLocal, + 't' => qos_policy::DurabilityQosPolicyKind::Transient, + 'p' => qos_policy::DurabilityQosPolicyKind::Persistent, + _ => panic!("durability not valid"), + }, + } + } + + fn data_representation_qos_policy(&self) -> DataRepresentationQosPolicy { + let data_representation = match self.data_representation { + 1 => XCDR_DATA_REPRESENTATION, + 2 => XCDR2_DATA_REPRESENTATION, + _ => panic!("Wrong data representation"), + }; + qos_policy::DataRepresentationQosPolicy { + value: vec![data_representation], + } + } + + fn ownership_qos_policy(&self) -> OwnershipQosPolicy { + OwnershipQosPolicy { + kind: match self.ownership_strength { + -1 => qos_policy::OwnershipQosPolicyKind::Shared, + _ => qos_policy::OwnershipQosPolicyKind::Exclusive, + }, + } + } + + fn history_depth_qos_policy(&self) -> HistoryQosPolicy { + match self.history_depth { + -1 => HistoryQosPolicy::default(), + 0 => HistoryQosPolicy { + kind: HistoryQosPolicyKind::KeepAll, + }, + x if x >= 1 => HistoryQosPolicy { + kind: HistoryQosPolicyKind::KeepLast(x as u32), + }, + _ => panic!("history_depth not valid"), + } + } + + fn ownership_strength_qos_policy(&self) -> OwnershipStrengthQosPolicy { + if self.ownership_strength < -1 { + panic!("Ownership strength must be positive or zero") + } + OwnershipStrengthQosPolicy { + value: self.ownership_strength, + } + } +} + +struct Listener; +impl DomainParticipantListener for Listener {} + +fn init_publisher( + participant: &DomainParticipant, + options: Options, + dynamic_type: &'static DynamicType, +) -> Result, InitializeError> { + todo!(); + // let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); + // let type_name = options.type_name.clone().unwrap(); + + // let topic = participant.create_topic::( + // &topic_name, + // &type_name, + // QosKind::Default, + // NO_LISTENER, + // NO_STATUS, + // )?; + + // let publisher_qos = QosKind::Specific(PublisherQos { + // partition: options.partition_qos_policy(), + // ..Default::default() + // }); + // let publisher = participant.create_publisher(publisher_qos, NO_LISTENER, NO_STATUS)?; + + // let mut data_writer_qos = DataWriterQos { + // durability: options.durability_qos_policy(), + // reliability: options.reliability_qos_policy(), + // representation: options.data_representation_qos_policy(), + // ownership: options.ownership_qos_policy(), + // history: options.history_depth_qos_policy(), + // ..Default::default() + // }; + // if options.deadline_interval > 0 { + // data_writer_qos.deadline.period = + // DurationKind::Finite(core::time::Duration::from_secs(options.deadline_interval).into()); + // } + // if options.ownership_qos_policy().kind == OwnershipQosPolicyKind::Exclusive { + // data_writer_qos.ownership_strength = options.ownership_strength_qos_policy(); + // } + + // let data_writer = publisher.create_datawriter::( + // &topic, + // QosKind::Specific(data_writer_qos), + // NO_LISTENER, + // NO_STATUS, + // )?; + + // Ok(data_writer) +} + +fn run_publisher( + data_writer: &DataWriter, + options: Options, + dynamic_type: &'static DynamicType, + all_done: Receiver<()>, +) -> Result<(), RunningError> { + todo!(); + // let mut dd = DynamicDataFactory::create_data(dynamic_type.clone()); + + // // Attempt to load JSON data into DynamicData + // if let (Some(data_folder), Some(data_file)) = (&options.data_folder, &options.data_file) { + // let file_path = format!("{}/json/{}.json", data_folder, data_file); + // if let Ok(content) = std::fs::read_to_string(&file_path) { + // // from_string is not currently implemented in dust_dds for DynamicData + // // dd.from_string(&content); + // todo!("Parse JSON and set fields in DynamicData") + // } + // } + + // while all_done.try_recv().is_err() { + // if options.print_writer_samples { + // println!(" Wrote: DynamicData sample"); + // } + // // Write dynamic data + // data_writer.write(dd.clone(), None).ok(); + // std::thread::sleep(std::time::Duration::from_secs(1)); + // } + // Ok(()) +} + +fn init_subscriber( + participant: &DomainParticipant, + options: Options, + dynamic_type: &'static DynamicType, +) -> Result, InitializeError> { + let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); + let type_name = options.type_name.clone().unwrap(); + + todo!(); + // let topic = participant.create_topic::( + // &topic_name, + // &type_name, + // QosKind::Default, + // NO_LISTENER, + // NO_STATUS, + // )?; + + // let subscriber_qos = QosKind::Specific(SubscriberQos { + // partition: options.partition_qos_policy(), + // ..Default::default() + // }); + // let subscriber = participant.create_subscriber(subscriber_qos, NO_LISTENER, NO_STATUS)?; + + // let mut data_reader_qos = DataReaderQos { + // durability: options.durability_qos_policy(), + // reliability: options.reliability_qos_policy(), + // representation: options.data_representation_qos_policy(), + // ownership: options.ownership_qos_policy(), + // history: options.history_depth_qos_policy(), + // ..Default::default() + // }; + // if options.deadline_interval > 0 { + // data_reader_qos.deadline.period = + // DurationKind::Finite(core::time::Duration::from_secs(options.deadline_interval).into()); + // } + // if options.timebasedfilter_interval > 0 { + // data_reader_qos.time_based_filter.minimum_separation = DurationKind::Finite( + // core::time::Duration::from_secs(options.timebasedfilter_interval).into(), + // ); + // } + + // // Set type consistency enforcement based on arguments + // let mut type_consistency = TypeConsistencyEnforcementQosPolicy::default(); + + // if let Some(allow_type_coercion) = options.allow_type_coercion { + // match allow_type_coercion { + // TypeConsistencyArg::T => type_consistency.kind = TypeConsistencyKind::AllowTypeCoercion, + // TypeConsistencyArg::F => { + // type_consistency.kind = TypeConsistencyKind::DisallowTypeCoercion + // } + // TypeConsistencyArg::D => { + // type_consistency.kind = TypeConsistencyEnforcementQosPolicy::default().kind + // } + // } + // } + // if let Some(force_type_validation) = options.force_type_validation { + // match force_type_validation { + // TypeConsistencyArg::T => type_consistency.force_type_validation = true, + // TypeConsistencyArg::F => type_consistency.force_type_validation = false, + // TypeConsistencyArg::D => { + // type_consistency.force_type_validation = + // TypeConsistencyEnforcementQosPolicy::default().force_type_validation + // } + // } + // } + // if let Some(ignore_member_names) = options.ignore_member_names { + // match ignore_member_names { + // TypeConsistencyArg::T => type_consistency.ignore_member_names = true, + // TypeConsistencyArg::F => type_consistency.ignore_member_names = false, + // TypeConsistencyArg::D => { + // type_consistency.ignore_member_names = + // TypeConsistencyEnforcementQosPolicy::default().ignore_member_names + // } + // } + // } + // if let Some(ignore_seq_bounds) = options.ignore_seq_bounds { + // match ignore_seq_bounds { + // TypeConsistencyArg::T => type_consistency.ignore_sequence_bounds = true, + // TypeConsistencyArg::F => type_consistency.ignore_sequence_bounds = false, + // TypeConsistencyArg::D => { + // type_consistency.ignore_sequence_bounds = + // TypeConsistencyEnforcementQosPolicy::default().ignore_sequence_bounds + // } + // } + // } + // if let Some(ignore_str_bounds) = options.ignore_str_bounds { + // match ignore_str_bounds { + // TypeConsistencyArg::T => type_consistency.ignore_string_bounds = true, + // TypeConsistencyArg::F => type_consistency.ignore_string_bounds = false, + // TypeConsistencyArg::D => { + // type_consistency.ignore_string_bounds = + // TypeConsistencyEnforcementQosPolicy::default().ignore_string_bounds + // } + // } + // } + // if let Some(prevent_type_widening) = options.prevent_type_widening { + // match prevent_type_widening { + // TypeConsistencyArg::T => type_consistency.prevent_type_widening = true, + // TypeConsistencyArg::F => type_consistency.prevent_type_widening = false, + // TypeConsistencyArg::D => { + // type_consistency.prevent_type_widening = + // TypeConsistencyEnforcementQosPolicy::default().prevent_type_widening + // } + // } + // } + + // data_reader_qos.type_consistency = type_consistency; + + // let data_reader = subscriber.create_datareader::( + // &topic, + // QosKind::Specific(data_reader_qos), + // NO_LISTENER, + // NO_STATUS, + // )?; + + // Ok(data_reader) +} + +fn run_subscriber( + data_reader: &DataReader, + options: Options, + dynamic_type: &'static DynamicType, + all_done: Receiver<()>, +) -> Result<(), RunningError> { + while all_done.try_recv().is_err() { + todo!(); + // let mut previous_handle = None; + // loop { + // let max_samples = i32::MAX; + // data_reader.take_next_instance( + // max_samples, + // previous_handle, + // ANY_SAMPLE_STATE, + // ANY_VIEW_STATE, + // ANY_INSTANCE_STATE, + // ); + // match read_result { + // Ok(samples) => { + // for sample in samples { + // if sample.sample_info.valid_data { + // println!("sample_received()"); + // // TODO: Print the sample data and compare with loaded data + // } + // previous_handle = Some(sample.sample_info.instance_handle); + // } + // std::thread::sleep(std::time::Duration::from_millis(100)); + // } + // Err(_) => break, + // } + // } + } + Ok(()) +} + +fn initialize(options: &Options) -> Result { + let participant_factory = DomainParticipantFactory::get_instance(); + + // Set domain participant factory QoS if needed + + let participant = participant_factory.create_participant( + options.domain_id, + QosKind::Default, + Some(Listener), + &[ + StatusKind::InconsistentTopic, + StatusKind::OfferedIncompatibleQos, + StatusKind::PublicationMatched, + StatusKind::OfferedDeadlineMissed, + StatusKind::LivelinessLost, + StatusKind::RequestedIncompatibleQos, + StatusKind::SubscriptionMatched, + StatusKind::RequestedDeadlineMissed, + StatusKind::LivelinessChanged, + ], + )?; + + Ok(participant) +} + +struct ParsingError(String); +struct InitializeError(String); +struct RunningError(String); + +impl From for InitializeError { + fn from(value: DdsError) -> Self { + Self(format!("DdsError: {:?}", value)) + } +} +impl From for RunningError { + fn from(value: DdsError) -> Self { + Self(format!("DdsError: {:?}", value)) + } +} + +struct Return { + code: u8, + description: String, +} +impl Debug for Return { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_fmt(format_args!("code {}: {}", self.code, self.description)) + } +} + +impl Termination for Return { + fn report(self) -> ExitCode { + self.code.into() + } +} + +impl From for Return { + fn from(value: ParsingError) -> Self { + Self { + code: 1, + description: value.0, + } + } +} + +fn main() -> Result<(), Return> { + let (tx, rx) = std::sync::mpsc::channel(); + ctrlc::set_handler(move || { + tx.send(()).expect("Could not send signal on channel."); + }) + .expect("Error setting Ctrl-C handler"); + + let mut options = Options::parse(); + if options.topic_name.is_none() { + options.topic_name = Some("test".to_string()); + } + + if let Err(e) = options.validate() { + return Err(e.into()); + } + + let participant = initialize(&options).map_err(|e| Return { + code: 2, + description: e.0, + })?; + + // Create the type + let mut dt: Option<&'static DynamicType> = None; + if let (Some(type_folder), Some(type_file), Some(type_name)) = + (&options.type_folder, &options.type_file, &options.type_name) + { + let file_path = format!("{}/xml/{}.xml", type_folder, type_file); + // This function is unimplemented in dust_dds currently + let type_builder = + DynamicTypeBuilderFactory::create_type_w_uri(file_path, type_name.clone(), vec![]); + todo!() + // dt = Some(type_builder.build()); + } + + if dt.is_none() { + return Err(Return { + code: 2, + description: "Failed to create type".to_string(), + }); + } + + // Since dt is checked above, it is Some + let dt = dt.unwrap(); + + if options.publish { + let data_writer = + init_publisher(&participant, options.clone(), dt).map_err(|e| Return { + code: 2, + description: e.0, + })?; + run_publisher(&data_writer, options.clone(), dt, rx).map_err(|e| Return { + code: 3, + description: e.0, + })?; + } else { + let data_reader = + init_subscriber(&participant, options.clone(), dt).map_err(|e| Return { + code: 2, + description: e.0, + })?; + run_subscriber(&data_reader, options.clone(), dt, rx).map_err(|e| Return { + code: 3, + description: e.0, + })?; + } + + Ok(()) +} From 2589da0a4456aab1df623dd78b8fffb4db76cfa3 Mon Sep 17 00:00:00 2001 From: Joao Rebelo Date: Wed, 13 May 2026 13:15:27 +0200 Subject: [PATCH 2/7] Uncomment code to enable latest dust dds version --- srcRs/DustDDS/Cargo.lock | 99 +++++++++++++- srcRs/DustDDS/Cargo.toml | 6 +- srcRs/DustDDS/src/main.rs | 274 +++++++++++++++++++------------------- 3 files changed, 234 insertions(+), 145 deletions(-) diff --git a/srcRs/DustDDS/Cargo.lock b/srcRs/DustDDS/Cargo.lock index da9022b..7cf3ef3 100644 --- a/srcRs/DustDDS/Cargo.lock +++ b/srcRs/DustDDS/Cargo.lock @@ -67,6 +67,12 @@ dependencies = [ "objc2", ] +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "cc" version = "1.2.62" @@ -166,24 +172,24 @@ dependencies = [ [[package]] name = "dust_dds" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0a1a8670f436a711942d5218b2ef20aa579e8745a9912721de540e5a2e29dae" +version = "0.16.0" +source = "git+https://github.com/s2e-systems/dust-dds?branch=fix_xtypes_compatibility#0f5733736f858d1fd40df152588487391a66e700" dependencies = [ "critical-section", "dust_dds_derive", + "embassy-sync", "md5", "network-interface", "regex", + "roxmltree", "socket2", "tracing", ] [[package]] name = "dust_dds_derive" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b01180d953c1a42e2e0b556daf15fde64d84daf836834457de949fcbddece2" +version = "0.16.0" +source = "git+https://github.com/s2e-systems/dust-dds?branch=fix_xtypes_compatibility#0f5733736f858d1fd40df152588487391a66e700" dependencies = [ "proc-macro2", "quote", @@ -200,12 +206,72 @@ dependencies = [ "dust_dds", ] +[[package]] +name = "embassy-sync" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bbd85cf5a5ae56bdf26f618364af642d1d0a4e245cdd75cd9aabda382f65a81" +dependencies = [ + "cfg-if", + "critical-section", + "embedded-io-async", + "futures-core", + "futures-sink", + "heapless", +] + +[[package]] +name = "embedded-io" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7" + +[[package]] +name = "embedded-io-async" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564b9f813c544241430e147d8bc454815ef9ac998878d30cc3055449f7fd4c0" +dependencies = [ + "embedded-io", +] + [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "heapless" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ba4bd83f9415b58b4ed8dc5714c76e626a105be4646c02630ad730ad3b5aa4" +dependencies = [ + "hash32", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.5.0" @@ -230,6 +296,12 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + [[package]] name = "network-interface" version = "2.0.5" @@ -324,6 +396,15 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" +[[package]] +name = "roxmltree" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" +dependencies = [ + "memchr", +] + [[package]] name = "shlex" version = "1.3.0" @@ -340,6 +421,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + [[package]] name = "strsim" version = "0.11.1" diff --git a/srcRs/DustDDS/Cargo.toml b/srcRs/DustDDS/Cargo.toml index d0a755e..3bd101e 100644 --- a/srcRs/DustDDS/Cargo.toml +++ b/srcRs/DustDDS/Cargo.toml @@ -3,9 +3,11 @@ name = "dust_dds_test_main" version = "0.1.0" description = "OMG DDS_XTYPES Interoperability" edition = "2024" -rust-version = "1.85" +rust-version = "1.87" [dependencies] clap = { version = "4.5.47", features = ["derive", "string"] } ctrlc = "3.4" -dust_dds = { version = "0.15.0" } +dust_dds = { version = "0.16.0", git = "https://github.com/s2e-systems/dust-dds", branch = "fix_xtypes_compatibility", features = [ + "xtypes-xml", +] } diff --git a/srcRs/DustDDS/src/main.rs b/srcRs/DustDDS/src/main.rs index d2e7380..377823f 100644 --- a/srcRs/DustDDS/src/main.rs +++ b/srcRs/DustDDS/src/main.rs @@ -8,6 +8,7 @@ use dust_dds::{ }, infrastructure::{ error::DdsError, + listener::NO_LISTENER, qos::{DataReaderQos, DataWriterQos, PublisherQos, QosKind, SubscriberQos}, qos_policy::{ self, DataRepresentationQosPolicy, DurabilityQosPolicy, HistoryQosPolicy, @@ -16,10 +17,9 @@ use dust_dds::{ XCDR_DATA_REPRESENTATION, XCDR2_DATA_REPRESENTATION, }, sample_info::{ANY_INSTANCE_STATE, ANY_SAMPLE_STATE, ANY_VIEW_STATE}, - status::{InconsistentTopicStatus, NO_STATUS, StatusKind}, + status::{NO_STATUS, StatusKind}, time::DurationKind, }, - listener::NO_LISTENER, publication::data_writer::DataWriter, subscription::data_reader::DataReader, xtypes::{ @@ -30,7 +30,6 @@ use dust_dds::{ }; use std::{ fmt::Debug, - io::Write, process::{ExitCode, Termination}, sync::mpsc::Receiver, }; @@ -276,122 +275,122 @@ impl DomainParticipantListener for Listener {} fn init_publisher( participant: &DomainParticipant, options: Options, - dynamic_type: &'static DynamicType, + dynamic_type: &'static dyn DynamicType, ) -> Result, InitializeError> { - todo!(); - // let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); - // let type_name = options.type_name.clone().unwrap(); - - // let topic = participant.create_topic::( - // &topic_name, - // &type_name, - // QosKind::Default, - // NO_LISTENER, - // NO_STATUS, - // )?; - - // let publisher_qos = QosKind::Specific(PublisherQos { - // partition: options.partition_qos_policy(), - // ..Default::default() - // }); - // let publisher = participant.create_publisher(publisher_qos, NO_LISTENER, NO_STATUS)?; - - // let mut data_writer_qos = DataWriterQos { - // durability: options.durability_qos_policy(), - // reliability: options.reliability_qos_policy(), - // representation: options.data_representation_qos_policy(), - // ownership: options.ownership_qos_policy(), - // history: options.history_depth_qos_policy(), - // ..Default::default() - // }; - // if options.deadline_interval > 0 { - // data_writer_qos.deadline.period = - // DurationKind::Finite(core::time::Duration::from_secs(options.deadline_interval).into()); - // } - // if options.ownership_qos_policy().kind == OwnershipQosPolicyKind::Exclusive { - // data_writer_qos.ownership_strength = options.ownership_strength_qos_policy(); - // } + let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); + let type_name = options.type_name.clone().unwrap(); - // let data_writer = publisher.create_datawriter::( - // &topic, - // QosKind::Specific(data_writer_qos), - // NO_LISTENER, - // NO_STATUS, - // )?; + let topic = participant.create_dynamic_topic( + &topic_name, + &type_name, + QosKind::Default, + NO_LISTENER, + NO_STATUS, + dynamic_type, + )?; - // Ok(data_writer) + let publisher_qos = QosKind::Specific(PublisherQos { + partition: options.partition_qos_policy(), + ..Default::default() + }); + let publisher = participant.create_publisher(publisher_qos, NO_LISTENER, NO_STATUS)?; + + let mut data_writer_qos = DataWriterQos { + durability: options.durability_qos_policy(), + reliability: options.reliability_qos_policy(), + representation: options.data_representation_qos_policy(), + ownership: options.ownership_qos_policy(), + history: options.history_depth_qos_policy(), + ..Default::default() + }; + if options.deadline_interval > 0 { + data_writer_qos.deadline.period = + DurationKind::Finite(core::time::Duration::from_secs(options.deadline_interval).into()); + } + if options.ownership_qos_policy().kind == OwnershipQosPolicyKind::Exclusive { + data_writer_qos.ownership_strength = options.ownership_strength_qos_policy(); + } + + let data_writer = publisher.create_datawriter::( + &topic, + QosKind::Specific(data_writer_qos), + NO_LISTENER, + NO_STATUS, + )?; + + Ok(data_writer) } fn run_publisher( data_writer: &DataWriter, options: Options, - dynamic_type: &'static DynamicType, + dynamic_type: &'static dyn DynamicType, all_done: Receiver<()>, ) -> Result<(), RunningError> { - todo!(); - // let mut dd = DynamicDataFactory::create_data(dynamic_type.clone()); - - // // Attempt to load JSON data into DynamicData - // if let (Some(data_folder), Some(data_file)) = (&options.data_folder, &options.data_file) { - // let file_path = format!("{}/json/{}.json", data_folder, data_file); - // if let Ok(content) = std::fs::read_to_string(&file_path) { - // // from_string is not currently implemented in dust_dds for DynamicData - // // dd.from_string(&content); - // todo!("Parse JSON and set fields in DynamicData") - // } - // } + let mut dd = DynamicDataFactory::create_data(dynamic_type); + + // Attempt to load JSON data into DynamicData + if let (Some(data_folder), Some(data_file)) = (&options.data_folder, &options.data_file) { + let file_path = format!("{}/xml/{}.xml", data_folder, data_file); + if let Ok(content) = std::fs::read_to_string(&file_path) { + dd.from_xml(&content) + .map_err(|e| RunningError(format!("{e:?}")))?; + } + } - // while all_done.try_recv().is_err() { - // if options.print_writer_samples { - // println!(" Wrote: DynamicData sample"); - // } - // // Write dynamic data - // data_writer.write(dd.clone(), None).ok(); - // std::thread::sleep(std::time::Duration::from_secs(1)); - // } - // Ok(()) + while all_done.try_recv().is_err() { + if options.print_writer_samples { + println!(" Wrote: DynamicData sample"); + } + // Write dynamic data + data_writer.write(dd.clone(), None).ok(); + std::thread::sleep(std::time::Duration::from_secs(1)); + } + Ok(()) } fn init_subscriber( participant: &DomainParticipant, options: Options, - dynamic_type: &'static DynamicType, + dynamic_type: &'static dyn DynamicType, ) -> Result, InitializeError> { let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); let type_name = options.type_name.clone().unwrap(); - todo!(); - // let topic = participant.create_topic::( - // &topic_name, - // &type_name, - // QosKind::Default, - // NO_LISTENER, - // NO_STATUS, - // )?; - - // let subscriber_qos = QosKind::Specific(SubscriberQos { - // partition: options.partition_qos_policy(), - // ..Default::default() - // }); - // let subscriber = participant.create_subscriber(subscriber_qos, NO_LISTENER, NO_STATUS)?; - - // let mut data_reader_qos = DataReaderQos { - // durability: options.durability_qos_policy(), - // reliability: options.reliability_qos_policy(), - // representation: options.data_representation_qos_policy(), - // ownership: options.ownership_qos_policy(), - // history: options.history_depth_qos_policy(), - // ..Default::default() - // }; - // if options.deadline_interval > 0 { - // data_reader_qos.deadline.period = - // DurationKind::Finite(core::time::Duration::from_secs(options.deadline_interval).into()); - // } - // if options.timebasedfilter_interval > 0 { - // data_reader_qos.time_based_filter.minimum_separation = DurationKind::Finite( - // core::time::Duration::from_secs(options.timebasedfilter_interval).into(), - // ); - // } + let topic = participant + .create_dynamic_topic( + &topic_name, + &type_name, + QosKind::Default, + NO_LISTENER, + NO_STATUS, + dynamic_type, + ) + .unwrap(); + + let subscriber_qos = QosKind::Specific(SubscriberQos { + partition: options.partition_qos_policy(), + ..Default::default() + }); + let subscriber = participant.create_subscriber(subscriber_qos, NO_LISTENER, NO_STATUS)?; + + let mut data_reader_qos = DataReaderQos { + durability: options.durability_qos_policy(), + reliability: options.reliability_qos_policy(), + representation: options.data_representation_qos_policy(), + ownership: options.ownership_qos_policy(), + history: options.history_depth_qos_policy(), + ..Default::default() + }; + if options.deadline_interval > 0 { + data_reader_qos.deadline.period = + DurationKind::Finite(core::time::Duration::from_secs(options.deadline_interval).into()); + } + if options.timebasedfilter_interval > 0 { + data_reader_qos.time_based_filter.minimum_separation = DurationKind::Finite( + core::time::Duration::from_secs(options.timebasedfilter_interval).into(), + ); + } // // Set type consistency enforcement based on arguments // let mut type_consistency = TypeConsistencyEnforcementQosPolicy::default(); @@ -460,48 +459,47 @@ fn init_subscriber( // data_reader_qos.type_consistency = type_consistency; - // let data_reader = subscriber.create_datareader::( - // &topic, - // QosKind::Specific(data_reader_qos), - // NO_LISTENER, - // NO_STATUS, - // )?; + let data_reader = subscriber.create_datareader::( + &topic, + QosKind::Specific(data_reader_qos), + NO_LISTENER, + NO_STATUS, + )?; - // Ok(data_reader) + Ok(data_reader) } fn run_subscriber( data_reader: &DataReader, - options: Options, - dynamic_type: &'static DynamicType, + _options: Options, + _dynamic_type: &'static dyn DynamicType, all_done: Receiver<()>, ) -> Result<(), RunningError> { while all_done.try_recv().is_err() { - todo!(); - // let mut previous_handle = None; - // loop { - // let max_samples = i32::MAX; - // data_reader.take_next_instance( - // max_samples, - // previous_handle, - // ANY_SAMPLE_STATE, - // ANY_VIEW_STATE, - // ANY_INSTANCE_STATE, - // ); - // match read_result { - // Ok(samples) => { - // for sample in samples { - // if sample.sample_info.valid_data { - // println!("sample_received()"); - // // TODO: Print the sample data and compare with loaded data - // } - // previous_handle = Some(sample.sample_info.instance_handle); - // } - // std::thread::sleep(std::time::Duration::from_millis(100)); - // } - // Err(_) => break, - // } - // } + let mut previous_handle = None; + loop { + let max_samples = i32::MAX; + let read_result = data_reader.take_next_instance( + max_samples, + previous_handle, + ANY_SAMPLE_STATE, + ANY_VIEW_STATE, + ANY_INSTANCE_STATE, + ); + match read_result { + Ok(samples) => { + for sample in samples { + if sample.sample_info.valid_data { + println!("sample_received()"); + // TODO: Print the sample data and compare with loaded data + } + previous_handle = Some(sample.sample_info.instance_handle); + } + std::thread::sleep(std::time::Duration::from_millis(100)); + } + Err(_) => break, + } + } } Ok(()) } @@ -593,16 +591,18 @@ fn main() -> Result<(), Return> { })?; // Create the type - let mut dt: Option<&'static DynamicType> = None; + let mut dt: Option<&'static dyn DynamicType> = None; if let (Some(type_folder), Some(type_file), Some(type_name)) = (&options.type_folder, &options.type_file, &options.type_name) { let file_path = format!("{}/xml/{}.xml", type_folder, type_file); + let type_xml = std::fs::read_to_string(file_path).unwrap(); // This function is unimplemented in dust_dds currently + println!("type_name {type_name}"); let type_builder = - DynamicTypeBuilderFactory::create_type_w_uri(file_path, type_name.clone(), vec![]); - todo!() - // dt = Some(type_builder.build()); + DynamicTypeBuilderFactory::create_type_w_document(&type_xml, type_name, vec![]) + .unwrap(); + dt = Some(type_builder.build()); } if dt.is_none() { From aba7a22c5375f529c40d540b1319ab2fde606e96 Mon Sep 17 00:00:00 2001 From: Joao Rebelo Date: Wed, 13 May 2026 14:28:53 +0200 Subject: [PATCH 3/7] Add missing prints --- srcRs/DustDDS/src/main.rs | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/srcRs/DustDDS/src/main.rs b/srcRs/DustDDS/src/main.rs index 377823f..642d0e9 100644 --- a/srcRs/DustDDS/src/main.rs +++ b/srcRs/DustDDS/src/main.rs @@ -289,6 +289,8 @@ fn init_publisher( dynamic_type, )?; + println!("Create topic: {}", topic_name); + let publisher_qos = QosKind::Specific(PublisherQos { partition: options.partition_qos_policy(), ..Default::default() @@ -311,6 +313,8 @@ fn init_publisher( data_writer_qos.ownership_strength = options.ownership_strength_qos_policy(); } + println!("Create writer for topic: {} type: {}", topic_name, type_name); + let data_writer = publisher.create_datawriter::( &topic, QosKind::Specific(data_writer_qos), @@ -340,7 +344,7 @@ fn run_publisher( while all_done.try_recv().is_err() { if options.print_writer_samples { - println!(" Wrote: DynamicData sample"); + println!(" Wrote:"); } // Write dynamic data data_writer.write(dd.clone(), None).ok(); @@ -368,6 +372,8 @@ fn init_subscriber( ) .unwrap(); + println!("Create topic: {}", topic_name); + let subscriber_qos = QosKind::Specific(SubscriberQos { partition: options.partition_qos_policy(), ..Default::default() @@ -459,6 +465,8 @@ fn init_subscriber( // data_reader_qos.type_consistency = type_consistency; + println!("Create reader for topic: {}", topic_name); + let data_reader = subscriber.create_datareader::( &topic, QosKind::Specific(data_reader_qos), @@ -471,10 +479,21 @@ fn init_subscriber( fn run_subscriber( data_reader: &DataReader, - _options: Options, - _dynamic_type: &'static dyn DynamicType, + options: Options, + dynamic_type: &'static dyn DynamicType, all_done: Receiver<()>, ) -> Result<(), RunningError> { + let mut expected_data = None; + if let (Some(data_folder), Some(data_file)) = (&options.data_folder, &options.data_file) { + let file_path = format!("{}/xml/{}.xml", data_folder, data_file); + if let Ok(content) = std::fs::read_to_string(&file_path) { + let mut dd = DynamicDataFactory::create_data(dynamic_type); + if dd.from_xml(&content).is_ok() { + expected_data = Some(dd); + } + } + } + while all_done.try_recv().is_err() { let mut previous_handle = None; loop { @@ -491,7 +510,13 @@ fn run_subscriber( for sample in samples { if sample.sample_info.valid_data { println!("sample_received()"); - // TODO: Print the sample data and compare with loaded data + if let Some(expected) = &expected_data { + if sample.data.as_ref() == Some(expected) { + println!("Received sample is the same as loaded"); + } else { + println!("Received sample is not the same as loaded"); + } + } } previous_handle = Some(sample.sample_info.instance_handle); } @@ -637,5 +662,7 @@ fn main() -> Result<(), Return> { })?; } + println!("Done."); + Ok(()) } From 1c492de113978ef0e8d3486f02d9e7445ccd4e74 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 22 May 2026 09:19:45 +0200 Subject: [PATCH 4/7] add CLA --- CLA/CLA_S2E_Software_Systems.md | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 CLA/CLA_S2E_Software_Systems.md diff --git a/CLA/CLA_S2E_Software_Systems.md b/CLA/CLA_S2E_Software_Systems.md new file mode 100644 index 0000000..d71961c --- /dev/null +++ b/CLA/CLA_S2E_Software_Systems.md @@ -0,0 +1,60 @@ +# OMG DDS INTEROPERABILITY REPOSITORY - CONTRIBUTOR LICENSE AGREEMENT + +**This Contributor License Agreement ("Agreement") specifies the terms under which the individual or corporate entity specified in the signature block below (“You”) agree to make intellectual property contributions to the OMG DDS Interoperability Repository. BY SIGNING BELOW YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT. If You are signing this Agreement in Your capacity as an employee, THEN YOUR EMPLOYER AND YOU ARE BOTH BOUND BY THIS AGREEMENT.** + +1. Definitions + + 1. "OMG DDS Xtypes Interoperability Repository" (or “Repository”) means the Git repository [https://github.com/omg-dds/dds-xtypes](https://github.com/omg-dds/dds-xtypes). + + 2. "Moderator" means an entity or individual responsible for authorizing changes to the Repository. + + 3. "Submit" (or “Submitted”) means any submission, including source code, binaries, code, pull requests, issue reports, comments, etc., made to the Moderators for inclusion in the Repository either through the Git repository interface or through electronic file transfer. + + 4. A "Contribution" is any original work of authorship, including any modifications or additions to an existing work, that You Submit to the DDS Interoperability Repository. + + 5. A "User" is anyone who accesses the Repository. + +2. Allowable Contribution Representations + + 1. You represent that You have the necessary rights to the Contribution(s) to meet the obligations of this Agreement. If You are employed, Your employer has authorized Contribution(s) under this Agreement. + + 2. You represent that you have no knowledge of third-party intellectual property rights that are likely to be infringed by the Contribution(s). You represent that you have no knowledge that such infringement or any allegation of misappropriation of intellectual property rights is likely to be claimed or has already been claimed. + +3. License + + You grant Moderators a perpetual, worldwide, non-exclusive, assignable, paid-up license to publish, display, and redistribute the Contribution as part of the Repository. You also license to Moderators under the same terms any other intellectual property rights required to publish, display, and redistribute the Contributions as part of the Repository. You further grant all Users of the Repository a license to the Contribution under the terms of the [OMG DDS Interoperability Testing License](../LICENSE.md) included in the Repository. Moderators are under no obligation to publish Contributions. + +4. No Warranty, Consequential Damages. Limited Liability + + Other than explicitly stated herein, You provide the Contribution(s) "as is" with no warranty nor claims of fitness to any purpose. Neither party shall be liable for consequential or special damages of any kind. Other than for breach of warranty or representations herein, the liability of either party to the other shall be limited to $1000. + +5. General + + 1. If You are an agency of the United States Government, then this Agreement will be governed by the United States federal common law. Otherwise, this Agreement will be governed by the laws of the State of California except with regard to its choice of law rules. + + 2. A party may assign this Agreement to an entity acquiring essentially all of the party’s relevant business. + +6. Electronic Signatures + + "Electronic Signature" means any electronic sound, symbol, or process attached to or logically associated with a record and executed and adopted by a party with the intent to sign such record. + + Each party agrees that the Electronic Signatures, whether digital or encrypted, of the parties included in this Agreement are intended to authenticate this writing and to have the same force and effect as manual signatures. + + +IN WITNESS WHEREOF, You, intending to be legally bound, have executed this Agreement or caused Your employer’s proper and duly authorized officer to execute and deliver this Agreement, for good and valuable consideration, the sufficiency of which is hereby acknowledged, as of the day and year first written below. + +**For:** + +Entity Name: S2E Software Systems B.V. + +Address: St. Jacobstraat 125, 3511 BP Utrecht, The Netherlands + + ("**You**") + +**By:** + +Name: Stefan Kimmer + +Title: Director + +Date: Mai 22, 2026 From 61d2e760b52d381c002a943d9942dd512385ac2e Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 22 May 2026 09:32:23 +0200 Subject: [PATCH 5/7] move rust source --- {srcRs => src/rs}/DustDDS/Cargo.toml | 2 +- {srcRs => src/rs}/DustDDS/src/main.rs | 0 srcRs/DustDDS/Cargo.lock | 621 -------------------------- 3 files changed, 1 insertion(+), 622 deletions(-) rename {srcRs => src/rs}/DustDDS/Cargo.toml (82%) rename {srcRs => src/rs}/DustDDS/src/main.rs (100%) delete mode 100644 srcRs/DustDDS/Cargo.lock diff --git a/srcRs/DustDDS/Cargo.toml b/src/rs/DustDDS/Cargo.toml similarity index 82% rename from srcRs/DustDDS/Cargo.toml rename to src/rs/DustDDS/Cargo.toml index 3bd101e..099fba6 100644 --- a/srcRs/DustDDS/Cargo.toml +++ b/src/rs/DustDDS/Cargo.toml @@ -8,6 +8,6 @@ rust-version = "1.87" [dependencies] clap = { version = "4.5.47", features = ["derive", "string"] } ctrlc = "3.4" -dust_dds = { version = "0.16.0", git = "https://github.com/s2e-systems/dust-dds", branch = "fix_xtypes_compatibility", features = [ +dust_dds = { version = "0.16.0", git = "https://github.com/s2e-systems/dust-dds", branch = "main", features = [ "xtypes-xml", ] } diff --git a/srcRs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs similarity index 100% rename from srcRs/DustDDS/src/main.rs rename to src/rs/DustDDS/src/main.rs diff --git a/srcRs/DustDDS/Cargo.lock b/srcRs/DustDDS/Cargo.lock deleted file mode 100644 index 7cf3ef3..0000000 --- a/srcRs/DustDDS/Cargo.lock +++ /dev/null @@ -1,621 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "anstream" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - -[[package]] -name = "anstyle-parse" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", -] - -[[package]] -name = "bitflags" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" - -[[package]] -name = "block2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" -dependencies = [ - "objc2", -] - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "cc" -version = "1.2.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" -dependencies = [ - "find-msvc-tools", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - -[[package]] -name = "clap" -version = "4.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - -[[package]] -name = "colorchoice" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - -[[package]] -name = "ctrlc" -version = "3.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162" -dependencies = [ - "dispatch2", - "nix", - "windows-sys 0.61.2", -] - -[[package]] -name = "dispatch2" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" -dependencies = [ - "bitflags", - "block2", - "libc", - "objc2", -] - -[[package]] -name = "dust_dds" -version = "0.16.0" -source = "git+https://github.com/s2e-systems/dust-dds?branch=fix_xtypes_compatibility#0f5733736f858d1fd40df152588487391a66e700" -dependencies = [ - "critical-section", - "dust_dds_derive", - "embassy-sync", - "md5", - "network-interface", - "regex", - "roxmltree", - "socket2", - "tracing", -] - -[[package]] -name = "dust_dds_derive" -version = "0.16.0" -source = "git+https://github.com/s2e-systems/dust-dds?branch=fix_xtypes_compatibility#0f5733736f858d1fd40df152588487391a66e700" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "xml-rs", -] - -[[package]] -name = "dust_dds_test_main" -version = "0.1.0" -dependencies = [ - "clap", - "ctrlc", - "dust_dds", -] - -[[package]] -name = "embassy-sync" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bbd85cf5a5ae56bdf26f618364af642d1d0a4e245cdd75cd9aabda382f65a81" -dependencies = [ - "cfg-if", - "critical-section", - "embedded-io-async", - "futures-core", - "futures-sink", - "heapless", -] - -[[package]] -name = "embedded-io" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eb1aa714776b75c7e67e1da744b81a129b3ff919c8712b5e1b32252c1f07cc7" - -[[package]] -name = "embedded-io-async" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564b9f813c544241430e147d8bc454815ef9ac998878d30cc3055449f7fd4c0" -dependencies = [ - "embedded-io", -] - -[[package]] -name = "find-msvc-tools" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" - -[[package]] -name = "futures-core" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" - -[[package]] -name = "futures-sink" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" - -[[package]] -name = "hash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" -dependencies = [ - "byteorder", -] - -[[package]] -name = "heapless" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25ba4bd83f9415b58b4ed8dc5714c76e626a105be4646c02630ad730ad3b5aa4" -dependencies = [ - "hash32", - "stable_deref_trait", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[package]] -name = "libc" -version = "0.2.186" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" - -[[package]] -name = "md5" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" - -[[package]] -name = "memchr" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - -[[package]] -name = "network-interface" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ddcb8865ad3d9950f22f42ffa0ef0aecbfbf191867b3122413602b0a360b2a6" -dependencies = [ - "cc", - "libc", - "thiserror", - "winapi", -] - -[[package]] -name = "nix" -version = "0.31.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" -dependencies = [ - "bitflags", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "objc2" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" -dependencies = [ - "objc2-encode", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "proc-macro2" -version = "1.0.106" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "regex" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" -dependencies = [ - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" - -[[package]] -name = "roxmltree" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" -dependencies = [ - "memchr", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "syn" -version = "2.0.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "thiserror" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "xml-rs" -version = "0.8.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" From 2699c818fb558022d6213b8d1534876a2f276b57 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 22 May 2026 12:48:41 +0200 Subject: [PATCH 6/7] add Dust CI --- .github/workflows/ci_dustdds.yml | 31 ++ unsupported_test_manifest/dust_dds-0.16.0.txt | 289 ++++++++++++++++++ 2 files changed, 320 insertions(+) create mode 100644 .github/workflows/ci_dustdds.yml create mode 100644 unsupported_test_manifest/dust_dds-0.16.0.txt diff --git a/.github/workflows/ci_dustdds.yml b/.github/workflows/ci_dustdds.yml new file mode 100644 index 0000000..73f82cf --- /dev/null +++ b/.github/workflows/ci_dustdds.yml @@ -0,0 +1,31 @@ +name: CI DustDDS + +on: + workflow_dispatch: + pull_request: + paths: + - 'src/rs/DustDDS/**' + +jobs: + create_bin_release: + name: Create binary release + runs-on: ubuntu-latest + defaults: + run: + working-directory: src/rs/DustDDS + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Build executable + run: cargo build --package dust_dds_test_main --release + - name: Rename executable + run: | + version=$( cargo tree --package dust_dds --depth 0 --prefix none | grep -oP '(?<=v)[0-9]+\.[0-9]+\.[0-9]+' ) + cp ./target/release/dust_dds_test_main ./dust_dds-${version}_test_main_linux + mkdir artifacts + zip --junk-paths artifacts/dust_dds-${version}_test_main_linux.zip ./dust_dds-${version}_test_main_linux + - name: Upload executable artifact + uses: actions/upload-artifact@v4 + with: + name: interoperability_executable + path: src/rs/DustDDS/artifacts/ diff --git a/unsupported_test_manifest/dust_dds-0.16.0.txt b/unsupported_test_manifest/dust_dds-0.16.0.txt new file mode 100644 index 0000000..bac9989 --- /dev/null +++ b/unsupported_test_manifest/dust_dds-0.16.0.txt @@ -0,0 +1,289 @@ +xtypes_v2_array_test_suite_int32[10]_int32[20] +xtypes_v2_array_test_suite_int32[20]_int32[10] +xtypes_v2_array_test_suite_int32[10]_uint32[10] +xtypes_v2_array_test_suite_int32[10][2]_int32[20] +xtypes_v2_array_test_suite_string10[10]_string20[10] +xtypes_v2_array_test_suite_enum1[10]_enum2[10] +xtypes_v2_array_test_suite_appendable_enum +xtypes_v2_array_test_suite_SFinal[10]_S[20]_SFinalAlt[10]_S[20] +xtypes_v2_array_test_suite_SAppendable[10]_S[20]_SAppendableAlt[10]_S[20] +xtypes_v2_array_test_suite_SMutable[10]_S[20]_SMutableAlt[10]_S[20] +xtypes_v2_extensibility_test_suite_ext_final_struct_2 +xtypes_v2_extensibility_test_suite_ext_appendable_struct_2 +xtypes_v2_extensibility_test_suite_ext_appendable_struct_3 +xtypes_v2_extensibility_test_suite_ext_appendable_struct_4 +xtypes_v2_extensibility_test_suite_ext_appendable_struct_5 +xtypes_v2_extensibility_test_suite_ext_mutable_struct_1 +xtypes_v2_extensibility_test_suite_ext_mutable_struct_2 +xtypes_v2_extensibility_test_suite_ext_mutable_struct_3 +xtypes_v2_extensibility_test_suite_ext_mutable_struct_4 +xtypes_v2_extensibility_test_suite_ext_mutable_struct_5 +xtypes_v2_extensibility_test_suite_ext_mutable_struct_6 +xtypes_v2_extensibility_test_suite_ext_autoid_1 +xtypes_v2_primitive_test_suite_struct_uint8_uint16 +xtypes_v2_primitive_test_suite_struct_uint8_uint32 +xtypes_v2_primitive_test_suite_struct_uint8_uint64 +xtypes_v2_primitive_test_suite_struct_uint8_int8 +xtypes_v2_primitive_test_suite_struct_uint8_int16 +xtypes_v2_primitive_test_suite_struct_uint8_int32 +xtypes_v2_primitive_test_suite_struct_uint8_int64 +xtypes_v2_primitive_test_suite_struct_uint8_float32 +xtypes_v2_primitive_test_suite_struct_uint8_float64 +xtypes_v2_primitive_test_suite_struct_uint8_float128 +xtypes_v2_primitive_test_suite_struct_uint8_byte +xtypes_v2_primitive_test_suite_struct_uint8_char8 +xtypes_v2_primitive_test_suite_struct_uint16_uint8 +xtypes_v2_primitive_test_suite_struct_uint16_uint32 +xtypes_v2_primitive_test_suite_struct_uint16_uint64 +xtypes_v2_primitive_test_suite_struct_uint16_int8 +xtypes_v2_primitive_test_suite_struct_uint16_int16 +xtypes_v2_primitive_test_suite_struct_uint16_int32 +xtypes_v2_primitive_test_suite_struct_uint16_int64 +xtypes_v2_primitive_test_suite_struct_uint16_float32 +xtypes_v2_primitive_test_suite_struct_uint16_float64 +xtypes_v2_primitive_test_suite_struct_uint16_float128 +xtypes_v2_primitive_test_suite_struct_uint16_byte +xtypes_v2_primitive_test_suite_struct_uint16_char8 +xtypes_v2_primitive_test_suite_struct_uint32_uint8 +xtypes_v2_primitive_test_suite_struct_uint32_uint16 +xtypes_v2_primitive_test_suite_struct_uint32_uint64 +xtypes_v2_primitive_test_suite_struct_uint32_int8 +xtypes_v2_primitive_test_suite_struct_uint32_int16 +xtypes_v2_primitive_test_suite_struct_uint32_int32 +xtypes_v2_primitive_test_suite_struct_uint32_int64 +xtypes_v2_primitive_test_suite_struct_uint32_float32 +xtypes_v2_primitive_test_suite_struct_uint32_float64 +xtypes_v2_primitive_test_suite_struct_uint32_float128 +xtypes_v2_primitive_test_suite_struct_uint32_byte +xtypes_v2_primitive_test_suite_struct_uint32_char8 +xtypes_v2_primitive_test_suite_struct_uint64_uint8 +xtypes_v2_primitive_test_suite_struct_uint64_uint16 +xtypes_v2_primitive_test_suite_struct_uint64_uint32 +xtypes_v2_primitive_test_suite_struct_uint64_int8 +xtypes_v2_primitive_test_suite_struct_uint64_int16 +xtypes_v2_primitive_test_suite_struct_uint64_uint32 +xtypes_v2_primitive_test_suite_struct_uint64_int8 +xtypes_v2_primitive_test_suite_struct_uint64_int16 +xtypes_v2_primitive_test_suite_struct_uint64_int32 +xtypes_v2_primitive_test_suite_struct_uint64_int64 +xtypes_v2_primitive_test_suite_struct_uint64_float32 +xtypes_v2_primitive_test_suite_struct_uint64_float64 +xtypes_v2_primitive_test_suite_struct_uint64_float128 +xtypes_v2_primitive_test_suite_struct_uint64_byte +xtypes_v2_primitive_test_suite_struct_uint64_char8 +xtypes_v2_primitive_test_suite_struct_int8_uint8 +xtypes_v2_primitive_test_suite_struct_int8_uint16 +xtypes_v2_primitive_test_suite_struct_int8_uint32 +xtypes_v2_primitive_test_suite_struct_int8_uint64 +xtypes_v2_primitive_test_suite_struct_int8_int16 +xtypes_v2_primitive_test_suite_struct_int8_int32 +xtypes_v2_primitive_test_suite_struct_int8_int64 +xtypes_v2_primitive_test_suite_struct_int8_float32 +xtypes_v2_primitive_test_suite_struct_int8_float64 +xtypes_v2_primitive_test_suite_struct_int8_float128 +xtypes_v2_primitive_test_suite_struct_int8_byte +xtypes_v2_primitive_test_suite_struct_int8_char8 +xtypes_v2_primitive_test_suite_struct_int16_uint8 +xtypes_v2_primitive_test_suite_struct_int16_uint16 +xtypes_v2_primitive_test_suite_struct_int16_uint32 +xtypes_v2_primitive_test_suite_struct_int16_uint64 +xtypes_v2_primitive_test_suite_struct_int16_int8 +xtypes_v2_primitive_test_suite_struct_int16_int32 +xtypes_v2_primitive_test_suite_struct_int16_int64 +xtypes_v2_primitive_test_suite_struct_int16_float32 +xtypes_v2_primitive_test_suite_struct_int16_float64 +xtypes_v2_primitive_test_suite_struct_int16_float128 +xtypes_v2_primitive_test_suite_struct_int16_byte +xtypes_v2_primitive_test_suite_struct_int16_char8 +xtypes_v2_primitive_test_suite_struct_int32_uint8 +xtypes_v2_primitive_test_suite_struct_int32_uint16 +xtypes_v2_primitive_test_suite_struct_int32_uint32 +xtypes_v2_primitive_test_suite_struct_int32_uint64 +xtypes_v2_primitive_test_suite_struct_int32_int8 +xtypes_v2_primitive_test_suite_struct_int32_int16 +xtypes_v2_primitive_test_suite_struct_int32_int64 +xtypes_v2_primitive_test_suite_struct_int32_float32 +xtypes_v2_primitive_test_suite_struct_int32_float64 +xtypes_v2_primitive_test_suite_struct_int32_float128 +xtypes_v2_primitive_test_suite_struct_int32_byte +xtypes_v2_primitive_test_suite_struct_int32_char8 +xtypes_v2_primitive_test_suite_struct_int64_uint8 +xtypes_v2_primitive_test_suite_struct_int64_uint16 +xtypes_v2_primitive_test_suite_struct_int64_uint32 +xtypes_v2_primitive_test_suite_struct_int64_uint64 +xtypes_v2_primitive_test_suite_struct_int64_int8 +xtypes_v2_primitive_test_suite_struct_int64_int16 +xtypes_v2_primitive_test_suite_struct_int64_int32 +xtypes_v2_primitive_test_suite_struct_int64_float32 +xtypes_v2_primitive_test_suite_struct_int64_float64 +xtypes_v2_primitive_test_suite_struct_int64_float128 +xtypes_v2_primitive_test_suite_struct_int64_byte +xtypes_v2_primitive_test_suite_struct_int64_char8 +xtypes_v2_primitive_test_suite_struct_float32_uint8 +xtypes_v2_primitive_test_suite_struct_float32_uint16 +xtypes_v2_primitive_test_suite_struct_float32_uint32 +xtypes_v2_primitive_test_suite_struct_float32_uint64 +xtypes_v2_primitive_test_suite_struct_float32_int8 +xtypes_v2_primitive_test_suite_struct_float32_int16 +xtypes_v2_primitive_test_suite_struct_float32_int32 +xtypes_v2_primitive_test_suite_struct_float32_int64 +xtypes_v2_primitive_test_suite_struct_float32_float64 +xtypes_v2_primitive_test_suite_struct_float32_float128 +xtypes_v2_primitive_test_suite_struct_float32_byte +xtypes_v2_primitive_test_suite_struct_float32_char8 +xtypes_v2_primitive_test_suite_struct_float64_uint8 +xtypes_v2_primitive_test_suite_struct_float64_uint16 +xtypes_v2_primitive_test_suite_struct_float64_uint32 +xtypes_v2_primitive_test_suite_struct_float64_uint64 +xtypes_v2_primitive_test_suite_struct_float64_int8 +xtypes_v2_primitive_test_suite_struct_float64_int16 +xtypes_v2_primitive_test_suite_struct_float64_int32 +xtypes_v2_primitive_test_suite_struct_float64_int64 +xtypes_v2_primitive_test_suite_struct_float64_float32 +xtypes_v2_primitive_test_suite_struct_float64_float128 +xtypes_v2_primitive_test_suite_struct_float64_byte +xtypes_v2_primitive_test_suite_struct_float64_char8 +xtypes_v2_primitive_test_suite_struct_float128_uint8 +xtypes_v2_primitive_test_suite_struct_float128_uint16 +xtypes_v2_primitive_test_suite_struct_float128_uint32 +xtypes_v2_primitive_test_suite_struct_float128_uint64 +xtypes_v2_primitive_test_suite_struct_float128_int8 +xtypes_v2_primitive_test_suite_struct_float128_int16 +xtypes_v2_primitive_test_suite_struct_float128_int32 +xtypes_v2_primitive_test_suite_struct_float128_int64 +xtypes_v2_primitive_test_suite_struct_float128_float32 +xtypes_v2_primitive_test_suite_struct_float128_float64 +xtypes_v2_primitive_test_suite_struct_float128_float128 +xtypes_v2_primitive_test_suite_struct_float128_byte +xtypes_v2_primitive_test_suite_struct_float128_char8 +xtypes_v2_primitive_test_suite_struct_byte_uint8 +xtypes_v2_primitive_test_suite_struct_byte_uint16 +xtypes_v2_primitive_test_suite_struct_byte_uint32 +xtypes_v2_primitive_test_suite_struct_byte_uint64 +xtypes_v2_primitive_test_suite_struct_byte_int8 +xtypes_v2_primitive_test_suite_struct_byte_int16 +xtypes_v2_primitive_test_suite_struct_byte_int32 +xtypes_v2_primitive_test_suite_struct_byte_int64 +xtypes_v2_primitive_test_suite_struct_byte_float32 +xtypes_v2_primitive_test_suite_struct_byte_float64 +xtypes_v2_primitive_test_suite_struct_byte_float128 +xtypes_v2_primitive_test_suite_struct_byte_char8 +xtypes_v2_primitive_test_suite_struct_char8_uint8 +xtypes_v2_primitive_test_suite_struct_char8_uint16 +xtypes_v2_primitive_test_suite_struct_char8_uint32 +xtypes_v2_primitive_test_suite_struct_char8_uint64 +xtypes_v2_primitive_test_suite_struct_char8_int8 +xtypes_v2_primitive_test_suite_struct_char8_int16 +xtypes_v2_primitive_test_suite_struct_char8_int32 +xtypes_v2_primitive_test_suite_struct_char8_int64 +xtypes_v2_primitive_test_suite_struct_char8_float32 +xtypes_v2_primitive_test_suite_struct_char8_float64 +xtypes_v2_primitive_test_suite_struct_char8_float128 +xtypes_v2_primitive_test_suite_struct_char8_byte +xtypes_v2_sequence_test_suite_seq(int32)_seq(int32,10) +xtypes_v2_sequence_test_suite_seq(int32)_seq(int32,10)_check_bounds +xtypes_v2_sequence_test_suite_seq(int32,20)_seq(int32,10) +xtypes_v2_sequence_test_suite_seq(int32,20)_seq(int32,10)_check_bounds +xtypes_v2_sequence_test_suite_seq(int32,10)_seq(int32,20) +xtypes_v2_sequence_test_suite_seq(int32,10)_seq(int32,20)_check_bounds +xtypes_v2_sequence_test_suite_seq(str10,10)_seq(str20,10) +xtypes_v2_sequence_test_suite_seq(str20,10)_seq(str10,10) +xtypes_v2_sequence_test_suite_seq(str20,10)_seq(str10,10)_check +xtypes_v2_sequence_test_suite_seq(enum1)_seq(enum2) +xtypes_v2_sequence_test_suite_seq(SFinal,10)_seq(SFinalAlt,10) +xtypes_v2_sequence_test_suite_seq(SAppendable,10)_seq(SAppendableAlt,10) +xtypes_v2_sequence_test_suite_seq(SMutable,10)_seq(SMutableAlt,10) +xtypes_v2_string_test_suite_string_string10 +xtypes_v2_string_test_suite_string_string10_check +xtypes_v2_string_test_suite_string10_string20_check +xtypes_v2_string_test_suite_string20_string10_check +xtypes_v2_string_test_suite_wstring_wstring +xtypes_v2_string_test_suite_wstring_wstring10 +xtypes_v2_string_test_suite_wstring_wstring10_check +xtypes_v2_string_test_suite_wstring10_wstring20_check +xtypes_v2_string_test_suite_wstring20_wstring10_check +xtypes_v2_struct_test_suite_primitives_struct_mutable +xtypes_v2_struct_test_suite_struct_final_appendable +xtypes_v2_struct_test_suite_struct_final_mutable +xtypes_v2_struct_test_suite_struct_appendable_final +xtypes_v2_struct_test_suite_struct_appendable_mutable +xtypes_v2_struct_test_suite_struct_mutable_final +xtypes_v2_struct_test_suite_struct_mutable_appendable +xtypes_v2_struct_test_suite_struct_different_ids_ok +xtypes_v2_struct_test_suite_struct_different_ids +xtypes_v2_struct_test_suite_struct_different_names_ok +xtypes_v2_struct_test_suite_struct_different_names +xtypes_v2_struct_test_suite_struct_no_common_ids +xtypes_v2_struct_test_suite_struct_members_assignable_1 +xtypes_v2_struct_test_suite_struct_mustUnderstand_1 +xtypes_v2_struct_test_suite_struct_mustUnderstand_2 +xtypes_v2_struct_test_suite_struct_key_1 +xtypes_v2_struct_test_suite_struct_key_2 +xtypes_v2_struct_test_suite_struct_key_string_1 +xtypes_v2_struct_test_suite_struct_key_string_3 +xtypes_v2_struct_test_suite_struct_key_enum_1 +xtypes_v2_struct_test_suite_struct_key_enum_2 +xtypes_v2_struct_test_suite_struct_key_seq_1 +xtypes_v2_struct_test_suite_struct_key_seq_2 +xtypes_v2_struct_test_suite_struct_key_struct_1 +xtypes_v2_struct_test_suite_struct_key_struct_2 +xtypes_v2_struct_test_suite_struct_key_union_1 +xtypes_v2_struct_test_suite_struct_key_union_2 +xtypes_v2_type_consistency_test_suite_tc_force_type_validation_1 +xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_1 +xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_2 +xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_3 +xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_1 +xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_2 +xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_3 +xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_4 +xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_5 +xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_6 +xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_7 +xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_1 +xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_2 +xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_3 +xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_4 +xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_5 +xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_6 +xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_7 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_1 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_2 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_3 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_4 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_5 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_6 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_7 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_8 +xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_9 +xtypes_v2_union_test_suite_union_primitives_final +xtypes_v2_union_test_suite_union_primitives_appendable +xtypes_v2_union_test_suite_union_primitives_mutable +xtypes_v2_union_test_suite_union_final_appendable +xtypes_v2_union_test_suite_union_final_mutable +xtypes_v2_union_test_suite_union_appendable_mutable +xtypes_v2_union_test_suite_union_different_ids_1 +xtypes_v2_union_test_suite_union_different_ids_2 +xtypes_v2_union_test_suite_union_different_names_1 +xtypes_v2_union_test_suite_union_different_names_2 +xtypes_v2_union_test_suite_union_different_order_1 +xtypes_v2_union_test_suite_union_different_order_2 +xtypes_v2_union_test_suite_union_int16_int32 +xtypes_v2_union_test_suite_union_int16_int32_default +xtypes_v2_union_test_suite_union_int32_int32_default +xtypes_v2_union_test_suite_union_int32_default_int16 +xtypes_v2_union_test_suite_union_int32_default_int32 +xtypes_v2_union_test_suite_union_int32_default_int16_default +xtypes_v2_union_test_suite_union_int32_default_int32_default +xtypes_v2_union_test_suite_union_final_5_vs_6 +xtypes_v2_union_test_suite_union_final_6_vs_5 +xtypes_v2_union_test_suite_union_final_one_default_1 +xtypes_v2_union_test_suite_union_final_one_default_2 +xtypes_v2_union_test_suite_union_appendable_one_common_1 +xtypes_v2_union_test_suite_union_appendable_one_common_2 +xtypes_v2_union_test_suite_union_appendable_no_common_1 +xtypes_v2_union_test_suite_union_appendable_no_common_2 +xtypes_v2_union_test_suite_union_appendable_no_common_w_default +xtypes_v2_union_test_suite_union_mutable_one_common +xtypes_v2_union_test_suite_union_mutable_no_common +xtypes_v2_union_test_suite_union_mutable_no_common_w_default From 7ff5e73c1a9f0ebcce9c39d8662aba93d560fa2a Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 22 May 2026 13:06:56 +0200 Subject: [PATCH 7/7] Fix typo --- .gitignore | 2 +- CLA/CLA_S2E_Software_Systems.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 89c445d..eadb392 100644 --- a/.gitignore +++ b/.gitignore @@ -80,4 +80,4 @@ test_description.rst doc/test_description.rst # Rust target files -target/ \ No newline at end of file +target/ diff --git a/CLA/CLA_S2E_Software_Systems.md b/CLA/CLA_S2E_Software_Systems.md index d71961c..3bc747e 100644 --- a/CLA/CLA_S2E_Software_Systems.md +++ b/CLA/CLA_S2E_Software_Systems.md @@ -57,4 +57,4 @@ Name: Stefan Kimmer Title: Director -Date: Mai 22, 2026 +Date: May 22, 2026