[−][src]Trait const_format::marker_traits::WriteMarker
Marker trait for types that can be written into.
Implementors
Types that implement this trait are also expected to implement these inherent methods:
ⓘThis example is not tested
// 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.
#![feature(const_mut_refs)] 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");
Associated Types
type Kind
Whether this is a StrWriter or not, this can be either of
IsAStrWriter
or IsNotAStrWriter
type This: ?Sized
The type after dereferencing,
implemented as type This = Self;
for all non-reference types
Implementations on Foreign Types
impl<T: ?Sized, '_> WriteMarker for &'_ T where
T: WriteMarker,
[src]
T: WriteMarker,
impl<T: ?Sized, '_> WriteMarker for &'_ mut T where
T: WriteMarker,
[src]
Loading content...T: WriteMarker,