use std::fmt::Write;
use crate::{encoder::WastEncoder, WasiModule, WasiType, WasiValue};
pub trait ToWasiType {
fn to_wasi_type(&self) -> WasiType;
}
pub trait ToWasiValue {
fn to_wasi_value(&self) -> WasiValue;
}
pub(crate) trait AliasOuter {
fn alias_outer<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}
pub(crate) trait AliasExport {
fn alias_export<W: Write>(&self, w: &mut WastEncoder<W>, module: &WasiModule) -> std::fmt::Result;
}
pub(crate) trait ComponentDefine {
fn component_define<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}
pub(crate) trait LowerFunction {
fn lower_function<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
fn lower_import<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}
pub(crate) trait TypeDefinition {
fn upper_type_define<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
fn lower_type_define<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}
pub(crate) trait TypeReference {
fn upper_type<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
fn lower_type<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
fn lower_type_inner<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}
pub(crate) trait TypeReferenceInput {
fn upper_input<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
fn lower_input<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}
pub(crate) trait TypeReferenceOutput {
fn upper_output<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
fn lower_output<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}
pub(crate) trait EmitDefault {
fn emit_default<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}
pub(crate) trait EmitConstant {
fn emit_constant<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
}