Skip to main content

oak_wit_component/
lib.rs

1#![doc = include_str!("readme.md")]
2#![feature(new_range_api)]
3#![warn(missing_docs)]
4//! Wit-component support for the Oak language framework.
5
6pub mod ast;
7pub mod builder;
8pub mod language;
9pub mod lexer;
10#[cfg(any(feature = "lsp", feature = "oak-highlight", feature = "oak-pretty-print"))]
11pub mod lsp;
12pub mod parser;
13
14pub use crate::{ast::WitRoot, builder::WitBuilder, language::WitLanguage, lexer::WitLexer, parser::WitParser};
15pub use lexer::token_type::WitTokenType;
16pub use parser::element_type::WitElementType;
17
18/// Parses a WIT string.
19pub fn parse(wit: &str) -> Result<crate::ast::WitRoot, String> {
20    use oak_core::{Builder, parser::session::ParseSession, source::SourceText};
21    let language = WitLanguage::default();
22    let builder = WitBuilder::new(&language);
23    let source = SourceText::new(wit.to_string());
24    let mut cache = ParseSession::default();
25    let result = builder.build(&source, &[], &mut cache);
26    result.result.map_err(|e| format!("{:?}", e))
27}