use std::{
hash::Hash,
marker::PhantomData,
ops::{Deref, DerefMut},
};
use serde::Serialize;
use type_reg::untagged::{BoxDt, TypeMap};
#[derive(Clone, Debug, Serialize)]
#[serde(transparent)] pub struct FlowParams<K>(TypeMap<K, BoxDt>, PhantomData<K>)
where
K: Eq + Hash;
impl<K> FlowParams<K>
where
K: Eq + Hash,
{
pub fn new() -> Self {
Self::default()
}
pub fn with_capacity(capacity: usize) -> Self {
Self(TypeMap::with_capacity_typed(capacity), PhantomData)
}
pub fn into_inner(self) -> TypeMap<K, BoxDt> {
self.0
}
}
impl<K> Default for FlowParams<K>
where
K: Eq + Hash,
{
fn default() -> Self {
Self(TypeMap::default(), PhantomData)
}
}
impl<K> Deref for FlowParams<K>
where
K: Eq + Hash,
{
type Target = TypeMap<K, BoxDt>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl<K> DerefMut for FlowParams<K>
where
K: Eq + Hash,
{
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl<K> From<TypeMap<K, BoxDt>> for FlowParams<K>
where
K: Eq + Hash,
{
fn from(type_map: TypeMap<K, BoxDt>) -> Self {
Self(type_map, PhantomData)
}
}