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