diff --git a/imgui-sys-bindgen/Cargo.toml b/imgui-sys-bindgen/Cargo.toml index 09156b2..e916785 100644 --- a/imgui-sys-bindgen/Cargo.toml +++ b/imgui-sys-bindgen/Cargo.toml @@ -2,6 +2,7 @@ name = "imgui-sys-bindgen" version = "0.0.0" authors = ["Joonas Javanainen ", "imgui-rs contributors"] +edition = "2018" description = "imgui-sys bindings updater" homepage = "https://github.com/Gekkio/imgui-rs" repository = "https://github.com/Gekkio/imgui-rs" @@ -10,7 +11,6 @@ publish = false [dependencies] bindgen = "0.53" -failure = "0.1" serde = "1.0" serde_derive = "1.0" serde_json = "1.0" \ No newline at end of file diff --git a/imgui-sys-bindgen/src/lib.rs b/imgui-sys-bindgen/src/lib.rs index 774d1e0..5404385 100644 --- a/imgui-sys-bindgen/src/lib.rs +++ b/imgui-sys-bindgen/src/lib.rs @@ -1,17 +1,23 @@ -extern crate bindgen; -#[macro_use] -extern crate failure; -#[macro_use] -extern crate serde_derive; -extern crate serde_json; - use bindgen::{Bindings, EnumVariation, RustTarget}; -use failure::Error; +use serde_derive::Deserialize; use std::collections::HashMap; +use std::error::Error; +use std::fmt; use std::fs::{read_to_string, File}; use std::io::Read; use std::path::Path; +#[derive(Debug)] +struct BindgenError; + +impl fmt::Display for BindgenError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "Failed to generate bindings") + } +} + +impl Error for BindgenError {} + #[derive(Deserialize)] struct StructsAndEnums { enums: HashMap, @@ -38,17 +44,13 @@ struct Whitelist { definitions: Vec, } -fn only_key((key, _): (K, V)) -> K { - key -} - fn parse_whitelist( structs_and_enums: R, definitions: R, ) -> Result { let StructsAndEnums { enums, structs } = serde_json::from_reader(structs_and_enums)?; - let enums = enums.into_iter().map(only_key).collect(); - let structs = structs.into_iter().map(only_key).collect(); + let enums = enums.keys().cloned().collect(); + let structs = structs.keys().cloned().collect(); let definitions: HashMap> = serde_json::from_reader(definitions)?; let definitions = definitions @@ -74,7 +76,7 @@ fn parse_whitelist( pub fn generate_bindings>( path: &P, wasm_import_name: Option, -) -> Result { +) -> Result> { let path = path.as_ref(); let structs_and_enums = File::open(path.join("structs_and_enums.json"))?; let definitions = File::open(path.join("definitions.json"))?; @@ -116,8 +118,6 @@ pub fn generate_bindings>( for e in whitelist.definitions { builder = builder.whitelist_function(format!("^{}", e)); } - let bindings = builder - .generate() - .map_err(|_| format_err!("Failed to generate bindings"))?; + let bindings = builder.generate().map_err(|_| BindgenError)?; Ok(bindings) } diff --git a/imgui-sys-bindgen/src/main.rs b/imgui-sys-bindgen/src/main.rs index 6bb7b29..1e18194 100644 --- a/imgui-sys-bindgen/src/main.rs +++ b/imgui-sys-bindgen/src/main.rs @@ -1,5 +1,3 @@ -extern crate imgui_sys_bindgen; - use imgui_sys_bindgen::generate_bindings; use std::env;