pub mod bindgen {
wit_bindgen::generate!({
world: "program",
macro_export
});
}
pub use bindgen::Error;
pub mod programs;
pub use architecture::*;
pub use programs::*;
pub mod architecture {
use super::bindgen::Error;
use serde::{Deserialize, Serialize};
pub trait Architecture: Serialize + for<'de> Deserialize<'de> {
type Address: Eq + Serialize + for<'de> Deserialize<'de> + From<Self::AddressRaw>;
type AddressRaw: Eq + Serialize + for<'de> Deserialize<'de> + From<Self::Address>;
type TransactionRequest: GetSender<Self>
+ GetReceiver<Self>
+ Serialize
+ for<'de> Deserialize<'de>
+ Parse<Self>
+ TryParse<Self>;
}
pub trait GetSender<A: Architecture> {
fn sender(&self) -> Option<A::Address>;
}
pub trait GetReceiver<A: Architecture> {
fn receiver(&self) -> Option<A::Address>;
}
pub trait Parse<A: Architecture> {
fn parse(raw_tx: String) -> Result<A::TransactionRequest, Error>;
}
pub trait TryParse<A: Architecture> {
fn try_parse(raw_tx: &[u8]) -> Result<A::TransactionRequest, Error>;
}
}
pub mod prelude {
pub use getrandom::register_custom_getrandom;
pub use super::architecture::*;
use core::num::NonZeroU32;
use getrandom::Error;
pub fn always_fail(_buf: &mut [u8]) -> Result<(), Error> {
let code = NonZeroU32::new(Error::CUSTOM_START.saturating_add(1)).unwrap();
Err(Error::from(code))
}
}