macro_rules! formatcp {
($format_string:expr $( $(, $expr:expr )+ )? $(,)? ) => { ... };
}Expand description
Formats constants of primitive types into a &'static str
formatcp stands for “format constants (of) primitives”
§Syntax
This macro uses a limited version of the syntax from the standard library format macro,
it can do these things:
-
Take positional arguments:
formatcp!("{}{0}", "hello" ) -
Take named arguments:
formatcp!("{a}{a}", a = "hello" ) -
Use constants from scope as arguments:
formatcp!("{FOO}")
equivalent to theformat_args_implicitsRFC -
Use Debug-like formatting (eg:
formatcp!("{:?}", "hello" ):
Similar to howDebugformatting in the standard library works, except that it does not escape unicode characters. -
Use LowerHex formatting (eg:
formatcp!("{:x}", "hello" )):
Formats numbers as lowercase hexadecimal. The alternate version (written as"{:#x}") prefixes the number with0x -
Use UpperHex formatting (eg:
formatcp!("{:X}", "hello" )):
Formats numbers as capitalized hexadecimal. The alternate version (written as"{:#X}") prefixes the number with0x -
Use Binary formatting (eg:
formatcp!("{:b}", "hello" ))
The alternate version (written as"{:#b}") prefixes the number with0b -
Use Display formatting:
formatcp!("{}", "hello" )
§Limitations
This macro can only take constants of these types as inputs:
-
&str -
i*/u*(all the primitive integer types). -
char -
bool
This macro also shares the limitations described in here as well.
§Formating behavior
§Debug-like
The {:?} formatter formats things similarly to how Debug does it.
For &'static str it does these things:
- Prepend and append the double quote character (
"). - Escape the
'\t','\n','\r','\\','\'', and'\"'characters. - Escape control characters with
\xYY, whereYYis the hexadecimal value of the control character.
Example:
use const_format::formatcp;
assert_eq!(formatcp!("{:?}", r#" \ " ó "#), r#"" \\ \" ó ""#);For char it does these things:
- Prepend and append the single quote character (
'). - Uses the same escapes as
&'static str.
§Display
The {}/{:} formatter produces the same output as in format.
§Examples
§Implicit argument
use const_format::formatcp;
const NAME: &str = "John";
const MSG: &str = formatcp!("Hello {NAME}, your name is {} bytes long", NAME.len());
assert_eq!(MSG, "Hello John, your name is 4 bytes long");
§Repeating arguments
use const_format::formatcp;
const MSG: &str = formatcp!("{0}{S}{0}{S}{0}", "SPAM", S = " ");
assert_eq!(MSG, "SPAM SPAM SPAM");
§Debug-like and Display formatting
use const_format::formatcp;
{
const TEXT: &str = r#"hello " \ world"#;
const MSG: &str = formatcp!("{TEXT}____{TEXT:?}");
assert_eq!(MSG, r#"hello " \ world____"hello \" \\ world""#);
}
{
const CHARS: &str = formatcp!("{0:?} - {0} - {1} - {1:?}", '"', '👀');
assert_eq!(CHARS, r#"'\"' - " - 👀 - '👀'"#);
}§Additional specifiers
const_format macros don’t support width, fill, alignment, sign,
or precision specifiers.