@@ -3,11 +3,12 @@ use core::{
33 ops:: { Index , IndexMut } ,
44} ;
55use cranelift_entity:: EntityRef ;
6+ use serde:: { Serialize , ser:: SerializeSeq } ;
67use wasmtime_core:: error:: OutOfMemory ;
78
89/// Like [`cranelift_entity::PrimaryMap`] but enforces fallible allocation for
910/// all methods that allocate.
10- #[ derive( Clone , Hash , PartialEq , Eq ) ]
11+ #[ derive( Hash , PartialEq , Eq ) ]
1112pub struct PrimaryMap < K , V >
1213where
1314 K : EntityRef ,
3637 }
3738}
3839
40+ impl < K , V > From < crate :: collections:: Vec < V > > for PrimaryMap < K , V >
41+ where
42+ K : EntityRef ,
43+ {
44+ fn from ( values : crate :: collections:: Vec < V > ) -> Self {
45+ let values: :: alloc:: vec:: Vec < V > = values. into ( ) ;
46+ let inner = cranelift_entity:: PrimaryMap :: from ( values) ;
47+ Self { inner }
48+ }
49+ }
50+
51+ impl < K , V > serde:: ser:: Serialize for PrimaryMap < K , V >
52+ where
53+ K : EntityRef ,
54+ V : Serialize ,
55+ {
56+ fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
57+ where
58+ S : serde:: Serializer ,
59+ {
60+ let mut seq = serializer. serialize_seq ( Some ( self . len ( ) ) ) ?;
61+ for val in self . values ( ) {
62+ seq. serialize_element ( val) ?;
63+ }
64+ seq. end ( )
65+ }
66+ }
67+
68+ impl < ' de , K , V > serde:: de:: Deserialize < ' de > for PrimaryMap < K , V >
69+ where
70+ K : EntityRef ,
71+ V : serde:: de:: Deserialize < ' de > ,
72+ {
73+ fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
74+ where
75+ D : serde:: Deserializer < ' de > ,
76+ {
77+ let v: crate :: collections:: Vec < V > = serde:: de:: Deserialize :: deserialize ( deserializer) ?;
78+ Ok ( Self :: from ( v) )
79+ }
80+ }
81+
3982impl < K , V > PrimaryMap < K , V >
4083where
4184 K : EntityRef ,
0 commit comments