#![cfg_attr(not(doc), no_std)]
#![warn(clippy::pedantic, rust_2018_idioms)]
#[doc(no_inline)]
pub use to_arraystring::{ArrayString, ToArrayString};
pub use aformat_macros::{aformat, aformat_into};
#[doc(hidden)]
pub mod __internal;
#[macro_export]
macro_rules! astr {
($val:expr) => {{
const STR_LEN: usize = ::core::primitive::str::len($val);
::aformat::ArrayString::<STR_LEN>::from($val).unwrap()
}};
}
#[derive(Clone, Copy)]
pub struct CapStr<'a, const MAX_LENGTH: usize>(pub &'a str);
impl<const MAX_LENGTH: usize> core::ops::Deref for CapStr<'_, MAX_LENGTH> {
type Target = str;
fn deref(&self) -> &Self::Target {
for i in (0..MAX_LENGTH).rev() {
if let Some(valid_slice) = self.0.get(..i) {
return valid_slice;
}
}
""
}
}
impl<const MAX_LENGTH: usize> ToArrayString for CapStr<'_, MAX_LENGTH> {
const MAX_LENGTH: usize = MAX_LENGTH;
type ArrayString = ArrayString<MAX_LENGTH>;
fn to_arraystring(self) -> Self::ArrayString {
ArrayString::from(&self).unwrap()
}
}