#![allow(clippy::missing_safety_doc)]
#[cfg(target_arch = "wasm32")]
pub use std::arch::wasm32::v128;
mod macros;
pub mod extism;
pub mod memory;
mod to_memory;
pub mod config;
pub mod var;
#[cfg(feature = "http")]
pub mod http;
pub use anyhow::Error;
pub use extism_convert::*;
pub use extism_convert::{FromBytes, FromBytesOwned, ToBytes};
pub use extism_pdk_derive::{host_fn, plugin_fn, shared_fn};
pub use memory::{Memory, MemoryPointer};
pub use to_memory::ToMemory;
#[cfg(feature = "http")]
pub use extism_manifest::HttpRequest;
#[cfg(feature = "http")]
pub use http::HttpResponse;
pub type FnResult<T> = Result<T, WithReturnCode<Error>>;
pub type SharedFnResult<T> = Result<T, Error>;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LogLevel {
Info,
Debug,
Warn,
Error,
}
pub use serde_json as json;
pub struct Base64(pub String);
pub fn input_bytes() -> Vec<u8> {
unsafe { extism::load_input() }
}
pub fn input<T: FromBytesOwned>() -> Result<T, Error> {
let data = input_bytes();
T::from_bytes_owned(&data)
}
pub fn output<T: ToMemory>(data: T) -> Result<(), Error> {
let data = data.to_memory()?;
data.set_output();
Ok(())
}
pub struct WithReturnCode<T>(pub T, pub i32);
impl<E: Into<Error>> From<E> for WithReturnCode<Error> {
fn from(value: E) -> Self {
WithReturnCode::new(value.into(), -1)
}
}
impl std::fmt::Debug for WithReturnCode<Error> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.0.fmt(f)
}
}
impl<T: ToMemory> ToMemory for WithReturnCode<T> {
fn to_memory(&self) -> Result<Memory, Error> {
self.0.to_memory()
}
fn status(&self) -> i32 {
self.1
}
}
impl<T> WithReturnCode<T> {
pub fn new(x: T, status: i32) -> Self {
WithReturnCode(x, status)
}
}