pub trait WriteMarker {
type Kind;
type This: ?Sized;
}
Expand description
Marker trait for types that can be written into.
§Implementors
Types that implement this trait are also expected to implement these inherent methods:
ⓘ
// use const_format::{FormattingFlags, Formatter};
const fn borrow_mutably(&mut self) -> &mut Self
const fn make_formatter(&mut self, flags: FormattingFlags) -> Formatter<'_>
§Coercions
The Kind
and This
associated types
are used in the IsAWriteMarker
marker type
to convert a &mut StrWriter<_>
to a StrWriterMut<'_>
,
and leave other mutable references unconverted.
§Example
Implementing this trait for a String-like inline allocated type.
use const_format::marker_traits::{IsNotAStrWriter, WriteMarker};
use const_format::{Formatter, FormattingFlags};
use const_format::writec;
mod arraystring {
use const_format::marker_traits::{IsNotAStrWriter, WriteMarker};
use const_format::{Formatter, FormattingFlags};
const ARRAY_CAP: usize = 64;
pub struct ArrayString {
len: usize,
arr: [u8; ARRAY_CAP],
}
impl WriteMarker for ArrayString {
type Kind = IsNotAStrWriter;
type This = Self;
}
impl ArrayString {
pub const fn new() -> Self {
Self { len: 0, arr: [0; ARRAY_CAP] }
}
// Gets the part of the array that has been written to.
pub const fn as_bytes(&self) -> &[u8] {
const_format::utils::slice_up_to_len_alt(&self.arr, self.len)
}
pub const fn borrow_mutably(&mut self) -> &mut Self {
self
}
pub const fn make_formatter(&mut self, flags: FormattingFlags) -> Formatter<'_> {
Formatter::from_custom(&mut self.arr, &mut self.len, flags)
}
}
}
use arraystring::ArrayString;
let mut buffer = ArrayString::new();
writec!(buffer, "{:?}", [3u8, 5])?;
assert_eq!(buffer.as_bytes(), b"[3, 5]");
writec!(buffer, "{}{:b}", "Hello, world!", 100u16)?;
assert_eq!(buffer.as_bytes(), b"[3, 5]Hello, world!1100100");
Required Associated Types§
Sourcetype Kind
type Kind
Whether this is a StrWriter or not, this can be either of
IsAStrWriter
or IsNotAStrWriter