feat: add a histrical wit-bindgen

This commit is contained in:
2023-01-01 00:25:48 +08:00
parent 01e8f5a959
commit aa50d63aec
419 changed files with 45283 additions and 1 deletions

View File

@@ -0,0 +1,63 @@
//! The WebAssembly component tooling.
#![deny(missing_docs)]
use anyhow::{bail, Result};
use std::str::FromStr;
use wasm_encoder::CanonicalOption;
use wit_parser::Interface;
#[cfg(feature = "cli")]
pub mod cli;
mod decoding;
mod encoding;
mod printing;
mod validation;
pub use encoding::*;
pub use printing::*;
/// Supported string encoding formats.
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum StringEncoding {
/// Strings are encoded with UTF-8.
UTF8,
/// Strings are encoded with UTF-16.
UTF16,
/// Strings are encoded with compact UTF-16 (i.e. Latin1+UTF-16).
CompactUTF16,
}
impl Default for StringEncoding {
fn default() -> Self {
StringEncoding::UTF8
}
}
impl FromStr for StringEncoding {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self> {
match s {
"utf8" => Ok(StringEncoding::UTF8),
"utf16" => Ok(StringEncoding::UTF16),
"compact-utf16" => Ok(StringEncoding::CompactUTF16),
_ => bail!("unknown string encoding `{}`", s),
}
}
}
impl From<StringEncoding> for wasm_encoder::CanonicalOption {
fn from(e: StringEncoding) -> wasm_encoder::CanonicalOption {
match e {
StringEncoding::UTF8 => CanonicalOption::UTF8,
StringEncoding::UTF16 => CanonicalOption::UTF16,
StringEncoding::CompactUTF16 => CanonicalOption::CompactUTF16,
}
}
}
/// Decode an "interface-only" component to a wit `Interface`.
pub fn decode_interface_component(bytes: &[u8]) -> Result<Interface> {
decoding::InterfaceDecoder::new(&decoding::ComponentInfo::new(bytes)?).decode()
}