rustdds 0.11.8

Native Rust DDS implementation with RTPS
Documentation
use crate::{
  dds::qos::{
    policy::{
      Deadline, DestinationOrder, Durability, History, LatencyBudget, Lifespan, Liveliness,
      Ownership, Reliability,
    },
    QosPolicies,
  },
  structure::duration::Duration,
};

pub struct ROSDiscoveryTopic {}

impl ROSDiscoveryTopic {
  const QOS: QosPolicies = QosPolicies {
    durability: Some(Durability::TransientLocal),
    presentation: None,
    deadline: Some(Deadline(Duration::INFINITE)),
    latency_budget: Some(LatencyBudget {
      duration: Duration::ZERO,
    }),
    ownership: Some(Ownership::Shared),
    liveliness: Some(Liveliness::Automatic {
      lease_duration: Duration::INFINITE,
    }),
    time_based_filter: None,
    reliability: Some(Reliability::Reliable {
      max_blocking_time: Duration::ZERO,
    }),
    destination_order: Some(DestinationOrder::ByReceptionTimestamp),
    history: Some(History::KeepLast { depth: 1 }),
    resource_limits: None,
    lifespan: Some(Lifespan {
      duration: Duration::INFINITE,
    }),
    #[cfg(feature = "security")]
    property: None,
  };

  const TOPIC_NAME: &'static str = "ros_discovery_info";
  const TYPE_NAME: &'static str = "rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_";

  pub fn topic_name() -> &'static str {
    Self::TOPIC_NAME
  }

  pub fn type_name() -> &'static str {
    Self::TYPE_NAME
  }

  pub const fn qos() -> QosPolicies {
    Self::QOS
  }
}

pub struct ParameterEventsTopic {}

impl ParameterEventsTopic {
  const QOS: QosPolicies = QosPolicies {
    durability: Some(Durability::TransientLocal),
    presentation: None,
    deadline: None,
    latency_budget: None,
    ownership: None,
    liveliness: None,
    time_based_filter: None,
    reliability: Some(Reliability::Reliable {
      max_blocking_time: Duration::ZERO,
    }),
    destination_order: None,
    history: Some(History::KeepLast { depth: 1 }),
    resource_limits: None,
    lifespan: None,
    #[cfg(feature = "security")]
    property: None,
  };

  const TOPIC_NAME: &'static str = "rt/parameter_events";
  const TYPE_NAME: &'static str = "rcl_interfaces::msg::dds_::ParameterEvent_";

  pub fn topic_name() -> &'static str {
    Self::TOPIC_NAME
  }

  pub fn type_name() -> &'static str {
    Self::TYPE_NAME
  }

  pub fn qos() -> QosPolicies {
    Self::QOS
  }
}

pub struct RosOutTopic {}

impl RosOutTopic {
  const QOS: QosPolicies = QosPolicies {
    durability: Some(Durability::TransientLocal),
    presentation: None,
    deadline: Some(Deadline(Duration::INFINITE)),
    latency_budget: Some(LatencyBudget {
      duration: Duration::ZERO,
    }),
    ownership: Some(Ownership::Shared),
    liveliness: Some(Liveliness::Automatic {
      lease_duration: Duration::INFINITE,
    }),
    time_based_filter: None,
    reliability: Some(Reliability::Reliable {
      max_blocking_time: Duration::ZERO,
    }),
    destination_order: Some(DestinationOrder::ByReceptionTimestamp),
    history: Some(History::KeepLast { depth: 1 }),
    resource_limits: None,
    lifespan: Some(Lifespan {
      duration: Duration::from_secs(10),
    }),
    #[cfg(feature = "security")]
    property: None,
  };

  const TOPIC_NAME: &'static str = "rt/rosout";
  const TYPE_NAME: &'static str = "rcl_interfaces::msg::dds_::Log_";

  pub fn topic_name() -> &'static str {
    Self::TOPIC_NAME
  }

  pub fn type_name() -> &'static str {
    Self::TYPE_NAME
  }

  pub fn qos() -> QosPolicies {
    Self::QOS
  }
}