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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#[cfg(target_arch = "wasm32")]
#[link(wasm_import_module = "env")]
extern "C" {
    pub fn output(ptr: *const u8, len: u32);
    pub fn register_panic(
        msg_ptr: *const u8,
        msg_len: u32,
        file_ptr: *const u8,
        file_len: u32,
        line: u32,
        column: u32,
    );
}

#[cfg(target_arch = "wasm32")]
#[link(wasm_import_module = "logger")]
extern "C" {
    pub fn println(ptr: *const u8, len: usize);
}

pub mod state {
    #[cfg(target_arch = "wasm32")]
    #[link(wasm_import_module = "state")]
    extern "C" {
        pub fn get_first(store_idx: u32, key_ptr: *const u8, key_len: u32, output_ptr: u32) -> u32;
        pub fn get_last(store_idx: u32, key_ptr: *const u8, key_len: u32, output_ptr: u32) -> u32;
        pub fn get_at(
            store_idx: u32,
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            output_ptr: u32,
        ) -> u32;
        pub fn has_first(store_idx: u32, key_ptr: *const u8, key_len: u32) -> u32;
        pub fn has_last(store_idx: u32, key_ptr: *const u8, key_len: u32) -> u32;
        pub fn has_at(store_idx: u32, ord: i64, key_ptr: *const u8, key_len: u32) -> u32;
        pub fn set(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
        pub fn set_if_not_exists(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
        pub fn append(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
        pub fn delete_prefix(ord: i64, prefix_ptr: *const u8, prefix_len: u32);
        pub fn add_bigint(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
        pub fn add_int64(ord: i64, key_ptr: *const u8, key_len: u32, value: i64);
        pub fn add_float64(ord: i64, key_ptr: *const u8, key_len: u32, value: f64);
        pub fn add_bigdecimal(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
        pub fn set_min_int64(ord: i64, key_ptr: *const u8, key_len: u32, value: i64);
        pub fn set_min_bigint(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
        pub fn set_min_float64(ord: i64, key_ptr: *const u8, key_len: u32, value: f64);
        pub fn set_min_bigdecimal(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
        pub fn set_max_int64(ord: i64, key_ptr: *const u8, key_len: u32, value: i64);
        pub fn set_max_bigint(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
        pub fn set_max_float64(ord: i64, key_ptr: *const u8, key_len: u32, value: f64);
        pub fn set_max_bigdecimal(
            ord: i64,
            key_ptr: *const u8,
            key_len: u32,
            value_ptr: *const u8,
            value_len: u32,
        );
    }
}