#[cfg(feature = "alloc")]
use crate::{_dep::_alloc::fmt::format, String};
use crate::{FmtArguments, FmtFromFn, FmtResult, FmtWrite, FmtWriter, Formatter};
use ::core::fmt::{from_fn, write};
#[doc = crate::_tags!(text namespace)]
#[doc = crate::_doc_location!("text/fmt")]
#[derive(Debug)]
pub struct Fmt;
impl Fmt {
#[must_use]
#[cfg(feature = "alloc")]
#[cfg_attr(nightly_doc, doc(cfg(feature = "alloc")))]
pub fn format(args: FmtArguments<'_>) -> String {
format(args)
}
pub fn format_buf<'a>(buf: &'a mut [u8], args: FmtArguments) -> Result<&'a str, &'a str> {
let mut w = FmtWriter::new(buf);
let _ = Fmt::write(&mut w, args);
if w.is_truncated() { Err(w.into_str()) } else { Ok(w.into_str()) }
}
pub fn write(output: &mut dyn FmtWrite, args: FmtArguments<'_>) -> FmtResult<()> {
write(output, args)
}
pub fn from_fn<F: Fn(&mut Formatter<'_>) -> FmtResult<()>>(f: F) -> FmtFromFn<F> {
from_fn(f)
}
}