wast_encoder/helpers/
mod.rs

1use std::fmt::Write;
2
3use crate::{encoder::WastEncoder, WasiModule, WasiType, WasiValue};
4
5pub trait ToWasiType {
6    fn to_wasi_type(&self) -> WasiType;
7}
8
9pub trait ToWasiValue {
10    fn to_wasi_value(&self) -> WasiValue;
11}
12
13/// Mark for type who can import to the component instance
14pub(crate) trait AliasOuter {
15    fn alias_outer<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
16}
17
18pub(crate) trait AliasExport {
19    fn alias_export<W: Write>(&self, w: &mut WastEncoder<W>, module: &WasiModule) -> std::fmt::Result;
20}
21
22/// Mark for type who can define in component section
23pub(crate) trait ComponentDefine {
24    fn component_define<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
25}
26
27pub(crate) trait LowerFunction {
28    fn lower_function<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
29    fn lower_import<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
30}
31
32pub(crate) trait TypeDefinition {
33    fn upper_type_define<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
34    fn lower_type_define<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
35}
36
37pub(crate) trait TypeReference {
38    fn upper_type<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
39    fn lower_type<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
40    fn lower_type_inner<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
41}
42
43pub(crate) trait TypeReferenceInput {
44    fn upper_input<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
45    fn lower_input<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
46}
47
48pub(crate) trait TypeReferenceOutput {
49    fn upper_output<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
50    fn lower_output<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
51}
52
53pub(crate) trait EmitDefault {
54    /// Emit default instruction for the value
55    fn emit_default<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
56}
57
58pub(crate) trait EmitConstant {
59    /// Emit constant instruction for the value
60    fn emit_constant<W: Write>(&self, w: &mut WastEncoder<W>) -> std::fmt::Result;
61}