use bincode::{Decode, Encode};
use serde::{Deserialize, Serialize};
pub trait Complexity {}
impl Complexity for Linked {}
impl Complexity for Linear {}
impl Complexity for SimpleLinear {}
impl Complexity for SemiAmbiguous {}
impl Complexity for UnAmbiguous {}
#[derive(
Debug,
Default,
Copy,
Clone,
PartialEq,
PartialOrd,
Ord,
Eq,
Hash,
Serialize,
Deserialize,
Encode,
Decode,
)]
pub struct Linked;
#[derive(
Debug,
Default,
Copy,
Clone,
PartialEq,
PartialOrd,
Ord,
Eq,
Hash,
Serialize,
Deserialize,
Encode,
Decode,
)]
pub struct Linear;
#[derive(
Debug,
Default,
Copy,
Clone,
PartialEq,
PartialOrd,
Ord,
Eq,
Hash,
Serialize,
Deserialize,
Encode,
Decode,
)]
pub struct SimpleLinear;
#[derive(
Debug,
Default,
Copy,
Clone,
PartialEq,
PartialOrd,
Ord,
Eq,
Hash,
Serialize,
Deserialize,
Encode,
Decode,
)]
pub struct SemiAmbiguous;
#[derive(
Debug,
Default,
Copy,
Clone,
PartialEq,
PartialOrd,
Ord,
Eq,
Hash,
Serialize,
Deserialize,
Encode,
Decode,
)]
pub struct UnAmbiguous;
pub trait AtMax<T> {}
impl<T> AtMax<T> for T {}
impl AtMax<Linked> for Linear {}
impl AtMax<Linked> for SimpleLinear {}
impl AtMax<Linked> for SemiAmbiguous {}
impl AtMax<Linked> for UnAmbiguous {}
impl AtMax<Linear> for SimpleLinear {}
impl AtMax<Linear> for SemiAmbiguous {}
impl AtMax<Linear> for UnAmbiguous {}
impl AtMax<SimpleLinear> for SemiAmbiguous {}
impl AtMax<SimpleLinear> for UnAmbiguous {}
impl AtMax<SemiAmbiguous> for UnAmbiguous {}
pub trait AtLeast<T> {}
impl<T> AtLeast<T> for T {}
impl AtLeast<Linear> for Linked {}
impl AtLeast<SimpleLinear> for Linked {}
impl AtLeast<SemiAmbiguous> for Linked {}
impl AtLeast<UnAmbiguous> for Linked {}
impl AtLeast<SimpleLinear> for Linear {}
impl AtLeast<SemiAmbiguous> for Linear {}
impl AtLeast<UnAmbiguous> for Linear {}
impl AtLeast<SemiAmbiguous> for SimpleLinear {}
impl AtLeast<UnAmbiguous> for SimpleLinear {}
impl AtLeast<UnAmbiguous> for SemiAmbiguous {}
pub trait HighestOf<T> {
type HighestLevel;
}
impl<T> HighestOf<T> for T {
type HighestLevel = T;
}
impl HighestOf<Linked> for Linear {
type HighestLevel = Linked;
}
impl HighestOf<Linked> for SimpleLinear {
type HighestLevel = Linked;
}
impl HighestOf<Linked> for SemiAmbiguous {
type HighestLevel = Linked;
}
impl HighestOf<Linked> for UnAmbiguous {
type HighestLevel = Linked;
}
impl HighestOf<Linear> for SimpleLinear {
type HighestLevel = Linear;
}
impl HighestOf<Linear> for SemiAmbiguous {
type HighestLevel = Linear;
}
impl HighestOf<Linear> for UnAmbiguous {
type HighestLevel = Linear;
}
impl HighestOf<SimpleLinear> for SemiAmbiguous {
type HighestLevel = SimpleLinear;
}
impl HighestOf<SimpleLinear> for UnAmbiguous {
type HighestLevel = SimpleLinear;
}
impl HighestOf<SemiAmbiguous> for UnAmbiguous {
type HighestLevel = SemiAmbiguous;
}
impl HighestOf<Linear> for Linked {
type HighestLevel = Self;
}
impl HighestOf<SimpleLinear> for Linked {
type HighestLevel = Self;
}
impl HighestOf<SemiAmbiguous> for Linked {
type HighestLevel = Self;
}
impl HighestOf<UnAmbiguous> for Linked {
type HighestLevel = Self;
}
impl HighestOf<SimpleLinear> for Linear {
type HighestLevel = Self;
}
impl HighestOf<SemiAmbiguous> for Linear {
type HighestLevel = Self;
}
impl HighestOf<UnAmbiguous> for Linear {
type HighestLevel = Self;
}
impl HighestOf<SemiAmbiguous> for SimpleLinear {
type HighestLevel = Self;
}
impl HighestOf<UnAmbiguous> for SimpleLinear {
type HighestLevel = Self;
}
impl HighestOf<UnAmbiguous> for SemiAmbiguous {
type HighestLevel = Self;
}