use std::fmt;
use serde::{Deserialize, Serialize};
use rustdds::*;
use rustdds::dds::key::CdrEncodingSize;
#[cfg(not(feature = "pre-iron-gid"))]
pub const GID_LENGTH: usize = 16;
#[cfg(feature = "pre-iron-gid")]
pub const GID_LENGTH: usize = 24;
#[derive(
Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, CdrEncodingSize,
)]
pub struct Gid([u8; GID_LENGTH]);
impl fmt::Debug for Gid {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
for b in self.0.iter() {
write!(f, "{b:02x}")?;
}
Ok(())
}
}
impl From<GUID> for Gid {
fn from(guid: GUID) -> Self {
Gid(std::array::from_fn(|i| {
*guid.to_bytes().as_ref().get(i).unwrap_or(&0)
}))
}
}
impl From<Gid> for GUID {
fn from(gid: Gid) -> GUID {
GUID::from_bytes(std::array::from_fn(|i| gid.0[i]))
}
}
impl Key for Gid {}