soma_provider_guest/
lib.rs1wit_bindgen::generate!({
8 path: "../../../wit/soma-provider",
9 world: "provider",
10});
11
12pub trait ProviderCore {
15 fn invoke(input: serde_json::Value) -> Result<serde_json::Value, String>;
16}
17
18pub fn invoke_json<P: ProviderCore>(input: String) -> Result<String, String> {
21 let input = serde_json::from_str(&input).map_err(|error| error.to_string())?;
22 let output = P::invoke(input)?;
23 serde_json::to_string(&output).map_err(|error| error.to_string())
24}
25
26pub fn http(request: &impl serde::Serialize) -> Result<serde_json::Value, String> {
28 let request = serde_json::to_string(request).map_err(|error| error.to_string())?;
29 let result = soma::provider::host::http(&request)?;
30 serde_json::from_str(&result).map_err(|error| error.to_string())
31}
32
33pub fn secret(name: &str) -> Result<String, String> {
35 soma::provider::host::secret(name)
36}
37
38pub fn state_get(key: &str) -> Result<serde_json::Value, String> {
40 let result = soma::provider::host::state_get(key)?;
41 serde_json::from_str(&result).map_err(|error| error.to_string())
42}
43
44pub fn state_put(key: &str, value: &impl serde::Serialize) -> Result<(), String> {
46 let value = serde_json::to_string(value).map_err(|error| error.to_string())?;
47 soma::provider::host::state_put(key, &value)
48}
49
50pub fn log(level: &str, message: &str, fields: &impl serde::Serialize) -> Result<(), String> {
52 let fields = serde_json::to_string(fields).map_err(|error| error.to_string())?;
53 soma::provider::host::log(level, message, &fields)
54}
55
56pub fn metric(name: &str, value: f64, attributes: &impl serde::Serialize) -> Result<(), String> {
58 let attributes = serde_json::to_string(attributes).map_err(|error| error.to_string())?;
59 soma::provider::host::metric(name, value, &attributes)
60}
61
62pub fn progress(current: u64, total: Option<u64>, message: Option<&str>) -> Result<(), String> {
64 soma::provider::host::progress(current, total, message)
65}