use core::hash::BuildHasher;
use serde::Deserializer;
use super::DeserializeIn;
use crate::LocalLexicon;
pub(crate) fn cautious_capacity<T>(hint: Option<usize>) -> usize {
const MAX_PREALLOC_BYTES: usize = 1024 * 1024;
hint.unwrap_or(0).min(MAX_PREALLOC_BYTES / core::mem::size_of::<T>().max(1))
}
impl<S: BuildHasher> LocalLexicon<S> {
pub fn deserialize_in<'de, T, D>(&mut self, deserializer: D) -> Result<T, D::Error>
where
T: DeserializeIn<'de, Self>,
D: Deserializer<'de>,
{
T::deserialize_in(self, deserializer)
}
}
#[cfg(feature = "std")]
impl<S: BuildHasher> crate::ThreadedLexicon<S> {
pub fn deserialize_in<'de, T, D>(&self, deserializer: D) -> Result<T, D::Error>
where
T: DeserializeIn<'de, Self>,
D: Deserializer<'de>,
{
T::deserialize_in(&mut self.clone(), deserializer)
}
}