pub mod balanced;
pub mod unbalanced;
use core::{convert::TryFrom, fmt, hash};
use num_traits::{CheckedAdd, CheckedSub, Num};
pub use self::{balanced::Btrit, unbalanced::Utrit};
use crate::encoding::ternary::convert;
pub trait Trit:
Copy + Sized + fmt::Debug + hash::Hash + Into<i8> + Ord + PartialEq + ShiftTernary + TryFrom<i8> + fmt::Display
{
fn checked_increment(self) -> Option<Self>;
fn zero() -> Self;
fn as_arbitrary_ref<'a>(&self) -> &'a Self;
fn add_to_num<I: Num + CheckedAdd + CheckedSub>(&self, n: I) -> Result<I, convert::Error>;
}
pub trait ShiftTernary: Sized {
type Target: ShiftTernary<Target = Self>;
fn shift(self) -> Self::Target;
}