Skip to main content

lua_assembler/formats/lua/writer/
mod.rs

1use gaia_types::writer::TextWriter;
2use oak_core::source::ToSource;
3use oak_lua::ast::LuaRoot;
4use oak_pretty_print::{to_doc::AsDocument, FormatConfig, Formatter};
5use std::fmt::Write;
6
7#[derive(Debug)]
8pub struct LuaWriter<W> {
9    writer: TextWriter<W>,
10}
11
12impl<W: Write> LuaWriter<W> {
13    pub fn new(writer: TextWriter<W>) -> Self {
14        Self { writer }
15    }
16
17    pub fn write_ast(&mut self, ast: &LuaRoot) -> Result<(), std::fmt::Error> {
18        let source = ast.to_source_string();
19        self.writer.write_line(&source)?;
20        Ok(())
21    }
22
23    pub fn write_doc(&mut self, ast: &LuaRoot) -> Result<(), std::fmt::Error> {
24        let doc = ast.as_document();
25        let config = FormatConfig::default();
26        let source = doc.render(config);
27        self.writer.write_line(&source)?;
28        Ok(())
29    }
30
31    pub fn finish(self) -> W {
32        self.writer.finish()
33    }
34}