///|
fn CodeGenerator::gen_package(
self : CodeGenerator,
filename : String,
manifest : PackageManifestPlan,
) -> Unit {
let content = StringBuilder()
content.write_string("import {\n")
for import_ in manifest.imports {
match import_.import_alias {
Some(import_alias) =>
content.write_string(" \"\{import_.path}\" @\{import_alias},\n")
None => content.write_string(" \"\{import_.path}\",\n")
}
}
content.write_string("}\n")
let file = File(filename, content=content.to_string())
self.push_file(file)
}
///|
/// Writes the module manifest in the `moon.mod` syntax, laid out the way
/// `moon fmt` prints it.
fn CodeGenerator::gen_module(self : CodeGenerator, filename : String) -> Unit {
let content =
$|name = "\{self.username()}/\{self.project_name}"
$|
$|version = "0.1.0"
$|
$|readme = ""
$|
$|repository = ""
$|
$|license = ""
$|
$|keywords = [ ]
$|
$|description = ""
$|
$|source = "\{self.source_dir()}"
$|
$|import {
$| "moonbitlang/protobuf@0.2.0",
$|}
$|
let file = File(filename, content~)
self.push_file(file)
}
///|
fn CodeGenerator::gen_file(
self : CodeGenerator,
filename : String,
file : Package,
) -> Unit raise {
let content = StringBuilder()
for enum_ in file.enums {
self.gen_enum(enum_, content)
}
self.gen_messages(file.message_type, content)
let file = File::from_builder(filename, content~)
self.push_file(file)
}