Macro const_format::coerce_to_fmt
source · macro_rules! coerce_to_fmt { ($reference:expr) => { ... }; }
Available on crate feature
fmt
only.Expand description
Coerces a reference to a type that has a const_*_fmt
method.
§Behavior
For arrays it coerces them into a slice, and wraps them in a PWrapper
.
For std types, it wraps them in a PWrapper
, which implements the
const_*_fmt
methods.
For non-std types, it just returns back the same reference.
§Example
#![feature(const_mut_refs)]
use const_format::{
for_examples::Unit,
Formatter, FormattingFlags, PWrapper, StrWriter,
coerce_to_fmt,
};
const CAP: usize = 128;
const fn make_strwriter() -> StrWriter<[u8; CAP]> {
let mut writer = StrWriter::new([0; CAP]);
let mut fmt = Formatter::from_sw(&mut writer, FormattingFlags::NEW);
// This is equivalent to the `PWrapper::slice(&[0u8, 1])` below
let _ = coerce_to_fmt!([0u8, 1]).const_debug_fmt(&mut fmt);
let _ = fmt.write_str(",");
let _ = PWrapper::slice(&[0u8, 1]).const_debug_fmt(&mut fmt);
let _ = fmt.write_str(",");
// This is equivalent to the `PWrapper(100u32)` line
let _ = coerce_to_fmt!(100u32).const_debug_fmt(&mut fmt);
let _ = fmt.write_str(",");
let _ = PWrapper(100u32).const_debug_fmt(&mut fmt);
let _ = fmt.write_str(",");
// This is equivalent to the `Unit.const_debug_fmt(&mut fmt)` line
let _ = coerce_to_fmt!(Unit).const_debug_fmt(&mut fmt);
let _ = fmt.write_str(",");
let _ = Unit.const_debug_fmt(&mut fmt);
writer
}
const TEXT: &str = {
const TEXT_: &StrWriter = &make_strwriter();
TEXT_.as_str_alt()
};
assert_eq!(TEXT, "[0, 1],[0, 1],100,100,Unit,Unit");