wasmcloud_component/
lib.rs

1mod bindings {
2    wit_bindgen::generate!({
3        world: "interfaces",
4        with: {
5            "wasi:blobstore/blobstore@0.2.0-draft": generate,
6            "wasi:blobstore/container@0.2.0-draft": generate,
7            "wasi:blobstore/types@0.2.0-draft": generate,
8            "wasi:clocks/monotonic-clock@0.2.2": ::wasi::clocks::monotonic_clock,
9            "wasi:config/store@0.2.0-draft": generate,
10            "wasi:http/outgoing-handler@0.2.2": ::wasi::http::outgoing_handler,
11            "wasi:http/types@0.2.2": ::wasi::http::types,
12            "wasi:io/error@0.2.2": ::wasi::io::error,
13            "wasi:io/poll@0.2.2": ::wasi::io::poll,
14            "wasi:io/streams@0.2.2": ::wasi::io::streams,
15            "wasi:keyvalue/atomics@0.2.0-draft": generate,
16            "wasi:keyvalue/batch@0.2.0-draft": generate,
17            "wasi:keyvalue/store@0.2.0-draft": generate,
18            "wasi:logging/logging@0.1.0-draft": generate,
19            "wasi:random/random@0.2.2": ::wasi::random::random,
20            "wasmcloud:bus/lattice@2.0.0": generate,
21            "wasmcloud:messaging/consumer@0.2.0": generate,
22            "wasmcloud:messaging/types@0.2.0": generate,
23        }
24    });
25}
26
27pub mod wasi {
28    pub use super::bindings::wasi::*;
29    pub use ::wasi::*;
30}
31
32pub use bindings::wasmcloud;
33
34mod wrappers;
35pub use wrappers::*;
36
37pub trait From<T> {
38    fn from(v: T) -> Self;
39}
40
41pub trait Into<T> {
42    fn into(v: Self) -> T;
43}
44
45impl<T, U: From<T>> Into<U> for T {
46    fn into(v: Self) -> U {
47        U::from(v)
48    }
49}
50
51impl<T, U: From<T>> TryFrom<T> for U {
52    type Error = core::convert::Infallible;
53
54    fn try_from(v: T) -> Result<Self, Self::Error> {
55        Ok(U::from(v))
56    }
57}
58
59pub trait TryFrom<T>
60where
61    Self: Sized,
62{
63    type Error;
64
65    fn try_from(v: T) -> Result<Self, Self::Error>;
66}
67
68pub trait TryInto<T> {
69    type Error;
70
71    fn try_into(v: Self) -> Result<T, Self::Error>;
72}
73
74impl<T, U: TryFrom<T>> TryInto<U> for T {
75    type Error = U::Error;
76
77    fn try_into(v: Self) -> Result<U, Self::Error> {
78        U::try_from(v)
79    }
80}
81
82#[cfg(test)]
83mod test {
84    use super::*;
85
86    #[allow(dead_code)]
87    struct Component;
88
89    #[allow(dead_code)]
90    impl Component {
91        fn use_host_exports() {
92            wasi::logging::logging::log(wasi::logging::logging::Level::Trace, "context", "message");
93            wasi::logging::logging::log(wasi::logging::logging::Level::Debug, "context", "message");
94            wasi::logging::logging::log(wasi::logging::logging::Level::Info, "context", "message");
95            wasi::logging::logging::log(wasi::logging::logging::Level::Warn, "context", "message");
96            wasi::logging::logging::log(wasi::logging::logging::Level::Error, "context", "message");
97            wasi::logging::logging::log(
98                wasi::logging::logging::Level::Critical,
99                "context",
100                "message",
101            );
102
103            let _: Vec<u8> = wasi::random::random::get_random_bytes(4);
104            let _: u64 = wasi::random::random::get_random_u64();
105
106            let _ = wasi::config::store::get("foo");
107            let _ = wasi::config::store::get_all();
108
109            let _ = wasmcloud::bus::lattice::set_link_name(
110                "default",
111                vec![
112                    wasmcloud::bus::lattice::CallTargetInterface::new(
113                        "wasi",
114                        "blobstore",
115                        "blobstore",
116                    ),
117                    wasmcloud::bus::lattice::CallTargetInterface::new(
118                        "wasi", "keyvalue", "eventual",
119                    ),
120                    wasmcloud::bus::lattice::CallTargetInterface::new("wasi", "logging", "logging"),
121                    wasmcloud::bus::lattice::CallTargetInterface::new(
122                        "wasmcloud",
123                        "messaging",
124                        "consumer",
125                    ),
126                ],
127            );
128        }
129    }
130}