use crate::{converters::PositionEncoding, css_data::CssCustomData, store::DocumentStore};
use serde_json;
use std::sync::LazyLock;
pub struct LanguageService {
pub store: DocumentStore,
pub encoding: PositionEncoding,
pub css_data: &'static CssCustomData,
}
static CSS_DATA: LazyLock<CssCustomData> =
LazyLock::new(
|| match serde_json::from_str(include_str!("../data/css-schema.json")) {
Ok(data) => data,
Err(e) => panic!("Failed to parse CSS data: {}", e),
},
);
impl LanguageService {
pub fn new(encoding: PositionEncoding) -> Self {
LanguageService {
store: DocumentStore::new(),
encoding,
css_data: &CSS_DATA,
}
}
pub fn new_with_store(store: DocumentStore, encoding: PositionEncoding) -> Self {
LanguageService {
store,
encoding,
css_data: &CSS_DATA,
}
}
}
impl Default for LanguageService {
fn default() -> Self {
LanguageService::new(PositionEncoding::Wide(
crate::converters::WideEncoding::Utf16,
))
}
}