#![deny(missing_docs)]
pub mod ast;
pub mod lex;
pub mod parser;
mod strings;
pub mod untyped;
pub mod value;
pub mod wasm;
pub mod writer;
#[cfg(feature = "wasmtime")]
pub mod wasmtime;
use parser::Parser;
use wasm::WasmValue;
use writer::Writer;
pub fn from_str<V: WasmValue>(ty: &V::Type, s: &str) -> Result<V, parser::ParserError> {
let mut parser = Parser::new(s);
let value = parser.parse_value(ty)?;
parser.finish()?;
Ok(value)
}
pub fn to_string(val: &impl WasmValue) -> Result<String, writer::WriterError> {
let mut buf = vec![];
Writer::new(&mut buf).write_value(val)?;
Ok(String::from_utf8(buf).unwrap_or_else(|err| panic!("invalid UTF-8: {err:?}")))
}
fn canonicalize_nan32(val: f32) -> f32 {
if val.is_nan() {
f32::from_bits(0x7fc00000)
} else {
val
}
}
fn canonicalize_nan64(val: f64) -> f64 {
if val.is_nan() {
f64::from_bits(0x7ff8000000000000)
} else {
val
}
}