wasmer_compiler/types/
unwind.rs1use crate::lib::std::vec::Vec;
9use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
10#[cfg(feature = "enable-serde")]
11use serde::{Deserialize, Serialize};
12
13#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
21#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
22#[derive(RkyvSerialize, RkyvDeserialize, Archive, Debug, Clone, PartialEq, Eq)]
23#[rkyv(derive(Debug))]
24pub enum CompiledFunctionUnwindInfo {
25    WindowsX64(Vec<u8>),
27
28    Dwarf,
30}
31
32#[allow(missing_docs)]
34#[derive(Debug, Clone, PartialEq, Eq)]
35pub enum CompiledFunctionUnwindInfoReference<'a> {
36    WindowsX64(&'a [u8]),
37    Dwarf,
38    CompactUnwind,
39}
40
41#[allow(missing_docs)]
43pub trait CompiledFunctionUnwindInfoLike<'a> {
44    fn get(&'a self) -> CompiledFunctionUnwindInfoReference<'a>;
45}
46
47impl<'a> CompiledFunctionUnwindInfoLike<'a> for CompiledFunctionUnwindInfo {
48    fn get(&'a self) -> CompiledFunctionUnwindInfoReference<'a> {
49        match self {
50            Self::WindowsX64(v) => CompiledFunctionUnwindInfoReference::WindowsX64(v.as_ref()),
51            Self::Dwarf => CompiledFunctionUnwindInfoReference::Dwarf,
52        }
53    }
54}
55
56impl<'a> CompiledFunctionUnwindInfoLike<'a> for ArchivedCompiledFunctionUnwindInfo {
57    fn get(&'a self) -> CompiledFunctionUnwindInfoReference<'a> {
58        match self {
59            Self::WindowsX64(v) => CompiledFunctionUnwindInfoReference::WindowsX64(v.as_ref()),
60            Self::Dwarf => CompiledFunctionUnwindInfoReference::Dwarf,
61        }
62    }
63}