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(long, default_value_t = false)]
preserve_case: bool,
#[arg(long, default_value_t = false)]
serde: bool,
#[arg(long)]
vector: Option<String>,
#[arg(long)]
color: Option<String>,
}
fn main() -> Result<()> {
let args = Args::parse();
let preferences = Preferences {
preserve_case: args.preserve_case,
serde: args.serde,
vector: args.vector,
color: args.color,
};
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();
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(())
}