pub trait Checkable: Checkable + Sized {
// Required methods
fn write<W: BitWrite + ?Sized>(&self, writer: &mut W) -> Result<()>;
fn written_bits(&self) -> u32;
}
Expand description
A trait for writable types whose values can be validated
Ordinarily, when writing a value to a stream with a given number of bits, the value must be validated to ensure it will fit within that number of bits.
§Example 1
use bitstream_io::{BitWrite, BitWriter, BigEndian};
let mut w = BitWriter::endian(vec![], BigEndian);
// writing a value of 2 in 1 bit is always an error
// which is checked here at write-time
assert!(w.write::<1, u8>(2).is_err());
But if the value can be checked beforehand, it doesn’t need to be checked at write-time.
§Example 2
use bitstream_io::{BitWrite, BitWriter, BigEndian, CheckedUnsigned};
let mut w = BitWriter::endian(vec![], BigEndian);
// writing a value of 1 in 1 bit is ok
// and we're checking that validity at this stage
let value = CheckedUnsigned::<1, u8>::new_fixed::<1>(1).unwrap();
// because we've pre-validated the value beforehand,
// it doesn't need to be checked again here
// (though the write itself may still fail)
assert!(w.write_checked(value).is_ok());
Required Methods§
Sourcefn write<W: BitWrite + ?Sized>(&self, writer: &mut W) -> Result<()>
fn write<W: BitWrite + ?Sized>(&self, writer: &mut W) -> Result<()>
Write our value to the given stream
Sourcefn written_bits(&self) -> u32
fn written_bits(&self) -> u32
The number of written bits
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.