fermah-common 0.1.2

Fermah common utilities and types.
Documentation
use ethers::types::Bytes;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QuorumNumbers<const S: usize>(Vec<u8>);

impl<const S: usize> QuorumNumbers<S> {
    pub fn new(quorum_numbers: Vec<u8>) -> Self {
        if quorum_numbers.len() > S {
            panic!("Quorum numbers must not exceed {S}")
        }

        Self(quorum_numbers)
    }
}

impl<const S: usize> From<QuorumNumbers<S>> for Bytes {
    fn from(value: QuorumNumbers<S>) -> Self {
        value.0.into()
    }
}

impl<const S: usize> From<&[u8]> for QuorumNumbers<S> {
    fn from(value: &[u8]) -> Self {
        let v = Vec::from(value);
        Self::new(v)
    }
}