Files
rtkit-client-rs/src/types.rs
h7x4 046628a3a8
Some checks failed
Build and test / check (push) Has been cancelled
Build and test / build (push) Has been cancelled
Build and test / docs (push) Has been cancelled
Wrap ints in tiny types, implement corresponding functions for nice level
2026-01-02 22:13:10 +09:00

125 lines
2.5 KiB
Rust

use std::ops::Deref;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Priority(u32);
impl Priority {
pub const MIN: u32 = 0;
pub const MAX: u32 = 99;
/// Creates a new Priority, ensuring it is within valid bounds (0-99).
pub fn new(value: u32) -> Option<Self> {
if value <= Self::MAX {
Some(Priority(value))
} else {
None
}
}
/// Returns the underlying priority value.
pub fn value(&self) -> u32 {
self.0
}
}
impl From<Priority> for u32 {
fn from(priority: Priority) -> Self {
priority.0
}
}
impl TryFrom<u32> for Priority {
type Error = &'static str;
fn try_from(value: u32) -> Result<Self, Self::Error> {
Priority::new(value).ok_or("Priority must be between 0 and 99")
}
}
impl TryFrom<i32> for Priority {
type Error = &'static str;
fn try_from(value: i32) -> Result<Self, Self::Error> {
if value < 0 {
return Err("Priority must be between 0 and 99");
}
Priority::new(value as u32).ok_or("Priority must be between 0 and 99")
}
}
impl Default for Priority {
fn default() -> Self {
Priority(99)
}
}
impl AsRef<u32> for Priority {
fn as_ref(&self) -> &u32 {
&self.0
}
}
impl Deref for Priority {
type Target = u32;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NiceLevel(i32);
impl NiceLevel {
pub const MIN: i32 = -20;
pub const MAX: i32 = 19;
/// Creates a new NiceLevel, ensuring it is within valid bounds (-20 to 19).
pub fn new(value: i32) -> Option<Self> {
if (Self::MIN..=Self::MAX).contains(&value) {
Some(NiceLevel(value))
} else {
None
}
}
/// Returns the underlying nice level value.
pub fn value(&self) -> i32 {
self.0
}
}
impl From<NiceLevel> for i32 {
fn from(nice_level: NiceLevel) -> Self {
nice_level.0
}
}
impl TryFrom<i32> for NiceLevel {
type Error = &'static str;
fn try_from(value: i32) -> Result<Self, Self::Error> {
NiceLevel::new(value).ok_or("NiceLevel must be between -20 and 19")
}
}
impl Default for NiceLevel {
fn default() -> Self {
NiceLevel(Self::MIN)
}
}
impl AsRef<i32> for NiceLevel {
fn as_ref(&self) -> &i32 {
&self.0
}
}
impl Deref for NiceLevel {
type Target = i32;
fn deref(&self) -> &Self::Target {
&self.0
}
}