wit-bindgen-cli 0.61.1

CLI tool to generate bindings for WIT documents and the component model.
import wit.test.lists.test;
import wit.common;

@witExport("test:lists/to-test", "empty-list-param")
void emptyListParam(in WitList!ubyte a) {
}

@witExport("test:lists/to-test", "empty-string-param")
void emptyStringParam(in WitString a) {
}

@witExport("test:lists/to-test", "empty-list-result")
WitList!ubyte emptyListResult() {
    return WitList!ubyte();
}

@witExport("test:lists/to-test", "empty-string-result")
WitString emptyStringResult() {
    return WitString();
}

@witExport("test:lists/to-test", "list-param")
void listParam(in WitList!ubyte a) {
}

@witExport("test:lists/to-test", "list-param2")
void listParam2(in WitString a) {
}

@witExport("test:lists/to-test", "list-param3")
void listParam3(in WitList!WitString a) {
}

@witExport("test:lists/to-test", "list-param4")
void listParam4(in WitList!(WitList!WitString) a) {
}

@witExport("test:lists/to-test", "list-param5")
void listParam5(in WitList!(Tuple!(ubyte, uint, ubyte)) a) {
}

@witExport("test:lists/to-test", "list-param-large")
void listParamLarge(in WitList!WitString a) {
}

@witExport("test:lists/to-test", "list-result")
WitList!ubyte listResult() {
    immutable ubyte[5] outputs = [1, 2, 3, 4, 5];
    return outputs.witList.witClone;
}

@witExport("test:lists/to-test", "list-result2")
WitString listResult2() {
    return "hello!".witList.witClone;
}

@witExport("test:lists/to-test", "list-result3")
WitList!WitString listResult3() {
    immutable WitString[2] outputs = ["hello,".witList, "world!".witList];
    return outputs.witList.witClone;
}

template listMinmax(T, U, string suffix) {
    @witExport("test:lists/to-test", "list-minmax"~suffix)
    Tuple!(WitList!T, WitList!U) listMinmax(in WitList!T a, in WitList!U b) {
        return tuple(a, b).witClone;
    }
}

@witExport("test:lists/to-test", "list-roundtrip")
WitList!ubyte listRoundtrip(in WitList!ubyte a) {
    return a.witClone;
}

@witExport("test:lists/to-test", "string-roundtrip")
WitString stringRoundtrip(in WitString a) {
    return a.witClone;
}

@witExport("test:lists/to-test", "wasi-http-headers-roundtrip")
WitList!(Tuple!(WitString, WitList!ubyte)) wasiHttpHeadersRoundtrip(in WitList!(Tuple!(WitString, WitList!ubyte)) a) {
    return a.witClone;
}


extern extern(C) size_t walloc_allocated_bytes;
@witExport("test:lists/to-test", "allocated-bytes")
size_t allocatedBytes() {
    return walloc_allocated_bytes;
}


alias Exports = wit.test.lists.test.Exports!(
    emptyListParam,
    emptyStringParam,
    emptyListResult,
    emptyStringResult,

    listParam,
    listParam2,
    listParam3,
    listParam4,
    listParam5,
    listParamLarge,
    listResult,
    listResult2,
    listResult3,

    listMinmax!(ubyte,  byte,   "8"),
    listMinmax!(ushort, short,  "16"),
    listMinmax!(uint,   int,    "32"),
    listMinmax!(ulong,  long,   "64"),
    listMinmax!(float,  double, "-float"),

    listRoundtrip,

    stringRoundtrip,

    wasiHttpHeadersRoundtrip,

    allocatedBytes
);