1#![allow(clippy::missing_safety_doc)]
2
3#[cfg(target_arch = "wasm32")]
4pub use std::arch::wasm32::v128;
5
6mod macros;
7
8pub mod extism;
9pub mod memory;
10mod to_memory;
11
12pub mod config;
14
15pub mod var;
17
18#[cfg(feature = "http")]
19pub mod http;
21
22pub use anyhow::Error;
23pub use extism_convert::*;
24pub use extism_convert::{FromBytes, FromBytesOwned, ToBytes};
25pub use extism_pdk_derive::{host_fn, plugin_fn, shared_fn};
26pub use memory::{ManagedMemory, Memory, MemoryPointer};
27pub use to_memory::ToMemory;
28
29#[cfg(feature = "http")]
30pub use extism_manifest::HttpRequest;
32
33#[cfg(feature = "http")]
34pub use http::HttpResponse;
36
37pub type FnResult<T> = Result<T, WithReturnCode<Error>>;
39
40pub type SharedFnResult<T> = Result<T, Error>;
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq)]
45pub enum LogLevel {
46 Trace,
47 Debug,
48 Info,
49 Warn,
50 Error,
51}
52
53impl LogLevel {
54 pub const fn to_int(self) -> i32 {
55 match self {
56 LogLevel::Trace => 0,
57 LogLevel::Debug => 1,
58 LogLevel::Info => 2,
59 LogLevel::Warn => 3,
60 LogLevel::Error => 4,
61 }
62 }
63}
64
65pub use serde_json as json;
67
68pub struct Base64(pub String);
70
71pub fn input_bytes() -> Vec<u8> {
73 unsafe { extism::load_input() }
74}
75
76pub fn input<T: FromBytesOwned>() -> Result<T, Error> {
78 let data = input_bytes();
79 T::from_bytes_owned(&data)
80}
81
82pub fn output<T: ToMemory>(data: T) -> Result<(), Error> {
84 let data = data.to_memory()?;
85 data.set_output();
86 Ok(())
87}
88
89pub struct WithReturnCode<T>(pub T, pub i32);
90
91impl<E: Into<Error>> From<E> for WithReturnCode<Error> {
92 fn from(value: E) -> Self {
93 WithReturnCode::new(value.into(), -1)
94 }
95}
96
97impl std::fmt::Debug for WithReturnCode<Error> {
98 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
99 self.0.fmt(f)
100 }
101}
102
103impl<T: ToMemory> ToMemory for WithReturnCode<T> {
104 fn to_memory(&self) -> Result<Memory, Error> {
105 self.0.to_memory()
106 }
107
108 fn status(&self) -> i32 {
109 self.1
110 }
111}
112
113impl<T> WithReturnCode<T> {
114 pub fn new(x: T, status: i32) -> Self {
115 WithReturnCode(x, status)
116 }
117}