1use std::os::raw::{c_char, c_uchar, c_uint, c_void};
2
3#[repr(u32)]
4#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
5pub enum PlamoScheme {
6 PlamoSchemeHttp,
7 PlamoSchemeHttps,
8}
9
10#[repr(u32)]
11#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
12pub enum PlamoHttpVersion {
13 PlamoHttpVersionHttp09,
14 PlamoHttpVersionHttp10,
15 PlamoHttpVersionHttp11,
16 PlamoHttpVersionHttp20,
17}
18
19#[repr(C)]
20#[derive(Debug, Copy, Clone)]
21pub struct PlamoString {
22 _unused: [u8; 0],
23}
24
25extern "C" {
26 pub fn plamo_string_new(value: *const c_char) -> *mut PlamoString;
27 pub fn plamo_string_destroy(plamo_string: *mut PlamoString);
28 pub fn plamo_string_get_char(plamo_string: *const PlamoString) -> *const c_char;
29}
30
31#[repr(C)]
32#[derive(Debug, Copy, Clone)]
33pub struct PlamoStringArray {
34 _unused: [u8; 0],
35}
36
37extern "C" {
38 pub fn plamo_string_array_new() -> *mut PlamoStringArray;
39 pub fn plamo_string_array_destroy(plamo_string_array: *mut PlamoStringArray);
40 pub fn plamo_string_array_length(plamo_string_array: *const PlamoStringArray) -> usize;
41 pub fn plamo_string_array_for_each(
42 plamo_string_array: *const PlamoStringArray,
43 callback: Option<unsafe extern "C" fn(arg1: *const c_char)>,
44 );
45 pub fn plamo_string_array_get_at(
46 plamo_string_array: *const PlamoStringArray,
47 index: usize,
48 ) -> *const c_char;
49 pub fn plamo_string_array_get_first(
50 plamo_string_array: *const PlamoStringArray,
51 ) -> *const c_char;
52 pub fn plamo_string_array_get_last(
53 plamo_string_array: *const PlamoStringArray,
54 ) -> *const c_char;
55 pub fn plamo_string_array_add(
56 plamo_string_array: *mut PlamoStringArray,
57 value: *const c_char,
58 );
59 pub fn plamo_string_array_remove_at(
60 plamo_string_array: *mut PlamoStringArray,
61 index: usize,
62 ) -> bool;
63}
64
65#[repr(C)]
66#[derive(Debug, Copy, Clone)]
67pub struct PlamoByteArray {
68 _unused: [u8; 0],
69}
70
71extern "C" {
72 pub fn plamo_byte_array_new(
73 body: *const c_uchar,
74 length: usize,
75 ) -> *mut PlamoByteArray;
76 pub fn plamo_byte_array_destroy(plamo_byte_array: *mut PlamoByteArray);
77 pub fn plamo_byte_array_get_body(
78 plamo_byte_array: *const PlamoByteArray,
79 ) -> *const c_uchar;
80 pub fn plamo_byte_array_get_body_size(plamo_byte_array: *const PlamoByteArray) -> usize;
81}
82
83#[repr(C)]
84#[derive(Debug, Copy, Clone)]
85pub struct PlamoHttpHeader {
86 _unused: [u8; 0],
87}
88
89extern "C" {
90 pub fn plamo_http_header_new() -> *mut PlamoHttpHeader;
91 pub fn plamo_http_header_destroy(plamo_http_header: *mut PlamoHttpHeader);
92 pub fn plamo_http_header_for_each(
93 plamo_http_header: *mut PlamoHttpHeader,
94 callback: Option<
95 unsafe extern "C" fn(arg1: *const c_char, arg2: *const c_char),
96 >,
97 );
98 pub fn plamo_http_header_get(
99 plamo_http_header: *mut PlamoHttpHeader,
100 key: *const c_char,
101 ) -> *mut PlamoStringArray;
102 pub fn plamo_http_header_add(
103 plamo_http_header: *mut PlamoHttpHeader,
104 key: *const c_char,
105 value: *const c_char,
106 );
107 pub fn plamo_http_header_remove(
108 plamo_http_header: *mut PlamoHttpHeader,
109 key: *const c_char,
110 ) -> bool;
111}
112
113#[repr(C)]
114#[derive(Debug, Copy, Clone)]
115pub struct PlamoHttpQuery {
116 _unused: [u8; 0],
117}
118
119extern "C" {
120 pub fn plamo_http_query_new() -> *mut PlamoHttpQuery;
121 pub fn plamo_http_query_destroy(plamo_http_query: *mut PlamoHttpQuery);
122 pub fn plamo_http_query_for_each(
123 plamo_http_query: *mut PlamoHttpQuery,
124 callback: Option<
125 unsafe extern "C" fn(arg1: *const c_char, arg2: *const c_char),
126 >,
127 );
128 pub fn plamo_http_query_get(
129 plamo_http_query: *mut PlamoHttpQuery,
130 key: *const c_char,
131 ) -> *mut PlamoStringArray;
132 pub fn plamo_http_query_add(
133 plamo_http_query: *mut PlamoHttpQuery,
134 key: *const c_char,
135 value: *const c_char,
136 );
137 pub fn plamo_http_query_remove(
138 plamo_http_query: *mut PlamoHttpQuery,
139 key: *const c_char,
140 ) -> bool;
141}
142
143pub type PlamoDefinedHttpMethod = usize;
144
145pub const PLAMO_HTTP_METHOD_GET: PlamoDefinedHttpMethod = usize::max_value();
146pub const PLAMO_HTTP_METHOD_POST: PlamoDefinedHttpMethod = usize::max_value() - 1;
147pub const PLAMO_HTTP_METHOD_PUT: PlamoDefinedHttpMethod = usize::max_value() - 2;
148pub const PLAMO_HTTP_METHOD_DELETE: PlamoDefinedHttpMethod = usize::max_value() - 3;
149pub const PLAMO_HTTP_METHOD_HEAD: PlamoDefinedHttpMethod = usize::max_value() - 4;
150pub const PLAMO_HTTP_METHOD_CONNECT: PlamoDefinedHttpMethod = usize::max_value() - 5;
151pub const PLAMO_HTTP_METHOD_OPTIONS: PlamoDefinedHttpMethod = usize::max_value() - 6;
152pub const PLAMO_HTTP_METHOD_TRACE: PlamoDefinedHttpMethod = usize::max_value() - 7;
153pub const PLAMO_HTTP_METHOD_PATCH: PlamoDefinedHttpMethod = usize::max_value() - 8;
154
155#[repr(C)]
156#[derive(Copy, Clone)]
157pub union PlamoHttpMethod {
158 pub defined_http_method: PlamoDefinedHttpMethod,
159 pub undefined_http_method: *mut c_char,
160}
161
162unsafe impl Send for PlamoHttpMethod {}
163unsafe impl Sync for PlamoHttpMethod {}
164
165extern "C" {
166 pub fn plamo_http_method_new(method: usize) -> PlamoHttpMethod;
167 pub fn plamo_http_method_destroy(plamo_http_method: *mut PlamoHttpMethod);
168}
169
170#[repr(C)]
171#[derive(Copy, Clone)]
172pub struct PlamoRequest {
173 pub scheme: PlamoScheme,
174 pub version: PlamoHttpVersion,
175 pub method: PlamoHttpMethod,
176 pub path: *mut PlamoString,
177 pub query: *mut PlamoHttpQuery,
178 pub header: *mut PlamoHttpHeader,
179 pub body: *mut PlamoByteArray,
180}
181
182extern "C" {
183 pub fn plamo_request_new(
184 scheme: PlamoScheme,
185 version: PlamoHttpVersion,
186 method: PlamoHttpMethod,
187 path: *const c_char,
188 query: *mut PlamoHttpQuery,
189 header: *mut PlamoHttpHeader,
190 body: *mut PlamoByteArray,
191 ) -> *mut PlamoRequest;
192 pub fn plamo_request_destroy(plamo_request: *mut PlamoRequest);
193}
194
195#[repr(C)]
196#[derive(Debug, Copy, Clone)]
197pub struct PlamoResponse {
198 pub status_code: c_uint,
199 pub header: *mut PlamoHttpHeader,
200 pub body: *mut PlamoByteArray,
201}
202
203extern "C" {
204 pub fn plamo_response_new() -> *mut PlamoResponse;
205 pub fn plamo_response_destroy(plamo_response: *mut PlamoResponse);
206}
207
208#[repr(C)]
209#[derive(Debug, Copy, Clone)]
210pub struct PlamoFormUrlencoded {
211 _unused: [u8; 0],
212}
213
214extern "C" {
215 pub fn plamo_form_urlencoded_new(plamo_request: *const PlamoRequest) -> *mut PlamoFormUrlencoded;
216 pub fn plamo_form_urlencoded_destroy(plamo_form_urlencoded: *mut PlamoFormUrlencoded);
217 pub fn plamo_form_urlencoded_for_each(
218 plamo_form_urlencoded: *const PlamoFormUrlencoded,
219 callback: Option<
220 unsafe extern "C" fn(arg1: *const c_char, arg2: *const c_char),
221 >
222 );
223 pub fn plamo_form_urlencoded_get(plamo_form_urlencoded: *const PlamoFormUrlencoded, key: *const c_char) -> *const PlamoStringArray;
224}
225
226#[repr(C)]
227#[derive(Debug, Copy, Clone)]
228pub struct PlamoFormDataFile {
229 _unused: [u8; 0],
230}
231
232extern "C" {
233 pub fn plamo_form_data_file_get_content_type(plamo_form_data_file: *const PlamoFormDataFile) -> *const c_char;
234 pub fn plamo_form_data_file_get_file_name(plamo_form_data_file: *const PlamoFormDataFile) -> *const c_char;
235 pub fn plamo_form_data_file_get_body(plamo_form_data_file: *const PlamoFormDataFile) -> *const c_uchar;
236 pub fn plamo_form_data_file_get_body_size(plamo_form_data_file: *const PlamoFormDataFile) -> usize;
237}
238
239#[repr(C)]
240#[derive(Debug, Copy, Clone)]
241pub struct PlamoFormDataField {
242 pub text: *mut PlamoString,
243 pub file: *mut PlamoFormDataFile,
244}
245
246#[repr(C)]
247#[derive(Debug, Copy, Clone)]
248pub struct PlamoFormDataFieldArray {
249 _unused: [u8; 0],
250}
251
252extern "C" {
253 pub fn plamo_form_data_field_array_length(plamo_form_data_field_array: *const PlamoFormDataFieldArray) -> usize;
254 pub fn plamo_form_data_field_array_for_each(
255 plamo_form_data_field_array: *const PlamoFormDataFieldArray,
256 callback: Option<
257 unsafe extern "C" fn(*const PlamoFormDataField),
258 >
259 );
260 pub fn plamo_form_data_field_array_get_at(plamo_form_data_field_array: *const PlamoFormDataFieldArray, index: usize) -> *const PlamoFormDataField;
261 pub fn plamo_form_data_field_array_get_first(plamo_form_data_field_array: *const PlamoFormDataFieldArray) -> *const PlamoFormDataField;
262 pub fn plamo_form_data_field_array_get_last(plamo_form_data_field_array: *const PlamoFormDataFieldArray) -> *const PlamoFormDataField;
263}
264
265#[repr(C)]
266#[derive(Debug, Copy, Clone)]
267pub struct PlamoFormData {
268 _unused: [u8; 0],
269}
270
271extern "C" {
272 pub fn plamo_form_data_new(plamo_request: *const PlamoRequest) -> *mut PlamoFormData;
273 pub fn plamo_form_data_destroy(plamo_form_data: *mut PlamoFormData);
274 pub fn plamo_form_data_for_each(
275 plamo_form_data: *const PlamoFormData,
276 callback: Option<
277 unsafe extern "C" fn(arg1: *const c_char, arg2: *const PlamoFormDataField),
278 >
279 );
280 pub fn plamo_form_data_get(plamo_form_data: *const PlamoFormData, key: *const c_char) -> *const PlamoFormDataFieldArray;
281}
282
283#[repr(C)]
284#[derive(Debug, Copy, Clone)]
285pub struct PlamoMiddleware {
286 pub config: *const c_void,
287 pub callback: Option<
288 unsafe extern "C" fn(
289 arg1: *const c_void,
290 arg2: *const PlamoRequest,
291 arg3: *mut PlamoResponse,
292 ),
293 >,
294}
295
296extern "C" {
297 pub fn plamo_middleware_new(
298 config: *const c_void,
299 callback: Option<
300 unsafe extern "C" fn(
301 arg1: *const c_void,
302 arg2: *const PlamoRequest,
303 arg3: *mut PlamoResponse,
304 ),
305 >,
306 ) -> *mut PlamoMiddleware;
307 pub fn plamo_middleware_destroy(plamo_middleware: *mut PlamoMiddleware);
308}
309
310#[repr(C)]
311#[derive(Debug, Copy, Clone)]
312pub struct PlamoApp {
313 _unused: [u8; 0],
314}
315
316extern "C" {
317 pub fn plamo_app_new() -> *mut PlamoApp;
318 pub fn plamo_app_destroy(plamo_app: *mut PlamoApp);
319 pub fn plamo_app_add_middleware(
320 plamo_app: *mut PlamoApp,
321 plamo_middleware: *const PlamoMiddleware,
322 );
323 pub fn plamo_app_execute(
324 plamo_app: *const PlamoApp,
325 plamo_request: *const PlamoRequest,
326 ) -> *mut PlamoResponse;
327}