use snafu::prelude::*;

#[derive(Debug, Snafu)]
pub enum DecodeError {
    #[snafu(display("Unexpected end of input"))]
    UnexpectedEndOfInput,

    #[snafu(display("Malformed whisker at position `{}`", position))]
    MalformedWhisker { position: usize },

    #[snafu(display("Duplicate whisker at position `{}`", position))]
    DuplicateWhisker { position: usize },

    #[snafu(display("Comment data is not valid UTF-8"))]
    InvalidComment,

    #[snafu(display("CRC checksum mismatch"))]
    CrcMismatch,
}

#[derive(Debug, Snafu)]
pub enum EncodeError {
    #[snafu(display("New data is a duplicate of an existing data"))]
    DuplicateData,

    #[snafu(display("Given data causes CATS packet to overflow"))]
    CatsOverflow,
}

#[derive(Debug, Snafu)]
pub enum CommentError {
    #[snafu(display("CATS packet does not have comment data"))]
    NoComment,

    #[snafu(display("Given buffer too small for comment data"))]
    BufferOverflow,
}