#![no_std]
#![doc(html_root_url = "https://docs.rs/fn-formats/0.0.5")]
#![warn(clippy::pedantic)]
#[cfg(doctest)]
pub mod readme {
doc_comment::doctest!("../README.md");
}
use core::fmt::{
self, Binary, Debug, Display, Formatter, LowerExp, LowerHex, Octal, Pointer, UpperExp, UpperHex,
};
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct DebugFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Debug for DebugFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for DebugFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct DisplayFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Display for DisplayFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for DisplayFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct DebugDisplayFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Debug for DebugDisplayFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Display for DebugDisplayFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for DebugDisplayFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct DebugDisplayFmtSeparate<DebugFmt, DisplayFmt>
where
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
{
pub debug: DebugFmt,
pub display: DisplayFmt,
}
impl<
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
> Debug for DebugDisplayFmtSeparate<DebugFmt, DisplayFmt>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.debug)(f)
}
}
impl<
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
> Display for DebugDisplayFmtSeparate<DebugFmt, DisplayFmt>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.display)(f)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct BinaryFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Binary for BinaryFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for BinaryFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct LowerExpFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> LowerExp for LowerExpFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for LowerExpFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct LowerHexFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> LowerHex for LowerHexFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for LowerHexFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct OctalFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Octal for OctalFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for OctalFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct PointerFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Pointer for PointerFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for PointerFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct UpperExpFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> UpperExp for UpperExpFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for UpperExpFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct UpperHexFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> UpperHex for UpperHexFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for UpperHexFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct ComprehensiveFmt<Fmt>(pub Fmt)
where
Fmt: Fn(&mut Formatter) -> fmt::Result;
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Binary for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Debug for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Display for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> LowerExp for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> LowerHex for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Octal for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> Pointer for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> UpperExp for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> UpperHex for ComprehensiveFmt<Fmt> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
self.0(f)
}
}
impl<Fmt: Fn(&mut Formatter) -> fmt::Result> From<Fmt> for ComprehensiveFmt<Fmt> {
fn from(fmt: Fmt) -> Self {
Self(fmt)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct ComprehensiveFmtSeparate<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> {
pub binary: BinaryFmt,
pub debug: DebugFmt,
pub display: DisplayFmt,
pub lower_exp: LowerExpFmt,
pub lower_hex: LowerHexFmt,
pub octal: OctalFmt,
pub pointer: PointerFmt,
pub upper_exp: UpperExpFmt,
pub upper_hex: UpperHexFmt,
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> Binary
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.binary)(f)
}
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> Debug
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.debug)(f)
}
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> Display
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.display)(f)
}
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> LowerExp
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.lower_exp)(f)
}
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> LowerHex
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.lower_hex)(f)
}
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> Octal
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.octal)(f)
}
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> Pointer
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.pointer)(f)
}
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> UpperExp
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.upper_exp)(f)
}
}
impl<
BinaryFmt: Fn(&mut Formatter) -> fmt::Result,
DebugFmt: Fn(&mut Formatter) -> fmt::Result,
DisplayFmt: Fn(&mut Formatter) -> fmt::Result,
LowerExpFmt: Fn(&mut Formatter) -> fmt::Result,
LowerHexFmt: Fn(&mut Formatter) -> fmt::Result,
OctalFmt: Fn(&mut Formatter) -> fmt::Result,
PointerFmt: Fn(&mut Formatter) -> fmt::Result,
UpperExpFmt: Fn(&mut Formatter) -> fmt::Result,
UpperHexFmt: Fn(&mut Formatter) -> fmt::Result,
> UpperHex
for ComprehensiveFmtSeparate<
BinaryFmt,
DebugFmt,
DisplayFmt,
LowerExpFmt,
LowerHexFmt,
OctalFmt,
PointerFmt,
UpperExpFmt,
UpperHexFmt,
>
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
(self.upper_hex)(f)
}
}