#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct OptionId(usize);
impl OptionId {
#[must_use]
pub fn new(id: usize) -> Self {
OptionId(id)
}
#[must_use]
pub(crate) fn index(self) -> usize {
self.0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct ItemId(usize);
impl ItemId {
#[must_use]
pub fn new(id: usize) -> Self {
ItemId(id)
}
#[must_use]
pub(crate) fn index(self) -> usize {
self.0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Color(usize);
impl Color {
#[must_use]
pub fn new(id: usize) -> Self {
Color(id)
}
}
#[derive(Clone, Copy)]
pub struct ColoredItem {
item_id: ItemId,
color: Option<Color>,
}
impl ColoredItem {
#[must_use]
pub fn new(item_id: ItemId) -> Self {
ColoredItem {
item_id,
color: None,
}
}
#[must_use]
pub fn item(&self) -> ItemId {
self.item_id
}
#[must_use]
pub fn color(&self) -> Option<Color> {
self.color
}
#[must_use]
pub fn with_color(item_id: ItemId, color: Color) -> Self {
ColoredItem {
item_id,
color: Some(color),
}
}
}