@@ -61,14 +61,16 @@ use std::sync::atomic::Ordering;
61
61
mod container;
62
62
use container:: { TypeHolder , TypeHolderSend } ;
63
63
64
- use std:: any:: TypeId ;
65
64
use std:: any:: Any ;
65
+ use std:: any:: TypeId ;
66
66
use std:: borrow:: Borrow ;
67
67
use std:: convert:: AsRef ;
68
68
use std:: fmt:: { Debug , Display , Pointer } ;
69
69
use std:: hash:: { Hash , Hasher } ;
70
70
use std:: ops:: Deref ;
71
71
72
+ #[ cfg( feature = "rkyv" ) ]
73
+ use rkyv:: { Archive as RkyvArchive , Deserialize as RkyvDeserialize , Serialize as RkyvSerialize } ;
72
74
#[ cfg( feature = "serde" ) ]
73
75
use serde:: { Deserialize , Deserializer , Serialize , Serializer } ;
74
76
#[ cfg( feature = "tinyset" ) ]
@@ -778,6 +780,36 @@ macro_rules! create_impls {
778
780
}
779
781
}
780
782
783
+ #[ cfg( feature = "rkyv" ) ]
784
+ impl <T : $( $traits +) * rkyv:: Archive > rkyv:: Archive for $Intern<T > {
785
+ type Archived = rkyv:: Archived <T >;
786
+ type Resolver = rkyv:: Resolver <T >;
787
+
788
+ #[ allow( clippy:: unit_arg) ]
789
+ #[ inline]
790
+ unsafe fn resolve( & self , pos: usize , resolver: Self :: Resolver , out: * mut Self :: Archived ) {
791
+ self . as_ref( ) . resolve( pos, resolver, out)
792
+ }
793
+ }
794
+
795
+ #[ cfg( feature = "rkyv" ) ]
796
+ impl <T : $( $traits +) * RkyvSerialize <S >, S : rkyv:: Fallible + ?Sized > RkyvSerialize <S > for $Intern<T >
797
+ {
798
+ #[ inline]
799
+ fn serialize( & self , serializer: & mut S ) -> Result <Self :: Resolver , S :: Error > {
800
+ RkyvSerialize :: serialize( self . as_ref( ) , serializer)
801
+ }
802
+ }
803
+
804
+ #[ cfg( feature = "rkyv" ) ]
805
+ impl <T : Eq + Hash + Sync + Send + $( $traits +) * rkyv:: Archive <Archived = impl RkyvDeserialize <T , D >> + ' static , D : rkyv:: Fallible + ?Sized > RkyvDeserialize <$Intern<T >, D > for rkyv:: Archived <$Intern<T >>
806
+ {
807
+ #[ inline]
808
+ fn deserialize( & self , deserializer: & mut D ) -> Result <$Intern<T >, D :: Error > {
809
+ RkyvDeserialize :: <T , D >:: deserialize( self , deserializer) . map( $Intern:: new)
810
+ }
811
+ }
812
+
781
813
#[ cfg( test) ]
782
814
mod $testname {
783
815
use super :: $Intern;
0 commit comments