wasmcloud_actor_http_server/
generated.rs1extern crate rmp_serde as rmps;
2use rmps::{Deserializer, Serializer};
3use serde::{Deserialize, Serialize};
4use std::io::Cursor;
5
6#[cfg(feature = "guest")]
7extern crate wapc_guest as guest;
8#[cfg(feature = "guest")]
9use guest::prelude::*;
10
11#[cfg(feature = "guest")]
12pub struct Handlers {}
13
14#[cfg(feature = "guest")]
15impl Handlers {
16 pub fn register_handle_request(f: fn(Request) -> HandlerResult<Response>) {
18 *HANDLE_REQUEST.write().unwrap() = Some(f);
19 register_function(&"HandleRequest", handle_request_wrapper);
20 }
21}
22
23#[cfg(feature = "guest")]
24lazy_static::lazy_static! {
25static ref HANDLE_REQUEST: std::sync::RwLock<Option<fn(Request) -> HandlerResult<Response>>> = std::sync::RwLock::new(None);
26}
27
28#[cfg(feature = "guest")]
29fn handle_request_wrapper(input_payload: &[u8]) -> CallResult {
30 let input = deserialize::<Request>(input_payload)?;
31 let lock = HANDLE_REQUEST.read().unwrap().unwrap();
32 let result = lock(input)?;
33 serialize(result)
34}
35
36#[derive(Debug, PartialEq, Deserialize, Serialize, Default, Clone)]
38pub struct Request {
39 #[serde(rename = "method")]
40 pub method: String,
41 #[serde(rename = "path")]
42 pub path: String,
43 #[serde(rename = "queryString")]
44 pub query_string: String,
45 #[serde(rename = "header")]
46 pub header: std::collections::HashMap<String, String>,
47 #[serde(with = "serde_bytes")]
48 #[serde(rename = "body")]
49 pub body: Vec<u8>,
50}
51
52#[derive(Debug, PartialEq, Deserialize, Serialize, Default, Clone)]
54pub struct Response {
55 #[serde(rename = "statusCode")]
56 pub status_code: u32,
57 #[serde(rename = "status")]
58 pub status: String,
59 #[serde(rename = "header")]
60 pub header: std::collections::HashMap<String, String>,
61 #[serde(with = "serde_bytes")]
62 #[serde(rename = "body")]
63 pub body: Vec<u8>,
64}
65
66pub fn serialize<T>(
70 item: T,
71) -> ::std::result::Result<Vec<u8>, Box<dyn std::error::Error + Send + Sync>>
72where
73 T: Serialize,
74{
75 let mut buf = Vec::new();
76 item.serialize(&mut Serializer::new(&mut buf).with_struct_map())?;
77 Ok(buf)
78}
79
80pub fn deserialize<'de, T: Deserialize<'de>>(
84 buf: &[u8],
85) -> ::std::result::Result<T, Box<dyn std::error::Error + Send + Sync>> {
86 let mut de = Deserializer::new(Cursor::new(buf));
87 match Deserialize::deserialize(&mut de) {
88 Ok(t) => Ok(t),
89 Err(e) => Err(format!("Failed to de-serialize: {}", e).into()),
90 }
91}