#[derive(Debug)]
pub struct InvalidState;

#[derive(PartialEq, Eq)]
pub enum State {
    NoChange,
    Sleep,
    SpiActive,
    Ready,
    Ready2,
    TxTune,
    RxTune,
    Tx,
    Rx,
}

impl From<State> for u8 {
    fn from(s: State) -> u8 {
        match s {
            State::NoChange => 0x00,
            State::Sleep => 0x01,
            State::SpiActive => 0x02,
            State::Ready => 0x03,
            State::Ready2 => 0x04,
            State::TxTune => 0x05,
            State::RxTune => 0x06,
            State::Tx => 0x07,
            State::Rx => 0x08,
        }
    }
}

impl TryFrom<u8> for State {
    type Error = InvalidState;

    fn try_from(v: u8) -> Result<Self, Self::Error> {
        let s = match v {
            0x00 => State::NoChange,
            0x01 => State::Sleep,
            0x02 => State::SpiActive,
            0x03 => State::Ready,
            0x04 => State::Ready2,
            0x05 => State::TxTune,
            0x06 => State::RxTune,
            0x07 => State::Tx,
            0x08 => State::Rx,
            _ => return Err(InvalidState),
        };

        Ok(s)
    }
}