wasmcloud_actor_http_client/
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 Host {
13 binding: String,
14}
15
16#[cfg(feature = "guest")]
17impl Default for Host {
18 fn default() -> Self {
19 Host {
20 binding: "default".to_string(),
21 }
22 }
23}
24
25#[cfg(feature = "guest")]
27pub fn host(binding: &str) -> Host {
28 Host {
29 binding: binding.to_string(),
30 }
31}
32
33#[cfg(feature = "guest")]
35pub fn default() -> Host {
36 Host::default()
37}
38
39#[cfg(feature = "guest")]
40impl Host {
41 pub fn request(
44 &self,
45 method: String,
46 url: String,
47 headers: std::collections::HashMap<String, String>,
48 body: Vec<u8>,
49 ) -> HandlerResult<Response> {
50 let input_args = RequestArgs {
51 method,
52 url,
53 headers,
54 body,
55 };
56 host_call(
57 &self.binding,
58 "wasmcloud:httpclient",
59 "Request",
60 &serialize(input_args)?,
61 )
62 .map(|vec| {
63 let resp = deserialize::<Response>(vec.as_ref()).unwrap();
64 resp
65 })
66 .map_err(|e| e.into())
67 }
68}
69
70#[derive(Debug, PartialEq, Deserialize, Serialize, Default, Clone)]
71pub struct RequestArgs {
72 #[serde(rename = "method")]
73 pub method: String,
74 #[serde(rename = "url")]
75 pub url: String,
76 #[serde(rename = "headers")]
77 pub headers: std::collections::HashMap<String, String>,
78 #[serde(with = "serde_bytes")]
79 #[serde(rename = "body")]
80 pub body: Vec<u8>,
81}
82
83#[derive(Debug, PartialEq, Deserialize, Serialize, Default, Clone)]
85pub struct Response {
86 #[serde(rename = "statusCode")]
87 pub status_code: u32,
88 #[serde(rename = "status")]
89 pub status: String,
90 #[serde(rename = "header")]
91 pub header: std::collections::HashMap<String, String>,
92 #[serde(with = "serde_bytes")]
93 #[serde(rename = "body")]
94 pub body: Vec<u8>,
95}
96
97pub fn serialize<T>(
101 item: T,
102) -> ::std::result::Result<Vec<u8>, Box<dyn std::error::Error + Send + Sync>>
103where
104 T: Serialize,
105{
106 let mut buf = Vec::new();
107 item.serialize(&mut Serializer::new(&mut buf).with_struct_map())?;
108 Ok(buf)
109}
110
111pub fn deserialize<'de, T: Deserialize<'de>>(
115 buf: &[u8],
116) -> ::std::result::Result<T, Box<dyn std::error::Error + Send + Sync>> {
117 let mut de = Deserializer::new(Cursor::new(buf));
118 match Deserialize::deserialize(&mut de) {
119 Ok(t) => Ok(t),
120 Err(e) => Err(format!("Failed to de-serialize: {}", e).into()),
121 }
122}