[][src]Trait structview::View

pub unsafe trait View: Copy {
    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> { ... } }

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

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.

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.

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.

Loading content...

Implementations on Foreign Types

impl View for i8[src]

impl View for u8[src]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Loading content...

Implementors

impl<BO: Copy> View for I16<BO>[src]

impl<BO: Copy> View for I32<BO>[src]

impl<BO: Copy> View for I64<BO>[src]

impl<BO: Copy> View for U16<BO>[src]

impl<BO: Copy> View for U32<BO>[src]

impl<BO: Copy> View for U64<BO>[src]

Loading content...