use serde::{Deserialize, Serialize};
use std::cmp::Ordering;
#[derive(Eq, Debug, Clone, Copy, Serialize, Deserialize)]
pub enum LayerID {
InputLayer,
HiddenLayer(usize),
OutputLayer,
}
impl LayerID {
pub fn is_hidden(&self) -> bool {
matches!(self, LayerID::HiddenLayer(_))
}
}
impl Ord for LayerID {
fn cmp(&self, other: &Self) -> Ordering {
match (self, other) {
(LayerID::InputLayer, LayerID::InputLayer) => Ordering::Equal,
(LayerID::InputLayer, _) => Ordering::Less,
(LayerID::OutputLayer, LayerID::OutputLayer) => Ordering::Equal,
(LayerID::OutputLayer, _) => Ordering::Greater,
(LayerID::HiddenLayer(x), LayerID::HiddenLayer(y)) => x.cmp(y),
(_, LayerID::InputLayer) => Ordering::Greater,
(_, LayerID::OutputLayer) => Ordering::Less,
}
}
}
impl PartialEq for LayerID {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(LayerID::InputLayer, LayerID::InputLayer) => true,
(LayerID::OutputLayer, LayerID::OutputLayer) => true,
(LayerID::HiddenLayer(x), LayerID::HiddenLayer(y)) => x == y,
_ => false,
}
}
}
impl PartialOrd for LayerID {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}