diff --git a/Cargo.lock b/Cargo.lock index 9fb061d94..97aa0a13b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1740,6 +1740,7 @@ dependencies = [ name = "rkyv" version = "0.4.1" dependencies = [ + "cranelift-entity", "indexmap", "memoffset", "ptr_meta", diff --git a/lib/vm/src/memory.rs b/lib/vm/src/memory.rs index 8ab785605..0d159c5aa 100644 --- a/lib/vm/src/memory.rs +++ b/lib/vm/src/memory.rs @@ -17,6 +17,7 @@ use std::ptr::NonNull; use std::sync::Mutex; use thiserror::Error; use wasmer_types::{Bytes, MemoryType, Pages}; +use rkyv::{Serialize as RkyvSerialize, Deserialize as RkyvDeserialize, Archive}; /// Error type describing things that can go wrong when operating on Wasm Memories. #[derive(Error, Debug, Clone, PartialEq, Hash)] @@ -61,7 +62,7 @@ pub enum MemoryError { } /// Implementation styles for WebAssembly linear memory. -#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, RkyvSerialize, RkyvDeserialize, Archive)] pub enum MemoryStyle { /// The actual memory can be resized and moved. Dynamic { diff --git a/lib/vm/src/table.rs b/lib/vm/src/table.rs index 66fb0e8a1..a97b2118a 100644 --- a/lib/vm/src/table.rs +++ b/lib/vm/src/table.rs @@ -15,9 +15,10 @@ use std::fmt; use std::ptr::NonNull; use std::sync::Mutex; use wasmer_types::{TableType, Type as ValType}; +use rkyv::{Serialize as RkyvSerialize, Deserialize as RkyvDeserialize, Archive}; /// Implementation styles for WebAssembly tables. -#[derive(Debug, Clone, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, Hash, Serialize, Deserialize, RkyvSerialize, RkyvDeserialize, Archive)] pub enum TableStyle { /// Signatures are stored in the table and checked in the caller. CallerChecksSignature, diff --git a/lib/wasmer-types/src/indexes.rs b/lib/wasmer-types/src/indexes.rs index e840dff64..a7a2038f8 100644 --- a/lib/wasmer-types/src/indexes.rs +++ b/lib/wasmer-types/src/indexes.rs @@ -10,8 +10,10 @@ use rkyv::{Serialize as RkyvSerialize, Deserialize as RkyvDeserialize, Archive}; #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct LocalFunctionIndex(u32); entity_impl!(LocalFunctionIndex); +entity_impl!(ArchivedLocalFunctionIndex); /// Index type of a table defined locally inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] @@ -29,69 +31,88 @@ entity_impl!(LocalMemoryIndex); #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct LocalGlobalIndex(u32); entity_impl!(LocalGlobalIndex); +entity_impl!(ArchivedLocalGlobalIndex); /// Index type of a function (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct FunctionIndex(u32); entity_impl!(FunctionIndex); +entity_impl!(ArchivedFunctionIndex); /// Index type of a table (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct TableIndex(u32); entity_impl!(TableIndex); +entity_impl!(ArchivedTableIndex); /// Index type of a global variable (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct GlobalIndex(u32); entity_impl!(GlobalIndex); +entity_impl!(ArchivedGlobalIndex); /// Index type of a linear memory (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct MemoryIndex(u32); entity_impl!(MemoryIndex); +entity_impl!(ArchivedMemoryIndex); /// Index type of a signature (imported or local) inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct SignatureIndex(u32); entity_impl!(SignatureIndex); +entity_impl!(ArchivedSignatureIndex); /// Index type of a passive data segment inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct DataIndex(u32); entity_impl!(DataIndex); +entity_impl!(ArchivedDataIndex); /// Index type of a passive element segment inside the WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct ElemIndex(u32); entity_impl!(ElemIndex); +entity_impl!(ArchivedElemIndex); /// Index type of a custom section inside a WebAssembly module. #[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub struct CustomSectionIndex(u32); entity_impl!(CustomSectionIndex); +entity_impl!(ArchivedCustomSectionIndex); /// An entity to export. #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub enum ExportIndex { /// Function export. Function(FunctionIndex), @@ -107,6 +128,7 @@ pub enum ExportIndex { #[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] #[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))] #[cfg_attr(feature = "enable-rkyv", derive(RkyvSerialize, RkyvDeserialize, Archive))] +#[cfg_attr(feature = "enable-rkyv", archive(derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)))] pub enum ImportIndex { /// Function import. Function(FunctionIndex),