wasmcloud_component/
lib.rs1mod 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}