#![feature(associated_type_defaults)]
#![feature(extend_one)]
mod modules;
mod structures;
use std::{io::Write, path::Path, str::FromStr, sync::Arc};
use nyar_wasm::{
CanonicalWasi, DependentGraph, Identifier, WasiFunction, WasiModule, WasiParameter, WasiRecordField, WasiRecordType,
WasiResource, WasiType, WasiTypeReference, WasiVariantItem, WasiVariantType,
};
pub use crate::{
modules::{ResolveContext, ValkyrieModule},
structures::{ValkyrieField, ValkyrieMethod, ValkyrieStructure},
};
pub fn define_io_types() -> DependentGraph {
let mut global = DependentGraph::default();
let m_debugger = WasiModule::from_str("unstable:debugger/print").unwrap();
let m_io_error = WasiModule::from_str("wasi:io/error@0.2.0").unwrap();
let m_io_streams = WasiModule::from_str("wasi:io/streams@0.2.0").unwrap();
{
global += WasiResource::new(m_io_error.clone(), "error", "std::io::IoError");
global += WasiResource::new(m_io_streams.clone(), "output-stream", "std::io::OutputStream");
global += WasiResource::new(m_io_streams.clone(), "input-stream", "std::io::InputStream");
let mut stream_error = WasiVariantType::new("std::io::StreamError");
stream_error += WasiVariantItem::new("LastOperationFailed")
.with_fields(WasiTypeReference::new(Identifier::from_str("std::io::IoError").unwrap()));
stream_error += WasiVariantItem::new("Closed");
global += stream_error;
}
{
let mut point = WasiRecordType::new(Identifier::from_str("Point").unwrap());
point += WasiRecordField::new(Arc::from("x"), WasiType::Float32);
point += WasiRecordField::new(Arc::from("y"), WasiType::Float32);
global += point;
let mut printer = WasiFunction::external(m_debugger.clone(), "print-point", "test::print_point");
printer.inputs.push(WasiParameter::new("value", WasiTypeReference::new(Identifier::from_str("Point").unwrap())));
global += printer;
}
{
let wasi_cli_get = WasiModule::from_str("wasi:cli/stdin@0.2.0").unwrap();
let mut function = WasiFunction::external(wasi_cli_get.clone(), "get-stdin", "std::io::standard_input");
function.output = Some(WasiTypeReference::owned(Identifier::from_str("std::io::InputStream").unwrap()).into());
global += function;
}
{
let wasi_cli_get = WasiModule::from_str("wasi:cli/stdout@0.2.0").unwrap();
let mut function = WasiFunction::external(wasi_cli_get.clone(), "get-stdout", "std::io::standard_output");
function.output = Some(WasiTypeReference::owned(Identifier::from_str("std::io::OutputStream").unwrap()).into());
global += function;
}
{
let wasi_cli_get = WasiModule::from_str("wasi:cli/stderr@0.2.0").unwrap();
let mut function = WasiFunction::external(wasi_cli_get.clone(), "get-stderr", "std::io::standard_error");
function.output = Some(WasiTypeReference::owned(Identifier::from_str("std::io::OutputStream").unwrap()).into());
global += function;
}
{
}
{
}
{
let mut function = WasiFunction::external(m_debugger.clone(), "print-i32", "print_i32");
function.inputs.push(WasiParameter::new("value", WasiType::Integer32 { signed: true }));
global += function;
}
{
let wasi_cli_get = WasiModule::from_str("unstable:debugger/print").unwrap();
let mut function = WasiFunction::external(wasi_cli_get.clone(), "print-u32", "print_u32");
function.inputs.push(WasiParameter::new("value", WasiType::Integer32 { signed: true }));
global += function;
}
global
}