pub mod definitions;
pub mod schema;
use clap::Parser;
use definitions::*;
use std::path::PathBuf;
pub mod level;
pub mod typedefs;
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
struct Args {
path: PathBuf,
#[arg(short, long)]
output: Option<PathBuf>,
#[arg(short, long, default_value_t = false)]
preserve_case: bool,
#[arg(short, long, default_value_t = false)]
serde: bool,
#[arg(short, long, default_value = "", value_delimiter = ',')]
vec2s: Vec<String>,
#[arg(short, long, default_value = "", value_delimiter = ',')]
colors: Vec<String>,
}
fn main() -> Result<()> {
let args = Args::parse();
let preferences = Preferences::new(args.preserve_case, args.serde, args.vec2s, args.colors);
let mut definitions = RsDefinitions::default();
let project = serde_json::from_str::<schema::LdtkJson>(
&std::fs::read_to_string(&args.path).context("Failed to load project file!")?,
)
.context("Failed to deserialize project file!")?;
let mut scope = Scope::new();
scope.raw("#![allow(dead_code)]");
if preferences.serde() {
scope.raw("use serde::{Serialize, Deserialize};");
}
typedefs::generate_defs(&preferences, &mut definitions, &project, &mut scope)
.context("Failed to generate defenitions for LDTK project!")?;
level::generate_levels(&preferences, &mut definitions, &project, &mut scope)
.context("Failed to generate levels for LDTK project!")?;
std::fs::write(
args.output
.as_ref()
.unwrap_or(&args.path.with_extension("rs")),
scope.to_string(),
)?;
Ok(())
}