1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
pub struct ExternRef {
    pub value: i64,
}

extern "C" {
    fn externref_drop(extern_ref: i64);
}

impl From<i64> for ExternRef {
    fn from(value: i64) -> Self {
        ExternRef { value }
    }
}

impl Into<i64> for &ExternRef {
    fn into(self) -> i64 {
        self.value
    }
}

impl Drop for ExternRef {
    fn drop(&mut self) {
        unsafe {
            externref_drop(self.value);
        }
    }
}