Struct binary_layout::PrimitiveField
source · [−]pub struct PrimitiveField<T: ?Sized, E: Endianness, const OFFSET_: usize> { /* private fields */ }Expand description
A PrimitiveField is a Field that directly represents a primitive type like u8, i16, … See Field for more info on this API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
field_one: u16,
another_field: [u8; 16],
something_else: u32,
tail_data: [u8],
});
fn func(storage_data: &mut [u8]) {
// read some data
let format_version_header: u16 = my_layout::field_one::read(storage_data);
// equivalent: let format_version_header = u16::from_le_bytes((&storage_data[0..2]).try_into().unwrap());
// write some data
my_layout::something_else::write(storage_data, 10);
// equivalent: data_slice[18..22].copy_from_slice(&10u32.to_le_bytes());
// access a data region
let tail_data: &[u8] = my_layout::tail_data::data(storage_data);
// equivalent: let tail_data: &[u8] = &data_slice[22..];
// and modify it
my_layout::tail_data::data_mut(storage_data)[..5].copy_from_slice(&[1, 2, 3, 4, 5]);
// equivalent: data_slice[18..22].copy_from_slice(&[1, 2, 3, 4, 5]);
}Trait Implementations
sourceimpl<E: Endianness, const N: usize, const OFFSET_: usize> Field for PrimitiveField<[u8; N], E, OFFSET_>
impl<E: Endianness, const N: usize, const OFFSET_: usize> Field for PrimitiveField<[u8; N], E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<[u8], E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<[u8], E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = None
const SIZE: Option<usize> = None
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<(), E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<(), E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<N: NestedViewInfo, E: Endianness, const OFFSET_: usize> Field for PrimitiveField<N, E, OFFSET_>
impl<N: NestedViewInfo, E: Endianness, const OFFSET_: usize> Field for PrimitiveField<N, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = N::SIZE
const SIZE: Option<usize> = N::SIZE
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<f32, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<f32, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<f64, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<f64, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i128, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i128, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i16, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i16, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i32, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i32, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i64, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i64, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i8, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<i8, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u128, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u128, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u16, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u16, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u32, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u32, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u64, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u64, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u8, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> Field for PrimitiveField<u8, E, OFFSET_>
type Endian = E
type Endian = E
See Field::Endian
sourceconst OFFSET: usize = OFFSET_
const OFFSET: usize = OFFSET_
See Field::OFFSET
sourceconst SIZE: Option<usize> = _
const SIZE: Option<usize> = _
See Field::SIZE
sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<(), E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<(), E, OFFSET_>
type HighLevelType = ()
type HighLevelType = ()
sourcefn read(_storage: &[u8])
fn read(_storage: &[u8])
‘Read’ the ()-typed field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_zst_field: ()
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: () = my_layout::some_zst_field::read(storage_data);
}In reality, this method doesn’t do any work; () is a zero-sized type, so there’s no work to
do. This implementation exists solely to make writing derive
macros simpler.
sourcefn write(_storage: &mut [u8], _value: ())
fn write(_storage: &mut [u8], _value: ())
‘Write’ the ()-typed field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_zst_field: ()
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_zst_field::write(storage_data, ());
}WARNING
In reality, this method doesn’t do any work; () is a zero-sized type, so there’s no work to
do. This implementation exists solely to make writing derive
macros simpler.
sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<f32, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<f32, E, OFFSET_>
type HighLevelType = f32
type HighLevelType = f32
sourcefn read(storage: &[u8]) -> f32
fn read(storage: &[u8]) -> f32
Read the float field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_float_field: f32
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: f32 = my_layout::some_float_field::read(storage_data);
}WARNING
At it’s core, this method uses f32::from_bits,
which has some weird behavior around signaling and non-signaling NaN values. Read the
documentation for f32::from_bits which
explains the situation.
sourcefn write(storage: &mut [u8], value: f32)
fn write(storage: &mut [u8], value: f32)
Write the float field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_float_field: f32
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_float_field::write(storage_data, 10.0);
}WARNING
At it’s core, this method uses f32::to_bits,
which has some weird behavior around signaling and non-signaling NaN values. Read the
documentation for f32::to_bits which
explains the situation.
sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<f64, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<f64, E, OFFSET_>
type HighLevelType = f64
type HighLevelType = f64
sourcefn read(storage: &[u8]) -> f64
fn read(storage: &[u8]) -> f64
Read the float field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_float_field: f64
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: f64 = my_layout::some_float_field::read(storage_data);
}WARNING
At it’s core, this method uses f64::from_bits,
which has some weird behavior around signaling and non-signaling NaN values. Read the
documentation for f64::from_bits which
explains the situation.
sourcefn write(storage: &mut [u8], value: f64)
fn write(storage: &mut [u8], value: f64)
Write the float field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_float_field: f64
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_float_field::write(storage_data, 10.0);
}WARNING
At it’s core, this method uses f64::to_bits,
which has some weird behavior around signaling and non-signaling NaN values. Read the
documentation for f64::to_bits which
explains the situation.
sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i128, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i128, E, OFFSET_>
type HighLevelType = i128
type HighLevelType = i128
sourcefn read(storage: &[u8]) -> i128
fn read(storage: &[u8]) -> i128
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i128
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: i128 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: i128)
fn write(storage: &mut [u8], value: i128)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i128
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i16, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i16, E, OFFSET_>
type HighLevelType = i16
type HighLevelType = i16
sourcefn read(storage: &[u8]) -> i16
fn read(storage: &[u8]) -> i16
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i16
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: i16 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: i16)
fn write(storage: &mut [u8], value: i16)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i16
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i32, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i32, E, OFFSET_>
type HighLevelType = i32
type HighLevelType = i32
sourcefn read(storage: &[u8]) -> i32
fn read(storage: &[u8]) -> i32
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i32
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: i32 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: i32)
fn write(storage: &mut [u8], value: i32)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i32
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i64, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i64, E, OFFSET_>
type HighLevelType = i64
type HighLevelType = i64
sourcefn read(storage: &[u8]) -> i64
fn read(storage: &[u8]) -> i64
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i64
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: i64 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: i64)
fn write(storage: &mut [u8], value: i64)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i64
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i8, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<i8, E, OFFSET_>
type HighLevelType = i8
type HighLevelType = i8
sourcefn read(storage: &[u8]) -> i8
fn read(storage: &[u8]) -> i8
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i8
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: i8 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: i8)
fn write(storage: &mut [u8], value: i8)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: i8
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u128, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u128, E, OFFSET_>
type HighLevelType = u128
type HighLevelType = u128
sourcefn read(storage: &[u8]) -> u128
fn read(storage: &[u8]) -> u128
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u128
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: u128 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: u128)
fn write(storage: &mut [u8], value: u128)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u128
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u16, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u16, E, OFFSET_>
type HighLevelType = u16
type HighLevelType = u16
sourcefn read(storage: &[u8]) -> u16
fn read(storage: &[u8]) -> u16
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u16
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: u16 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: u16)
fn write(storage: &mut [u8], value: u16)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u16
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u32, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u32, E, OFFSET_>
type HighLevelType = u32
type HighLevelType = u32
sourcefn read(storage: &[u8]) -> u32
fn read(storage: &[u8]) -> u32
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u32
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: u32 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: u32)
fn write(storage: &mut [u8], value: u32)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u32
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u64, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u64, E, OFFSET_>
type HighLevelType = u64
type HighLevelType = u64
sourcefn read(storage: &[u8]) -> u64
fn read(storage: &[u8]) -> u64
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u64
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: u64 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: u64)
fn write(storage: &mut [u8], value: u64)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u64
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u8, E, OFFSET_>
impl<E: Endianness, const OFFSET_: usize> FieldCopyAccess for PrimitiveField<u8, E, OFFSET_>
type HighLevelType = u8
type HighLevelType = u8
sourcefn read(storage: &[u8]) -> u8
fn read(storage: &[u8]) -> u8
Read the integer field from a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u8
//... other fields ...
});
fn func(storage_data: &[u8]) {
let read: u8 = my_layout::some_integer_field::read(storage_data);
}sourcefn write(storage: &mut [u8], value: u8)
fn write(storage: &mut [u8], value: u8)
Write the integer field to a given data region, assuming the defined layout, using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_integer_field: u8
//... other fields ...
});
fn func(storage_data: &mut [u8]) {
my_layout::some_integer_field::write(storage_data, 10);
}sourceimpl<'a, E: Endianness, const N: usize, const OFFSET_: usize> FieldSliceAccess<'a> for PrimitiveField<[u8; N], E, OFFSET_>
impl<'a, E: Endianness, const N: usize, const OFFSET_: usize> FieldSliceAccess<'a> for PrimitiveField<[u8; N], E, OFFSET_>
Field type [u8; N]:
This field represents a fixed size byte array.
In this impl, we define accessors for such fields.
sourcefn data(storage: &'a [u8]) -> &'a [u8; N]
fn data(storage: &'a [u8]) -> &'a [u8; N]
Borrow the data in the byte array with read access using the Field API. See also FieldSliceAccess::data.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_field: [u8; 5],
//... other fields
});
fn func(storage_data: &[u8]) {
let some_field: &[u8; 5] = my_layout::some_field::data(storage_data);
}sourcefn data_mut(storage: &'a mut [u8]) -> &'a mut [u8; N]
fn data_mut(storage: &'a mut [u8]) -> &'a mut [u8; N]
Borrow the data in the byte array with write access using the Field API. See also FieldSliceAccess::data_mut
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
some_field: [u8; 5],
//... other fields
});
fn func(storage_data: &mut [u8]) {
let some_field: &mut [u8; 5] = my_layout::some_field::data_mut(storage_data);
}type MutSliceType = &'a mut [u8; N]
type MutSliceType = &'a mut [u8; N]
The type of slice returned from calls requesting write access
sourceimpl<'a, E: Endianness, const OFFSET_: usize> FieldSliceAccess<'a> for PrimitiveField<[u8], E, OFFSET_>
impl<'a, E: Endianness, const OFFSET_: usize> FieldSliceAccess<'a> for PrimitiveField<[u8], E, OFFSET_>
Field type [u8]:
This field represents an open ended byte array.
In this impl, we define accessors for such fields.
sourcefn data(storage: &'a [u8]) -> &'a [u8]ⓘNotable traits for &mut [u8]impl Write for &mut [u8]impl Read for &[u8]
fn data(storage: &'a [u8]) -> &'a [u8]ⓘNotable traits for &mut [u8]impl Write for &mut [u8]impl Read for &[u8]
sourcefn data_mut(storage: &'a mut [u8]) -> &'a mut [u8]ⓘNotable traits for &mut [u8]impl Write for &mut [u8]impl Read for &[u8]
fn data_mut(storage: &'a mut [u8]) -> &'a mut [u8]ⓘNotable traits for &mut [u8]impl Write for &mut [u8]impl Read for &[u8]
Borrow the data in the byte array with write access using the Field API.
Example:
use binary_layout::prelude::*;
define_layout!(my_layout, LittleEndian, {
//... other fields ...
tail_data: [u8],
});
fn func(storage_data: &mut [u8]) {
let tail_data: &mut [u8] = my_layout::tail_data::data_mut(storage_data);
}type MutSliceType = &'a mut [u8]
type MutSliceType = &'a mut [u8]
The type of slice returned from calls requesting write access
Auto Trait Implementations
impl<T: ?Sized, E, const OFFSET_: usize> RefUnwindSafe for PrimitiveField<T, E, OFFSET_> where
E: RefUnwindSafe,
T: RefUnwindSafe,
impl<T: ?Sized, E, const OFFSET_: usize> Send for PrimitiveField<T, E, OFFSET_> where
E: Send,
T: Send,
impl<T: ?Sized, E, const OFFSET_: usize> Sync for PrimitiveField<T, E, OFFSET_> where
E: Sync,
T: Sync,
impl<T: ?Sized, E, const OFFSET_: usize> Unpin for PrimitiveField<T, E, OFFSET_> where
E: Unpin,
T: Unpin,
impl<T: ?Sized, E, const OFFSET_: usize> UnwindSafe for PrimitiveField<T, E, OFFSET_> where
E: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more