nsw-types 0.1.13

Implement the following non standard integers: u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59, u60, u61, u62, u63, i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i60, i61, i62, i63
Documentation
use bitvec::{field::BitField, order::Msb0, slice::BitSlice};

use crate::*;

pub trait BitSliceUxExts {
    fn as_u1(&self) -> u1;
    fn as_u2(&self) -> u2;
    fn as_u3(&self) -> u3;
    fn as_u4(&self) -> u4;
    fn as_u5(&self) -> u5;
    fn as_u6(&self) -> u6;
    fn as_u7(&self) -> u7;
}

impl BitSliceUxExts for &BitSlice<u8, Msb0> {
    fn as_u1(&self) -> u1 {
        assert!(self.len() == 1);
        let value: u8 = self.load_be();
        u1::new(value)
    }

    fn as_u2(&self) -> u2 {
        assert!(self.len() == 2);
        let value: u8 = self.load_be();
        u2::new(value)
    }

    fn as_u3(&self) -> u3 {
        assert!(self.len() == 3);
        let value: u8 = self.load_be();
        u3::new(value)
    }

    fn as_u4(&self) -> u4 {
        assert!(self.len() == 4);
        let value: u8 = self.load_be();
        u4::new(value)
    }

    fn as_u5(&self) -> u5 {
        assert!(self.len() == 5);
        let value: u8 = self.load_be();
        u5::new(value)
    }

    fn as_u6(&self) -> u6 {
        assert!(self.len() == 6);
        let value: u8 = self.load_be();
        u6::new(value)
    }

    fn as_u7(&self) -> u7 {
        assert!(self.len() == 7);
        let value: u8 = self.load_be();
        u7::new(value)
    }
}