1#![doc = include_str!("readme.md")]
2#![feature(new_range_api)]
3#![feature(portable_simd)]
4#![warn(missing_docs)]
5#![doc(html_logo_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
6#![doc(html_favicon_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
7
8pub mod ast;
10pub mod builder;
12
13pub mod language;
18pub mod lexer;
20#[cfg(any(feature = "lsp", feature = "oak-highlight", feature = "oak-pretty-print"))]
22pub mod lsp;
23#[cfg(feature = "mcp")]
25pub mod mcp;
26
27pub mod parser;
29
30pub use crate::{
31 ast::{JsonRoot, JsonValueNode},
32 builder::JsonBuilder,
33 language::JsonLanguage,
34 lexer::JsonLexer,
35 parser::JsonParser,
36};
37
38#[cfg(feature = "oak-highlight")]
40pub use crate::lsp::highlighter::JsonHighlighter;
41
42#[cfg(feature = "serde")]
43pub use crate::language::to_string;
44
45#[cfg(feature = "serde")]
46pub use crate::language::from_str;
47
48pub fn parse(json: &str) -> Result<crate::ast::JsonValueNode, String> {
50 use oak_core::{Builder, parser::session::ParseSession, source::SourceText};
51 let language = JsonLanguage::default();
52 let builder = JsonBuilder::new(&language);
53 let source = SourceText::new(json.to_string());
54 let mut cache = ParseSession::default();
55 let result = builder.build(&source, &[], &mut cache);
56 result.result.map(|root| root.value).map_err(|e| format!("{:?}", e))
57}
58
59pub use oak_macros::json;
60
61#[cfg(feature = "lsp")]
63pub use crate::lsp::JsonLanguageService;
64#[cfg(feature = "mcp")]
69pub use crate::mcp::serve_json_mcp;
70pub use lexer::token_type::JsonTokenType;
71pub use parser::element_type::JsonElementType;