use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Gpu {
server: String, device_number: u32, model: String, }
impl Gpu {
pub fn new(server: String, device_number: u32, model: String) -> Self {
Self {
server,
device_number,
model,
}
}
pub fn server(&self) -> &str {
&self.server
}
pub fn device_number(&self) -> u32 {
self.device_number
}
pub fn model(&self) -> &str {
&self.model
}
}
impl fmt::Display for Gpu {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"{} GPU#{} ({})",
self.server, self.device_number, self.model
)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Resource {
Gpu(Gpu),
Room {
name: String,
},
}
impl Resource {
pub fn conflicts_with(&self, other: &Resource) -> bool {
match (self, other) {
(Resource::Gpu(id1), Resource::Gpu(id2)) => id1 == id2,
(Resource::Room { name: name1 }, Resource::Room { name: name2 }) => name1 == name2,
_ => false,
}
}
}
impl fmt::Display for Resource {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Resource::Gpu(gpu) => write!(f, "{}", gpu),
Resource::Room { name } => write!(f, "部屋: {}", name),
}
}
}