rom: build.rs: error handling
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
parent
339679b826
commit
e70a19ec0e
1 changed files with 46 additions and 2 deletions
48
rom/build.rs
48
rom/build.rs
|
@ -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(())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue