use crate::error::Error;
use crate::resolver::context::ReadContext;
use crate::resolver::context::WriteContext;
use crate::resolver::type_resolver::TypeResolver;
use crate::serializer::collection::{
read_collection_data, read_collection_type_info, write_collection_data,
write_collection_type_info,
};
use crate::serializer::{ForyDefault, Serializer};
use crate::types::TypeId;
use std::collections::{BTreeSet, HashSet};
use std::mem;
impl<T: Serializer + ForyDefault + Eq + std::hash::Hash> Serializer for HashSet<T> {
fn fory_write_data(&self, context: &mut WriteContext) -> Result<(), Error> {
write_collection_data(self, context, false)
}
fn fory_write_data_generic(
&self,
context: &mut WriteContext,
has_generics: bool,
) -> Result<(), Error> {
write_collection_data(self, context, has_generics)
}
fn fory_write_type_info(context: &mut WriteContext) -> Result<(), Error> {
write_collection_type_info(context, TypeId::SET as u32)
}
fn fory_read_data(context: &mut ReadContext) -> Result<Self, Error> {
read_collection_data(context)
}
fn fory_read_type_info(context: &mut ReadContext) -> Result<(), Error> {
read_collection_type_info(context, TypeId::SET as u32)
}
fn fory_reserved_space() -> usize {
mem::size_of::<i32>()
}
fn fory_get_type_id(_: &TypeResolver) -> Result<TypeId, Error> {
Ok(TypeId::SET)
}
fn fory_type_id_dyn(&self, _: &TypeResolver) -> Result<TypeId, Error> {
Ok(TypeId::SET)
}
fn fory_static_type_id() -> TypeId
where
Self: Sized,
{
TypeId::SET
}
fn as_any(&self) -> &dyn std::any::Any {
self
}
}
impl<T> ForyDefault for HashSet<T> {
fn fory_default() -> Self {
HashSet::new()
}
}
impl<T: Serializer + ForyDefault + Ord> Serializer for BTreeSet<T> {
fn fory_write_data(&self, context: &mut WriteContext) -> Result<(), Error> {
write_collection_data(self, context, false)
}
fn fory_write_data_generic(
&self,
context: &mut WriteContext,
has_generics: bool,
) -> Result<(), Error> {
write_collection_data(self, context, has_generics)
}
fn fory_write_type_info(context: &mut WriteContext) -> Result<(), Error> {
write_collection_type_info(context, TypeId::SET as u32)
}
fn fory_read_data(context: &mut ReadContext) -> Result<Self, Error> {
read_collection_data(context)
}
fn fory_read_type_info(context: &mut ReadContext) -> Result<(), Error> {
read_collection_type_info(context, TypeId::SET as u32)
}
fn fory_reserved_space() -> usize {
mem::size_of::<i32>()
}
fn fory_get_type_id(_: &TypeResolver) -> Result<TypeId, Error> {
Ok(TypeId::SET)
}
fn fory_type_id_dyn(&self, _: &TypeResolver) -> Result<TypeId, Error> {
Ok(TypeId::SET)
}
fn fory_static_type_id() -> TypeId
where
Self: Sized,
{
TypeId::SET
}
fn as_any(&self) -> &dyn std::any::Any {
self
}
}
impl<T> ForyDefault for BTreeSet<T> {
fn fory_default() -> Self {
BTreeSet::new()
}
}