1/// Constructs an [`AsciiStr`] constant from an ascii string,
2///
3/// # Compile-time errors
4///
5/// This macro produces a compile-time error by indexing an empty array with
6/// the index of the first non-ascii byte.
7///
8/// # Example
9///
10/// ```rust
11/// use const_format::ascii_str;
12///
13/// let fooo = ascii_str!("hello");
14///
15/// assert_eq!(fooo.as_str(), "hello");
16///
17/// // You can pass constants as arguments!
18/// const BAR_S: &str = "world";
19/// let bar = ascii_str!(BAR_S);
20///
21/// assert_eq!(bar.as_str(), "world");
22///
23/// ```
24///
25/// ```compile_fail
26/// use const_format::ascii_str;
27///
28/// let fooo = ascii_str!("Γειά σου Κόσμε!");
29///
30/// ```
31///
32/// [`AsciiStr`]: ./struct.AsciiStr.html
33///
34#[cfg_attr(feature = "__docsrs", doc(cfg(feature = "fmt")))]
35#[cfg(feature = "fmt")]
36#[macro_export]
37macro_rules! ascii_str {
38 ($str:expr $(,)*) => {{
39 const __CF_ASCII_STR_CONSTANT: $crate::AsciiStr<'static> = {
40 match $crate::AsciiStr::new($str.as_bytes()) {
41 Ok(x) => x,
42 $crate::pmr::Err(e) => [][e.invalid_from],
43 }
44 };
45 __CF_ASCII_STR_CONSTANT
46 }};
47}
48