use smol_str::SmolStr;
#[cfg_attr(
feature = "serde",
derive(serde::Serialize, serde::Deserialize),
serde(default)
)]
#[cfg_attr(
feature = "quickcheck",
derive(::quickcheck_richderive::Arbitrary),
quickcheck(arbitrary = "crate::quickcheck_helpers::composite::channel_spec")
)]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ChannelSpec {
index: u32,
raw_id: u32,
label: SmolStr,
}
impl Default for ChannelSpec {
#[cfg_attr(not(tarpaulin), inline(always))]
fn default() -> Self {
Self::new(0, 0)
}
}
impl ChannelSpec {
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn new(index: u32, raw_id: u32) -> Self {
Self {
index,
raw_id,
label: SmolStr::new_inline(""),
}
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn index(&self) -> u32 {
self.index
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn raw_id(&self) -> u32 {
self.raw_id
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn label(&self) -> &str {
self.label.as_str()
}
#[must_use]
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn with_index(mut self, v: u32) -> Self {
self.index = v;
self
}
#[must_use]
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn with_raw_id(mut self, v: u32) -> Self {
self.raw_id = v;
self
}
#[must_use]
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn with_label(mut self, v: impl Into<SmolStr>) -> Self {
self.label = v.into();
self
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn set_index(&mut self, v: u32) -> &mut Self {
self.index = v;
self
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub const fn set_raw_id(&mut self, v: u32) -> &mut Self {
self.raw_id = v;
self
}
#[cfg_attr(not(tarpaulin), inline(always))]
pub fn set_label(&mut self, v: impl Into<SmolStr>) -> &mut Self {
self.label = v.into();
self
}
}
#[cfg(test)]
mod tests;