rustdds 0.14.0

Native Rust DDS implementation with RTPS
Documentation
[package]
name = "rustdds"
version = "0.14.0" 
authors = ["Juhana Helovuo <juhana.helovuo@atostek.com>",
  "Oiva Moisio <oiva.moisio@atostek.com>",
  "Miska Melkinen <miska.melkinen@atostek.com>",
  "Lauri Eneh <lauri.eneh@atostek.com>",
  "Olli Huopio <olli.huopio@atostek.com>", 
  "Selim Virtanen <selim.virtanen@atostek.com>"
]
description = "Native Rust DDS implementation with RTPS"
readme = "README.md"
keywords = ["network","protocol","dds","rtps"]
license = "Apache-2.0"
edition = "2021"
rust-version = "1.88.0"
homepage = "https://atostek.com/en/products/rustdds/"  
repository = "https://github.com/Atostek/RustDDS"
categories = ["network-programming", "science::robotics"] 
# the science-robotics category is because of ROS2

# Optimized build that still carries debug info (and, on macOS, a packed .dSYM)
# so sampling profilers (xctrace / Instruments Time Profiler, samply, perf) can
# symbolicate the hot path. Build the perf examples with:
#   cargo build --profile profiling --example ddsperf --example shape_main
# Binaries land in target/profiling/examples/. Used by scripts/perf_profile.sh.
[profile.profiling]
inherits = "release"
debug = true
split-debuginfo = "packed"
strip = false

[features]
# Feature "mio_08" exposes integration with the "mio" crate version 0.8.x:
# DataReaders/DataWriters implement `mio_08::event::Source` so they can be
# registered directly with a mio-0.8 `Poll`. When disabled, RustDDS still
# supports synchronous polling via mio-0.6 (`Evented`) and asynchronous polling
# via `futures::Stream`. Disabling this feature drops the `mio` (0.8) and
# `socketpair` dependencies (and their transitive deps).
# NOTE: this feature is NOT enabled by default.
mio_08 = ["dep:mio_08", "dep:socketpair"]

# Feature "security" implements the OMG "DDS Security" specification v 1.1
# It adds a large amount of new code and dependencies.
security = [
  "dep:serde-xml-rs", "dep:glob", "dep:mailparse", 
  "dep:x509-certificate", "dep:x509-cert", 
  "dep:tempfile", "dep:newline-converter", 
  "dep:ring", "dep:cms", "dep:der", 
  "dep:bcder",
  "dep:openssl", "dep:cryptoki"
  ]

# If feature "build_openssl" is enabled (along with feature "security"),
# a local copy of OpenSSL will be built.
# Otherwise, we try to use the system installation of OpenSSL.
build_openssl = ["openssl?/vendored"]

[dependencies]
mio_06 = { package = "mio" , version ="^0.6.23" } 
mio-extras = "2.0.6"

mio_08 = { package = "mio" , version ="0.8.5", features = ["net", "os-poll"], optional = true } 
socketpair = { version = "0.19", optional = true }

bit-vec = "0.8.0"
speedy = "0.8.0"
log = "0.4.11"
num-traits = "0.2"
num-derive = "0.4.2"
serde = { version = "1.0", features = ["derive"] }
serde_repr="0.1"
byteorder = { version = "1.3", features = ["i128"] }
rand = "0.9.0"
chrono = { version = "0.4", features = ["serde"] }
enumflags2 = { version = "0.7.7", features = ["serde"] }
pastey = "0.2"
md5 = "0.8.0"
socket2 = { version = "0.6", features = ["all"] }
bytes = "1.11"
static_assertions = "1.1"
thiserror = "2.0.9"
# cdr-encoding = { path = "../cdr-encoding", version="0.11" }
cdr-encoding = { version="0.11" }
cdr-encoding-size = { version="^0.5" }
futures = "0.3"
# Cross-platform network-interface enumeration (index, IPv4 subnet, MTU,
# loopback/multicast flags) used for per-peer path-MTU resolution and locator
# selection. `default-features = false` drops the `gateway` feature (default
# route / gateway lookup, which pulls in netlink on Linux); we only need
# `get_interfaces()`.
netdev = { version = "0.45", default-features = false }

# For DDS Security:
serde-xml-rs = { version = "0.6" , optional = true } # for reading spec-mandated XML config files
glob = { version = "0.3" , optional = true } # for reading spec-mandated XML config files
mailparse = { version = "0.16" , optional = true } # for reading S/MIME-encoded (XML) config files
x509-certificate = { version = "0.24" , optional = true } # for configuration certificates
x509-cert = { version = "0.2" , optional = true }
tempfile = { version = "3" , optional = true } # for calling external openssl command. Remove when no longer used.
newline-converter = { version = "0.3" , optional = true } # helper for handling S/MIME
ring = { version = "0.17" , optional = true } # Cryptographic primitives
cms = { version = "0.2" , optional = true } # for ASN.1 parsing
der = { version = "0.7" , features = ["oid"], optional = true } # ASN.1 DER encoding (re-exports const-oid ObjectIdentifier via `der::asn1`)
bcder = { version = "0.7" , optional = true } # ASN.1 DER encoding
openssl = { version = "0.10.70", optional = true }
cryptoki = { version = "0.10", optional = true }
[target.'cfg(unix)'.dependencies]
# Used to capture the receiving interface of incoming UDP datagrams via
# recvmsg()/IP_PKTINFO for interface-aware transmit-locator selection.
nix = { version = "0.29", features = ["net", "socket", "uio"] }

[dev-dependencies]
serde_repr = {version = "0.1" }
log = "0.4"
log4rs = "1.4"
test-case = "3.1.0"
env_logger = "0.11"
test-log = "0.2.20"
hex-literal = "1.0"
anyhow = "1.0" # for test cases

# ros_visualizer
crossterm = "0.29"
tui = { version = "0.19", default-features = false, features = ['crossterm'] }

# shapes-demo
clap = { version = "4.5", features = ["derive"] }
ctrlc = "3.1.6"

# async-shapes-demo
smol = "2.0"

async-io ="2.4" # ddsperf

[target.'cfg(unix)'.dev-dependencies]
# turle_teleop
termion = "4.0.2"


[target.'cfg(target_os = "linux")'.dev-dependencies]
procfs = "0.18" # for ddsperf

[target.'cfg(target_os = "macos")'.dev-dependencies]
libc = "0.2" # for ddsperf CPU/RSS reporting on macOS

# This example registers RustDDS entities with a mio-0.8 Poll, so it needs the
# optional "mio_08" feature (and thus the mio-0.8 crate) to build.
[[example]]
name = "shapes_demo_mio_08"
path = "examples/shapes_demo_mio_08/main.rs"
required-features = ["mio_08"]