#[derive(Debug, Default, Clone, Eq, PartialEq, Hash)]
pub struct Features {
pub threads: bool,
pub reference_types: bool,
pub simd: bool,
pub bulk_memory: bool,
pub multi_value: bool,
pub tail_call: bool,
pub multi_memory: bool,
pub memory64: bool,
pub exceptions: bool,
pub extended_const: bool,
pub relaxed_simd: bool,
}
impl Features {
pub fn new() -> Self {
Self {
threads: true,
reference_types: true,
simd: true,
bulk_memory: true,
multi_value: true,
tail_call: true,
multi_memory: true,
memory64: true,
exceptions: true,
extended_const: true,
relaxed_simd: true,
}
}
}
impl From<Features> for wasmparser::WasmFeatures {
fn from(value: Features) -> Self {
let mut wasm_features = wasmparser::WasmFeatures::default();
wasm_features.set(wasmparser::WasmFeatures::THREADS, value.threads);
wasm_features.set(wasmparser::WasmFeatures::REFERENCE_TYPES, value.reference_types);
wasm_features.set(wasmparser::WasmFeatures::SIMD, value.simd);
wasm_features.set(wasmparser::WasmFeatures::BULK_MEMORY, value.bulk_memory);
wasm_features.set(wasmparser::WasmFeatures::MULTI_VALUE, value.multi_value);
wasm_features.set(wasmparser::WasmFeatures::TAIL_CALL, value.tail_call);
wasm_features.set(wasmparser::WasmFeatures::MULTI_MEMORY, value.multi_memory);
wasm_features.set(wasmparser::WasmFeatures::MEMORY64, value.memory64);
wasm_features.set(wasmparser::WasmFeatures::EXCEPTIONS, value.exceptions);
wasm_features.set(wasmparser::WasmFeatures::EXTENDED_CONST, value.extended_const);
wasm_features.set(wasmparser::WasmFeatures::RELAXED_SIMD, value.relaxed_simd);
wasm_features.set(wasmparser::WasmFeatures::MUTABLE_GLOBAL, true);
wasm_features.set(wasmparser::WasmFeatures::SATURATING_FLOAT_TO_INT, true);
wasm_features.set(wasmparser::WasmFeatures::FLOATS, true);
wasm_features.set(wasmparser::WasmFeatures::SIGN_EXTENSION, true);
wasm_features.set(wasmparser::WasmFeatures::GC_TYPES, true);
wasm_features.set(wasmparser::WasmFeatures::COMPONENT_MODEL, false);
wasm_features.set(wasmparser::WasmFeatures::FUNCTION_REFERENCES, false);
wasm_features.set(wasmparser::WasmFeatures::MEMORY_CONTROL, false);
wasm_features.set(wasmparser::WasmFeatures::GC, false);
wasm_features
}
}