use std::marker::PhantomData;
use derivative::Derivative;
pub fn with_index<T, F>(mut f: F) -> impl FnMut(&T) -> bool
where
F: FnMut(usize, &T) -> bool,
{
let mut i = 0;
move |item| (f(i, item), i += 1).0
}
pub fn all_eq<T: PartialEq>(arr: &[T]) -> bool {
arr.windows(2).all(|w| w[0] == w[1])
}
#[derive(Derivative)]
#[derivative(Default(bound = ""), Copy(bound = ""), Clone(bound = ""))]
pub struct SerializablePhantom<T>(PhantomData<fn() -> T>);
impl<T> serde::Serialize for SerializablePhantom<T> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_unit_struct(std::any::type_name::<T>())
}
}