use anyhow::anyhow;
use serde::{Deserialize, Serialize};
use std::str::FromStr;
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub enum RmwQosPolicyKind {
Invalid = 1 << 0,
Durability = 1 << 1,
Deadline = 1 << 2,
Liveliness = 1 << 3,
Reliability = 1 << 4,
History = 1 << 5,
Lifespan = 1 << 6,
Depth = 1 << 7,
LivelinessLeaseDuration = 1 << 8,
AvoidRosNamespaceConventions = 1 << 9,
}
impl FromStr for RmwQosPolicyKind {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"durability" => Ok(RmwQosPolicyKind::Durability),
"deadline" => Ok(RmwQosPolicyKind::Deadline),
"liveliness" => Ok(RmwQosPolicyKind::Liveliness),
"reliability" => Ok(RmwQosPolicyKind::Reliability),
"history" => Ok(RmwQosPolicyKind::History),
"lifespan" => Ok(RmwQosPolicyKind::Lifespan),
"depth" => Ok(RmwQosPolicyKind::Depth),
"liveliness_lease_duration" => Ok(RmwQosPolicyKind::LivelinessLeaseDuration),
"avoid_ros_namespace_conventions" => Ok(RmwQosPolicyKind::AvoidRosNamespaceConventions),
"invalid" => Ok(RmwQosPolicyKind::Invalid),
_ => {
if let Ok(value) = s.parse::<i32>() {
match value {
1 => Ok(RmwQosPolicyKind::Invalid),
2 => Ok(RmwQosPolicyKind::Durability),
4 => Ok(RmwQosPolicyKind::Deadline),
8 => Ok(RmwQosPolicyKind::Liveliness),
16 => Ok(RmwQosPolicyKind::Reliability),
32 => Ok(RmwQosPolicyKind::History),
64 => Ok(RmwQosPolicyKind::Lifespan),
128 => Ok(RmwQosPolicyKind::Depth),
256 => Ok(RmwQosPolicyKind::LivelinessLeaseDuration),
512 => Ok(RmwQosPolicyKind::AvoidRosNamespaceConventions),
_ => Err(anyhow!("Unknown number for Policy kind")),
}
} else {
Err(anyhow!("Unknown encoding format for Policy kind"))
}
}
}
}
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub enum RmwQosReliabilityPolicy {
SystemDefault = 0,
Reliable = 1,
BestEffort = 2,
Unknown = 3,
#[cfg(not(feature = "humble"))]
BestAvailable = 4,
}
impl FromStr for RmwQosReliabilityPolicy {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"system_default" => Ok(RmwQosReliabilityPolicy::SystemDefault),
"reliable" => Ok(RmwQosReliabilityPolicy::Reliable),
"best_effort" => Ok(RmwQosReliabilityPolicy::BestEffort),
#[cfg(not(feature = "humble"))]
"best_available" => Ok(RmwQosReliabilityPolicy::BestAvailable),
"unknown" => Ok(RmwQosReliabilityPolicy::Unknown),
_ => {
if let Ok(value) = s.parse::<i32>() {
match value {
0 => Ok(RmwQosReliabilityPolicy::SystemDefault),
1 => Ok(RmwQosReliabilityPolicy::Reliable),
2 => Ok(RmwQosReliabilityPolicy::BestEffort),
3 => Ok(RmwQosReliabilityPolicy::Unknown),
#[cfg(not(feature = "humble"))]
4 => Ok(RmwQosReliabilityPolicy::BestAvailable),
_ => Err(anyhow!("Unknown number for Reliability kind")),
}
} else {
Err(anyhow!("Unknown encoding format for Reliability kind"))
}
}
}
}
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub enum RmwQosHistoryPolicy {
SystemDefault = 0,
KeepLast = 1,
KeepAll = 2,
Unknown = 3,
}
impl FromStr for RmwQosHistoryPolicy {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"system_default" => Ok(RmwQosHistoryPolicy::SystemDefault),
"keep_last" => Ok(RmwQosHistoryPolicy::KeepLast),
"keep_all" => Ok(RmwQosHistoryPolicy::KeepAll),
"unknown" => Ok(RmwQosHistoryPolicy::Unknown),
_ => {
if let Ok(value) = s.parse::<i32>() {
match value {
0 => Ok(RmwQosHistoryPolicy::SystemDefault),
1 => Ok(RmwQosHistoryPolicy::KeepLast),
2 => Ok(RmwQosHistoryPolicy::KeepAll),
3 => Ok(RmwQosHistoryPolicy::Unknown),
_ => Err(anyhow!("Unknown number for History kind")),
}
} else {
Err(anyhow!("Unknown encoding format for History kind"))
}
}
}
}
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub enum RmwQosDurabilityPolicy {
SystemDefault = 0,
TransientLocal = 1,
Volatile = 2,
Unknown = 3,
#[cfg(not(feature = "humble"))]
BestAvailable = 4,
}
impl FromStr for RmwQosDurabilityPolicy {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"system_default" => Ok(RmwQosDurabilityPolicy::SystemDefault),
"transient_local" => Ok(RmwQosDurabilityPolicy::TransientLocal),
"volatile" => Ok(RmwQosDurabilityPolicy::Volatile),
#[cfg(not(feature = "humble"))]
"best_available" => Ok(RmwQosDurabilityPolicy::BestAvailable),
"unknown" => Ok(RmwQosDurabilityPolicy::Unknown),
_ => {
if let Ok(value) = s.parse::<i32>() {
match value {
0 => Ok(RmwQosDurabilityPolicy::SystemDefault),
1 => Ok(RmwQosDurabilityPolicy::TransientLocal),
2 => Ok(RmwQosDurabilityPolicy::Volatile),
3 => Ok(RmwQosDurabilityPolicy::Unknown),
#[cfg(not(feature = "humble"))]
4 => Ok(RmwQosDurabilityPolicy::BestAvailable),
_ => Err(anyhow!("Unknown number for Durability kind")),
}
} else {
Err(anyhow!("Unknown encoding format for Durability kind"))
}
}
}
}
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
pub enum RmwQosLivelinessPolicy {
SystemDefault = 0,
Automatic = 1,
ManualByNode = 2,
ManualByTopic = 3,
Unknown = 4,
#[cfg(not(feature = "humble"))]
BestAvailable = 5,
}
impl FromStr for RmwQosLivelinessPolicy {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"system_default" => Ok(RmwQosLivelinessPolicy::SystemDefault),
"automatic" => Ok(RmwQosLivelinessPolicy::Automatic),
"manual_by_node" => Ok(RmwQosLivelinessPolicy::ManualByNode),
"manual_by_topic" => Ok(RmwQosLivelinessPolicy::ManualByTopic),
#[cfg(not(feature = "humble"))]
"best_available" => Ok(RmwQosLivelinessPolicy::BestAvailable),
"unknown" => Ok(RmwQosLivelinessPolicy::Unknown),
_ => {
if let Ok(value) = s.parse::<i32>() {
match value {
0 => Ok(RmwQosLivelinessPolicy::SystemDefault),
1 => Ok(RmwQosLivelinessPolicy::Automatic),
2 => Ok(RmwQosLivelinessPolicy::ManualByNode),
3 => Ok(RmwQosLivelinessPolicy::ManualByTopic),
4 => Ok(RmwQosLivelinessPolicy::Unknown),
#[cfg(not(feature = "humble"))]
5 => Ok(RmwQosLivelinessPolicy::BestAvailable),
_ => Err(anyhow!("Unknown number for Liveliness kind")),
}
} else {
Err(anyhow!("Unknown encoding format for Liveliness kind"))
}
}
}
}
}