questionable refactoring

This commit is contained in:
2025-03-23 18:40:07 -04:00
parent c766d34b6a
commit 0614d48fcc
14 changed files with 240 additions and 79 deletions
+40
View File
@@ -0,0 +1,40 @@
// this is not even remotely worth it but technically it doesn't use the heap I think xdddddddddd
use std::marker::PhantomData;
pub trait Labeler<S> = Fn(&mut std::fmt::Formatter<'_>, &S) -> std::fmt::Result;
pub trait Labelable<S> {
fn labeled<L: Labeler<S>>(&self, l: L) -> Labeled<Self, L, S>
where
Self: Sized;
}
pub struct Labeled<'a, T, L: Labeler<S>, S> {
data: &'a T,
labeler: L,
pd: PhantomData<S>,
}
pub trait LabeledFmt<S> {
fn fmt_label(
&self,
f: &mut std::fmt::Formatter<'_>,
label: &dyn Labeler<S>,
) -> std::fmt::Result;
}
impl<T: LabeledFmt<S>, S> Labelable<S> for T {
fn labeled<L: Labeler<S>>(&self, l: L) -> Labeled<Self, L, S> {
Labeled {
data: self,
labeler: l,
pd: PhantomData,
}
}
}
impl<T: LabeledFmt<S>, L: Labeler<S>, S> std::fmt::Debug for Labeled<'_, T, L, S> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.data.fmt_label(f, &self.labeler)
}
}
+2
View File
@@ -1,5 +1,7 @@
mod padder;
mod bits;
mod label;
pub use padder::*;
pub use bits::*;
pub use label::*;