# bitsy-parser ![Rust](https://github.com/synth-ruiner/bitsy-parser/workflows/Rust/badge.svg) ![](https://img.shields.io/badge/license-MIT-blueviolet.svg) [![Crates.io](https://img.shields.io/crates/v/bitsy-parser.svg)](https://crates.io/crates/bitsy-parser) a library for parsing Bitsy game data. the version number follows Bitsy itself, so version 0.70.* targets Bitsy 7.0. ## how to use a simple example program: ```rust extern crate bitsy_parser; use std::{env, fs}; use bitsy_parser::game::Game; use bitsy_parser::image::Image; /// replaces the player avatar with a smiley face. fn main() { let input_file = env::args().nth(1) .expect("No input path specified. Usage: `smiley infile outfile`"); let output_file = env::args().nth(2) .expect("No output path specified. Usage: `smiley infile outfile`"); let mut game = Game::from(fs::read_to_string(input_file).unwrap()).unwrap(); game.avatar.animation_frames = vec![ Image { pixels: vec![ 0,0,1,1,1,1,0,0, 0,1,1,1,1,1,1,0, 1,1,0,1,1,0,1,1, 1,1,0,1,1,0,1,1, 1,1,1,1,1,1,1,1, 1,1,0,1,1,0,1,1, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, ] } ]; fs::write(output_file, &game.to_string()) .expect("Failed to write to output file"); } ``` some more practical uses would be things like: * remove duplicate tiles * merge two Bitsy games together * programmatically create Bitsy games * a Bitsy game editor ## todo * implement Result return types on ::from functions so we can handle errors * replace Image with Vec or something. seems like a pointless abstraction * convert integer IDs to strings and just use base36 when creating new IDs; test games with arbitrary IDs ### tidy up * refactor the more shonky bits to idiomatic rust