aformat 0.1.8

A no-std and no-alloc version of format! using ToArrayString
Documentation
use std::cell::Cell;

use aformat::{aformat, aformat_into, astr, ArrayString};
use utils::OnlyFormatOnce;

mod utils;

#[test]
pub fn basic_aformat() {
    let name = astr!("Walter Hartwell White");
    let street_num = 308_u16;

    let out = aformat!("My name is {name}, I live at {street_num} Negra Aroyo Lane.");
    assert_eq!(
        out.as_str(),
        "My name is Walter Hartwell White, I live at 308 Negra Aroyo Lane."
    );
}

#[test]
pub fn expr_aformat() {
    let out = aformat!("2 + 2 = {}", 2_u8 + 2);
    assert_eq!(out.as_str(), "2 + 2 = 4");
}

#[test]
fn direct_const_use() {
    const N: usize = 1;
    let out = aformat!("{N}");

    assert_eq!(out.as_str(), "1");
}

#[test]
pub fn duplicated_arguments() {
    let was_formatted = Cell::new(false);
    let num = OnlyFormatOnce(1_u8, &was_formatted);

    let out = aformat!("{num} {}", num);
    assert_eq!(out.as_str(), "1 1");
}

#[test]
pub fn concat_string() {
    let out = aformat!(concat!("Hel", "lo", " {}"), 1234_u16);
    assert_eq!(out.as_str(), "Hello 1234");
}

#[test]
pub fn aformat_into() {
    let mut out_buf = ArrayString::<32>::new();

    let age = 18_u8;
    aformat_into!(out_buf, "You are {} years old!", age);

    assert_eq!(out_buf.as_str(), "You are 18 years old!");
}

#[test]
pub fn astr() {
    const STR: &str = "Hello World";

    let const_val = astr!(STR);
    let lit_val = astr!("Hello World");

    for val in [const_val, lit_val] {
        assert_eq!(val.as_str(), "Hello World");
        assert_eq!(val.capacity(), val.len());
    }
}

#[allow(unused)]
#[deny(non_snake_case)]
fn test_non_snake_case<const N: usize>() {
    aformat!("{N}");
}