rom: build.rs: error handling

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2021-11-24 15:33:02 +01:00
parent 339679b826
commit e70a19ec0e
Signed by: pep
GPG key ID: DEDA74AEECA9D0F2

View file

@ -13,15 +13,58 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
use std::fs::File;
use std::env;
use std::fmt;
use std::fs::{self, File};
use std::io::{BufWriter, Write};
use std::error::Error as StdError;
use std::path::Path;
use quote::{format_ident, quote};
fn main() {
#[derive(Debug, Eq, PartialEq)]
pub enum Error {
EnvVariableError(env::VarError),
ROMDoesntExist,
UnableToOpenROM,
}
impl StdError for Error {}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
match self {
Error::EnvVariableError(e) => write!(f, "POKEMON_ROM env var error: {}", e),
Error::ROMDoesntExist => write!(f, "ROM doesn't exist"),
Error::UnableToOpenROM => write!(f, "Unable to open ROM"),
}
}
}
impl From<env::VarError> for Error {
fn from(err: env::VarError) -> Error {
Error::EnvVariableError(err)
}
}
fn get_rom() -> Result<Vec<u8>, Error> {
let env_romp = env::var("POKEMON_ROM")?;
let romp = Path::new(&env_romp);
if ! romp.exists() {
return Err(Error::ROMDoesntExist);
}
Ok(match fs::read(romp) {
Ok(v) => v,
Err(_) => return Err(Error::UnableToOpenROM),
})
}
fn main() -> Result<(), Error> {
let output = Path::new(&env::var("OUT_DIR").unwrap()).join("output.rs");
let mut output = BufWriter::new(File::create(&output).unwrap());
let _rom: Vec<u8> = get_rom()?;
let pkmn_names: Vec<_> = [
"Rhydon",
@ -40,4 +83,5 @@ fn main() {
};
write!(output, "{}", tokens).unwrap();
Ok(())
}