Trait View

Source
pub unsafe trait View: Copy {
    // Provided methods
    fn view(data: &[u8]) -> Result<&Self, Error> { ... }
    fn view_boxed_slice(data: Box<[u8]>) -> Result<Box<[Self]>, Error> { ... }
    fn view_slice(data: &[u8]) -> Result<&[Self], Error> { ... }
}
Expand description

Trait for viewing byte data as a higher-level representation.

By implementing View a type declares that it is safe to be cast from raw byte data.

§Safety

Implementing this trait is unsafe since implementing types must fulfill some requirements that cannot be checked through the type system only:

  • There must be no raw byte values that constitute invalid data for the implementing type. For example, implementing View for std::num::NonZeroI32 would be unsafe.
  • The implementing type must be 1-byte aligned.
  • If the implementing type is a compound type, it must be ensured that the compiler doesn’t change the order of fields. This can be achieved through #[repr(C)].

It is recommended to use the custom View derive also provided by this crate instead of implementing this trait manually.

Provided Methods§

Source

fn view(data: &[u8]) -> Result<&Self, Error>

View data as a value of the implementing type.

This simply casts the &[u8] reference to a reference of the implementing type.

§Errors

If data is too short to fill the whole view, Error::NotEnoughData will be returned.

Source

fn view_boxed_slice(data: Box<[u8]>) -> Result<Box<[Self]>, Error>

View boxed slice data as a boxed slice of the implementing type.

This first reinterprets the data as a slice of the implementing type and then as a boxed slice

§Errors

If the length of the u8 boxed slice is not a multiple of the struct’s size, Error::NotEnoughData will be returned.

§Panics

If the implementing type has a size of 0.

Source

fn view_slice(data: &[u8]) -> Result<&[Self], Error>

View slice data as a slice of the implementing type.

This simply reinterprets the data as a slice of the implementing type.

§Errors

If the length of the u8 slice is not a multiple of the struct’s size, Error::NotEnoughData will be returned.

§Panics

If the implementing type has a size of 0.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl View for i8

Source§

impl View for u8

Source§

impl<V: View> View for [V; 0]

Source§

impl<V: View> View for [V; 1]

Source§

impl<V: View> View for [V; 2]

Source§

impl<V: View> View for [V; 3]

Source§

impl<V: View> View for [V; 4]

Source§

impl<V: View> View for [V; 5]

Source§

impl<V: View> View for [V; 6]

Source§

impl<V: View> View for [V; 7]

Source§

impl<V: View> View for [V; 8]

Source§

impl<V: View> View for [V; 9]

Source§

impl<V: View> View for [V; 10]

Source§

impl<V: View> View for [V; 11]

Source§

impl<V: View> View for [V; 12]

Source§

impl<V: View> View for [V; 13]

Source§

impl<V: View> View for [V; 14]

Source§

impl<V: View> View for [V; 15]

Source§

impl<V: View> View for [V; 16]

Source§

impl<V: View> View for [V; 17]

Source§

impl<V: View> View for [V; 18]

Source§

impl<V: View> View for [V; 19]

Source§

impl<V: View> View for [V; 20]

Source§

impl<V: View> View for [V; 21]

Source§

impl<V: View> View for [V; 22]

Source§

impl<V: View> View for [V; 23]

Source§

impl<V: View> View for [V; 24]

Source§

impl<V: View> View for [V; 25]

Source§

impl<V: View> View for [V; 26]

Source§

impl<V: View> View for [V; 27]

Source§

impl<V: View> View for [V; 28]

Source§

impl<V: View> View for [V; 29]

Source§

impl<V: View> View for [V; 30]

Source§

impl<V: View> View for [V; 31]

Source§

impl<V: View> View for [V; 32]

Source§

impl<V: View> View for [V; 33]

Source§

impl<V: View> View for [V; 34]

Source§

impl<V: View> View for [V; 35]

Source§

impl<V: View> View for [V; 36]

Source§

impl<V: View> View for [V; 37]

Source§

impl<V: View> View for [V; 38]

Source§

impl<V: View> View for [V; 39]

Source§

impl<V: View> View for [V; 40]

Source§

impl<V: View> View for [V; 41]

Source§

impl<V: View> View for [V; 42]

Source§

impl<V: View> View for [V; 43]

Source§

impl<V: View> View for [V; 44]

Source§

impl<V: View> View for [V; 45]

Source§

impl<V: View> View for [V; 46]

Source§

impl<V: View> View for [V; 47]

Source§

impl<V: View> View for [V; 48]

Source§

impl<V: View> View for [V; 49]

Source§

impl<V: View> View for [V; 50]

Source§

impl<V: View> View for [V; 51]

Source§

impl<V: View> View for [V; 52]

Source§

impl<V: View> View for [V; 53]

Source§

impl<V: View> View for [V; 54]

Source§

impl<V: View> View for [V; 55]

Source§

impl<V: View> View for [V; 56]

Source§

impl<V: View> View for [V; 57]

Source§

impl<V: View> View for [V; 58]

Source§

impl<V: View> View for [V; 59]

Source§

impl<V: View> View for [V; 60]

Source§

impl<V: View> View for [V; 61]

Source§

impl<V: View> View for [V; 62]

Source§

impl<V: View> View for [V; 63]

Source§

impl<V: View> View for [V; 64]

Source§

impl<V: View> View for [V; 65]

Source§

impl<V: View> View for [V; 66]

Source§

impl<V: View> View for [V; 67]

Source§

impl<V: View> View for [V; 68]

Source§

impl<V: View> View for [V; 69]

Source§

impl<V: View> View for [V; 70]

Source§

impl<V: View> View for [V; 71]

Source§

impl<V: View> View for [V; 72]

Source§

impl<V: View> View for [V; 73]

Source§

impl<V: View> View for [V; 74]

Source§

impl<V: View> View for [V; 75]

Source§

impl<V: View> View for [V; 76]

Source§

impl<V: View> View for [V; 77]

Source§

impl<V: View> View for [V; 78]

Source§

impl<V: View> View for [V; 79]

Source§

impl<V: View> View for [V; 80]

Source§

impl<V: View> View for [V; 81]

Source§

impl<V: View> View for [V; 82]

Source§

impl<V: View> View for [V; 83]

Source§

impl<V: View> View for [V; 84]

Source§

impl<V: View> View for [V; 85]

Source§

impl<V: View> View for [V; 86]

Source§

impl<V: View> View for [V; 87]

Source§

impl<V: View> View for [V; 88]

Source§

impl<V: View> View for [V; 89]

Source§

impl<V: View> View for [V; 90]

Source§

impl<V: View> View for [V; 91]

Source§

impl<V: View> View for [V; 92]

Source§

impl<V: View> View for [V; 93]

Source§

impl<V: View> View for [V; 94]

Source§

impl<V: View> View for [V; 95]

Source§

impl<V: View> View for [V; 96]

Source§

impl<V: View> View for [V; 97]

Source§

impl<V: View> View for [V; 98]

Source§

impl<V: View> View for [V; 99]

Source§

impl<V: View> View for [V; 100]

Source§

impl<V: View> View for [V; 101]

Source§

impl<V: View> View for [V; 102]

Source§

impl<V: View> View for [V; 103]

Source§

impl<V: View> View for [V; 104]

Source§

impl<V: View> View for [V; 105]

Source§

impl<V: View> View for [V; 106]

Source§

impl<V: View> View for [V; 107]

Source§

impl<V: View> View for [V; 108]

Source§

impl<V: View> View for [V; 109]

Source§

impl<V: View> View for [V; 110]

Source§

impl<V: View> View for [V; 111]

Source§

impl<V: View> View for [V; 112]

Source§

impl<V: View> View for [V; 113]

Source§

impl<V: View> View for [V; 114]

Source§

impl<V: View> View for [V; 115]

Source§

impl<V: View> View for [V; 116]

Source§

impl<V: View> View for [V; 117]

Source§

impl<V: View> View for [V; 118]

Source§

impl<V: View> View for [V; 119]

Source§

impl<V: View> View for [V; 120]

Source§

impl<V: View> View for [V; 121]

Source§

impl<V: View> View for [V; 122]

Source§

impl<V: View> View for [V; 123]

Source§

impl<V: View> View for [V; 124]

Source§

impl<V: View> View for [V; 125]

Source§

impl<V: View> View for [V; 126]

Source§

impl<V: View> View for [V; 127]

Source§

impl<V: View> View for [V; 128]

Source§

impl<V: View> View for [V; 129]

Source§

impl<V: View> View for [V; 130]

Source§

impl<V: View> View for [V; 131]

Source§

impl<V: View> View for [V; 132]

Source§

impl<V: View> View for [V; 133]

Source§

impl<V: View> View for [V; 134]

Source§

impl<V: View> View for [V; 135]

Source§

impl<V: View> View for [V; 136]

Source§

impl<V: View> View for [V; 137]

Source§

impl<V: View> View for [V; 138]

Source§

impl<V: View> View for [V; 139]

Source§

impl<V: View> View for [V; 140]

Source§

impl<V: View> View for [V; 141]

Source§

impl<V: View> View for [V; 142]

Source§

impl<V: View> View for [V; 143]

Source§

impl<V: View> View for [V; 144]

Source§

impl<V: View> View for [V; 145]

Source§

impl<V: View> View for [V; 146]

Source§

impl<V: View> View for [V; 147]

Source§

impl<V: View> View for [V; 148]

Source§

impl<V: View> View for [V; 149]

Source§

impl<V: View> View for [V; 150]

Source§

impl<V: View> View for [V; 151]

Source§

impl<V: View> View for [V; 152]

Source§

impl<V: View> View for [V; 153]

Source§

impl<V: View> View for [V; 154]

Source§

impl<V: View> View for [V; 155]

Source§

impl<V: View> View for [V; 156]

Source§

impl<V: View> View for [V; 157]

Source§

impl<V: View> View for [V; 158]

Source§

impl<V: View> View for [V; 159]

Source§

impl<V: View> View for [V; 160]

Source§

impl<V: View> View for [V; 161]

Source§

impl<V: View> View for [V; 162]

Source§

impl<V: View> View for [V; 163]

Source§

impl<V: View> View for [V; 164]

Source§

impl<V: View> View for [V; 165]

Source§

impl<V: View> View for [V; 166]

Source§

impl<V: View> View for [V; 167]

Source§

impl<V: View> View for [V; 168]

Source§

impl<V: View> View for [V; 169]

Source§

impl<V: View> View for [V; 170]

Source§

impl<V: View> View for [V; 171]

Source§

impl<V: View> View for [V; 172]

Source§

impl<V: View> View for [V; 173]

Source§

impl<V: View> View for [V; 174]

Source§

impl<V: View> View for [V; 175]

Source§

impl<V: View> View for [V; 176]

Source§

impl<V: View> View for [V; 177]

Source§

impl<V: View> View for [V; 178]

Source§

impl<V: View> View for [V; 179]

Source§

impl<V: View> View for [V; 180]

Source§

impl<V: View> View for [V; 181]

Source§

impl<V: View> View for [V; 182]

Source§

impl<V: View> View for [V; 183]

Source§

impl<V: View> View for [V; 184]

Source§

impl<V: View> View for [V; 185]

Source§

impl<V: View> View for [V; 186]

Source§

impl<V: View> View for [V; 187]

Source§

impl<V: View> View for [V; 188]

Source§

impl<V: View> View for [V; 189]

Source§

impl<V: View> View for [V; 190]

Source§

impl<V: View> View for [V; 191]

Source§

impl<V: View> View for [V; 192]

Source§

impl<V: View> View for [V; 193]

Source§

impl<V: View> View for [V; 194]

Source§

impl<V: View> View for [V; 195]

Source§

impl<V: View> View for [V; 196]

Source§

impl<V: View> View for [V; 197]

Source§

impl<V: View> View for [V; 198]

Source§

impl<V: View> View for [V; 199]

Source§

impl<V: View> View for [V; 200]

Source§

impl<V: View> View for [V; 201]

Source§

impl<V: View> View for [V; 202]

Source§

impl<V: View> View for [V; 203]

Source§

impl<V: View> View for [V; 204]

Source§

impl<V: View> View for [V; 205]

Source§

impl<V: View> View for [V; 206]

Source§

impl<V: View> View for [V; 207]

Source§

impl<V: View> View for [V; 208]

Source§

impl<V: View> View for [V; 209]

Source§

impl<V: View> View for [V; 210]

Source§

impl<V: View> View for [V; 211]

Source§

impl<V: View> View for [V; 212]

Source§

impl<V: View> View for [V; 213]

Source§

impl<V: View> View for [V; 214]

Source§

impl<V: View> View for [V; 215]

Source§

impl<V: View> View for [V; 216]

Source§

impl<V: View> View for [V; 217]

Source§

impl<V: View> View for [V; 218]

Source§

impl<V: View> View for [V; 219]

Source§

impl<V: View> View for [V; 220]

Source§

impl<V: View> View for [V; 221]

Source§

impl<V: View> View for [V; 222]

Source§

impl<V: View> View for [V; 223]

Source§

impl<V: View> View for [V; 224]

Source§

impl<V: View> View for [V; 225]

Source§

impl<V: View> View for [V; 226]

Source§

impl<V: View> View for [V; 227]

Source§

impl<V: View> View for [V; 228]

Source§

impl<V: View> View for [V; 229]

Source§

impl<V: View> View for [V; 230]

Source§

impl<V: View> View for [V; 231]

Source§

impl<V: View> View for [V; 232]

Source§

impl<V: View> View for [V; 233]

Source§

impl<V: View> View for [V; 234]

Source§

impl<V: View> View for [V; 235]

Source§

impl<V: View> View for [V; 236]

Source§

impl<V: View> View for [V; 237]

Source§

impl<V: View> View for [V; 238]

Source§

impl<V: View> View for [V; 239]

Source§

impl<V: View> View for [V; 240]

Source§

impl<V: View> View for [V; 241]

Source§

impl<V: View> View for [V; 242]

Source§

impl<V: View> View for [V; 243]

Source§

impl<V: View> View for [V; 244]

Source§

impl<V: View> View for [V; 245]

Source§

impl<V: View> View for [V; 246]

Source§

impl<V: View> View for [V; 247]

Source§

impl<V: View> View for [V; 248]

Source§

impl<V: View> View for [V; 249]

Source§

impl<V: View> View for [V; 250]

Source§

impl<V: View> View for [V; 251]

Source§

impl<V: View> View for [V; 252]

Source§

impl<V: View> View for [V; 253]

Source§

impl<V: View> View for [V; 254]

Source§

impl<V: View> View for [V; 255]

Source§

impl<V: View> View for [V; 256]

Implementors§

Source§

impl<BO: Copy> View for I16<BO>

Source§

impl<BO: Copy> View for I32<BO>

Source§

impl<BO: Copy> View for I64<BO>

Source§

impl<BO: Copy> View for U16<BO>

Source§

impl<BO: Copy> View for U32<BO>

Source§

impl<BO: Copy> View for U64<BO>