use derive_more::*;
use serde::{Deserialize, Serialize};
use std::cmp::{Ordering, PartialEq, PartialOrd};
use std::convert::TryFrom;
use std::fmt::Debug;
use std::num::NonZeroU32;
#[derive(Debug, Ord, PartialOrd, PartialEq, Eq, Hash, Serialize, Deserialize, Copy, Clone)]
pub enum Language {
Unknown,
EN,
B5,
GB,
FR,
DE,
IT,
ES,
PT,
JA,
}
impl Language {
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_unknown(&self) -> bool {
*self == Language::Unknown
}
}
impl Default for Language {
fn default() -> Self {
Language::Unknown
}
}
#[derive(Debug, Ord, PartialOrd, PartialEq, Eq, Hash, Serialize, Deserialize, Copy, Clone)]
pub enum OpMode {
Unknown,
Manual,
SemiAutomatic,
Automatic,
Others,
Offline,
}
impl OpMode {
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_unknown(&self) -> bool {
*self == OpMode::Unknown
}
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_offline(&self) -> bool {
*self == OpMode::Offline
}
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_online(&self) -> bool {
match self {
OpMode::Unknown | OpMode::Offline => false,
_ => true,
}
}
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_producing(&self) -> bool {
match self {
OpMode::SemiAutomatic | OpMode::Automatic => true,
_ => false,
}
}
}
impl Default for OpMode {
fn default() -> Self {
OpMode::Unknown
}
}
#[derive(Debug, Ord, PartialOrd, PartialEq, Eq, Hash, Serialize, Deserialize, Copy, Clone)]
pub enum JobMode {
Unknown,
ID01,
ID02,
ID03,
ID04,
ID05,
ID06,
ID07,
ID08,
ID09,
ID10,
ID11,
ID12,
ID13,
ID14,
ID15,
Offline,
}
impl JobMode {
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_unknown(&self) -> bool {
*self == JobMode::Unknown
}
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_offline(&self) -> bool {
*self == JobMode::Offline
}
#[allow(clippy::trivially_copy_pass_by_ref)]
pub fn is_online(&self) -> bool {
match self {
JobMode::Unknown | JobMode::Offline => false,
_ => true,
}
}
}
impl Default for JobMode {
fn default() -> Self {
JobMode::Unknown
}
}
#[derive(
Display,
Copy,
Clone,
Ord,
PartialOrd,
Eq,
PartialEq,
Hash,
From,
Into,
FromStr,
Serialize,
Deserialize,
)]
pub struct ID(NonZeroU32);
impl ID {
pub fn new(value: u32) -> std::result::Result<Self, &'static str> {
Self::try_from(value)
}
pub fn from_u32(value: u32) -> Self {
Self::try_from(value).unwrap()
}
}
impl Debug for ID {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
Debug::fmt(&self.0, f)
}
}
impl TryFrom<u32> for ID {
type Error = &'static str;
fn try_from(value: u32) -> Result<Self, Self::Error> {
NonZeroU32::new(value).map(Self).ok_or("ID value cannot be zero.")
}
}
impl From<ID> for u32 {
fn from(id: ID) -> Self {
id.0.get()
}
}
impl AsRef<NonZeroU32> for ID {
fn as_ref(&self) -> &NonZeroU32 {
&self.0
}
}
impl AsMut<NonZeroU32> for ID {
fn as_mut(&mut self) -> &mut NonZeroU32 {
&mut self.0
}
}
impl PartialEq<u32> for ID {
fn eq(&self, other: &u32) -> bool {
self.0.get() == *other
}
}
impl PartialEq<ID> for u32 {
fn eq(&self, other: &ID) -> bool {
other.0.get() == *self
}
}
impl PartialOrd<u32> for ID {
fn partial_cmp(&self, other: &u32) -> Option<Ordering> {
PartialOrd::partial_cmp(&self.0.get(), other)
}
}
impl PartialOrd<ID> for u32 {
fn partial_cmp(&self, other: &ID) -> Option<Ordering> {
PartialOrd::partial_cmp(self, &other.0.get())
}
}