wagen/
link.rs

1use crate::*;
2
3pub struct ExtismFunctions {
4    pub input_load_u8: FunctionIndex,
5    pub input_load_u64: FunctionIndex,
6    pub input_length: FunctionIndex,
7    pub length: FunctionIndex,
8    pub length_unsafe: FunctionIndex,
9    pub alloc: FunctionIndex,
10    pub free: FunctionIndex,
11    pub output_set: FunctionIndex,
12    pub error_set: FunctionIndex,
13    pub config_get: FunctionIndex,
14    pub var_get: FunctionIndex,
15    pub var_set: FunctionIndex,
16    pub store_u8: FunctionIndex,
17    pub load_u8: FunctionIndex,
18    pub store_u64: FunctionIndex,
19    pub load_u64: FunctionIndex,
20    pub http_request: FunctionIndex,
21    pub http_status_code: FunctionIndex,
22    pub log_info: FunctionIndex,
23    pub log_debug: FunctionIndex,
24    pub log_warn: FunctionIndex,
25    pub log_error: FunctionIndex,
26}
27
28impl<'a> Module<'a> {
29    pub fn link_extism(&mut self) -> ExtismFunctions {
30        let input_load_u8 = self.import(
31            "extism:host/env",
32            "input_load_u8",
33            None,
34            [ValType::I64],
35            [ValType::I32],
36        );
37        let input_load_u64 = self.import(
38            "extism:host/env",
39            "input_load_u64",
40            None,
41            [ValType::I64],
42            [ValType::I64],
43        );
44        let input_length = self.import("extism:host/env", "input_length", None, [], [ValType::I64]);
45        let length = self.import(
46            "extism:host/env",
47            "length",
48            None,
49            [ValType::I64],
50            [ValType::I64],
51        );
52        let length_unsafe = self.import(
53            "extism:host/env",
54            "length_unsafe",
55            None,
56            [ValType::I64],
57            [ValType::I64],
58        );
59        let alloc = self.import(
60            "extism:host/env",
61            "alloc",
62            None,
63            [ValType::I64],
64            [ValType::I64],
65        );
66        let free = self.import("extism:host/env", "free", None, [ValType::I64], []);
67        let output_set = self.import(
68            "extism:host/env",
69            "output_set",
70            None,
71            [ValType::I64, ValType::I64],
72            [],
73        );
74        let error_set = self.import("extism:host/env", "error_set", None, [ValType::I64], []);
75        let config_get = self.import(
76            "extism:host/env",
77            "config_get",
78            None,
79            [ValType::I64],
80            [ValType::I64],
81        );
82        let var_get = self.import(
83            "extism:host/env",
84            "var_get",
85            None,
86            [ValType::I64],
87            [ValType::I64],
88        );
89        let var_set = self.import(
90            "extism:host/env",
91            "var_set",
92            None,
93            [ValType::I64, ValType::I64],
94            [],
95        );
96        let store_u8 = self.import(
97            "extism:host/env",
98            "store_u8",
99            None,
100            [ValType::I64, ValType::I32],
101            [],
102        );
103        let load_u8 = self.import(
104            "extism:host/env",
105            "load_u8",
106            None,
107            [ValType::I64],
108            [ValType::I32],
109        );
110        let store_u64 = self.import(
111            "extism:host/env",
112            "store_u64",
113            None,
114            [ValType::I64, ValType::I64],
115            [],
116        );
117        let load_u64 = self.import(
118            "extism:host/env",
119            "load_u64",
120            None,
121            [ValType::I64],
122            [ValType::I64],
123        );
124        let http_request = self.import(
125            "extism:host/env",
126            "http_request",
127            None,
128            [ValType::I64, ValType::I64],
129            [ValType::I64],
130        );
131        let http_status_code = self.import(
132            "extism:host/env",
133            "http_status_code",
134            None,
135            [],
136            [ValType::I32],
137        );
138
139        let log_info = self.import("extism:host/env", "log_info", None, [ValType::I64], []);
140        let log_debug = self.import("extism:host/env", "log_info", None, [ValType::I64], []);
141        let log_warn = self.import("extism:host/env", "log_info", None, [ValType::I64], []);
142        let log_error = self.import("extism:host/env", "log_info", None, [ValType::I64], []);
143
144        ExtismFunctions {
145            input_load_u8,
146            input_load_u64,
147            input_length,
148            length,
149            length_unsafe,
150            alloc,
151            free,
152            output_set,
153            error_set,
154            config_get,
155            var_get,
156            var_set,
157            store_u8,
158            load_u8,
159            store_u64,
160            load_u64,
161            http_request,
162            http_status_code,
163            log_info,
164            log_debug,
165            log_warn,
166            log_error,
167        }
168    }
169}