use super::document::LsjDocument;
use crate::error::Result;
use std::fs;
use std::path::Path;
pub fn write_lsj<P: AsRef<Path>>(doc: &LsjDocument, path: P) -> Result<()> {
let json = serialize_lsj(doc)?;
fs::write(path, json)?;
Ok(())
}
pub fn serialize_lsj(doc: &LsjDocument) -> Result<String> {
let json = serde_json::to_string_pretty(doc)?;
let json = convert_spaces_to_tabs(&json);
let json = json.replace('\n', "\r\n");
Ok(json)
}
fn convert_spaces_to_tabs(json: &str) -> String {
json.lines()
.map(|line| {
let leading_spaces = line.chars().take_while(|c| *c == ' ').count();
let tabs = "\t".repeat(leading_spaces / 2);
format!("{tabs}{}", line.trim_start())
})
.collect::<Vec<_>>()
.join("\n")
}