use crate::metadata::ir::{Access, Enum};

#[derive(Debug, Clone)]
pub struct Info {
    pub description: Option<&'static str>,
    pub byte_offset: u32,
    pub bit_offset: u32,
    pub bit_size: u32,
    pub access: Access,
    pub enumm: Option<&'static Enum>,
    pub default: Option<u64>,
}

#[derive(Debug, Clone, Copy)]
pub enum Value<'a> {
    Variant(&'static str),
    Literal(u64),
    Bytes(&'a [u8]),
}

#[derive(Debug, Clone, Copy)]
pub enum EncodeInput<'a> {
    Variant(&'a str),
    Literal(u64),
    Bytes(&'a [u8]),
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EncodeError {
    ReadOnly,
    NoSuchEntry,
    NoSuchField,
    NoSuchVariant,
    OutOfRange,
    BufferTooShort,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ValidationError {
    ComplementMismatch { entry: &'static str },
    BufferTooShort,
}