wasmcloud_actor_http_client/
generated.rs

1extern 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/// Creates a named host binding
26#[cfg(feature = "guest")]
27pub fn host(binding: &str) -> Host {
28    Host {
29        binding: binding.to_string(),
30    }
31}
32
33/// Creates the default host binding
34#[cfg(feature = "guest")]
35pub fn default() -> Host {
36    Host::default()
37}
38
39#[cfg(feature = "guest")]
40impl Host {
41    /// Perform an HTTP request with the linked http-client provider. Your actor must
42    /// have an active configured link in order to invoke this function.
43    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/// Response object that is returned from an HTTP request
84#[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
97/// The standard function for serializing codec structs into a format that can be
98/// used for message exchange between actor and host. Use of any other function to
99/// serialize could result in breaking incompatibilities.
100pub 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
111/// The standard function for de-serializing codec structs from a format suitable
112/// for message exchange between actor and host. Use of any other function to
113/// deserialize could result in breaking incompatibilities.
114pub 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}