1#![doc = include_str!("readme.md")]
2pub mod ast;
6pub mod builder;
8pub mod language;
10pub mod lexer;
12#[cfg(feature = "lsp")]
14pub mod lsp;
15pub mod parser;
17
18pub use crate::{
19 ast::{CsvField, CsvRecord, CsvRoot},
20 builder::CsvBuilder,
21 language::{CSV_LANG, CsvLanguage},
22 lexer::CsvLexer,
23 parser::CsvParser,
24};
25
26pub type CsvRootNode = crate::ast::CsvRoot;
28
29#[cfg(feature = "serde")]
31pub fn to_string<T: ::serde::Serialize>(value: &T) -> Result<String, oak_core::OakError> {
33 oak_dsv::to_string_with_config::<CSV_LANG, T>(value)
34}
35
36#[cfg(feature = "serde")]
38pub fn from_str<T: ::serde::de::DeserializeOwned>(s: &str) -> Result<T, oak_core::OakError> {
40 oak_dsv::from_str_with_config::<CSV_LANG, T>(s)
41}
42
43pub fn language() -> oak_dsv::DsvLanguage {
45 CSV_LANG
46}
47
48pub fn parse(csv: &str) -> Result<crate::ast::CsvRoot, oak_core::OakError> {
50 use oak_core::{Builder, parser::session::ParseSession, source::SourceText};
51 let builder = CsvBuilder::new();
52 let source = SourceText::new(csv.to_string());
53 let mut cache = ParseSession::default();
54 let result = builder.build(&source, &[], &mut cache);
55 result.result
56}
57
58#[cfg(feature = "lsp")]
60pub use crate::lsp::CsvLanguageService;