#![doc = include_str!("readme.md")]
#![feature(new_range_api)]
#![warn(missing_docs)]
pub mod ast;
pub mod builder;
pub mod language;
pub mod lexer;
#[cfg(feature = "lsp")]
pub mod lsp;
pub mod parser;
pub use crate::{
ast::{CsvField, CsvRecord, CsvRoot},
builder::CsvBuilder,
language::{CSV_LANG, CsvLanguage},
lexer::CsvLexer,
parser::CsvParser,
};
pub type CsvRootNode = crate::ast::CsvRoot;
#[cfg(feature = "serde")]
pub fn to_string<T: ::serde::Serialize>(value: &T) -> Result<String, oak_core::OakError> {
oak_dsv::to_string_with_config::<CSV_LANG, T>(value)
}
#[cfg(feature = "serde")]
pub fn from_str<T: ::serde::de::DeserializeOwned>(s: &str) -> Result<T, oak_core::OakError> {
oak_dsv::from_str_with_config::<CSV_LANG, T>(s)
}
pub fn language() -> oak_dsv::DsvLanguage {
CSV_LANG
}
pub fn parse(csv: &str) -> Result<crate::ast::CsvRoot, oak_core::OakError> {
use oak_core::{Builder, parser::session::ParseSession, source::SourceText};
let builder = CsvBuilder::new();
let source = SourceText::new(csv.to_string());
let mut cache = ParseSession::default();
let result = builder.build(&source, &[], &mut cache);
result.result
}
#[cfg(feature = "lsp")]
pub use crate::lsp::CsvLanguageService;