mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-11 21:48:36 +00:00
Modernize imgui-sys-bindgen code slightly
This commit is contained in:
parent
6ee5a2867b
commit
a69d856163
@ -2,6 +2,7 @@
|
||||
name = "imgui-sys-bindgen"
|
||||
version = "0.0.0"
|
||||
authors = ["Joonas Javanainen <joonas.javanainen@gmail.com>", "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"
|
||||
@ -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<String, serde_json::Value>,
|
||||
@ -38,17 +44,13 @@ struct Whitelist {
|
||||
definitions: Vec<String>,
|
||||
}
|
||||
|
||||
fn only_key<K, V>((key, _): (K, V)) -> K {
|
||||
key
|
||||
}
|
||||
|
||||
fn parse_whitelist<R: Read>(
|
||||
structs_and_enums: R,
|
||||
definitions: R,
|
||||
) -> Result<Whitelist, serde_json::Error> {
|
||||
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<String, Vec<Definition>> = serde_json::from_reader(definitions)?;
|
||||
let definitions = definitions
|
||||
@ -74,7 +76,7 @@ fn parse_whitelist<R: Read>(
|
||||
pub fn generate_bindings<P: AsRef<Path>>(
|
||||
path: &P,
|
||||
wasm_import_name: Option<String>,
|
||||
) -> Result<Bindings, Error> {
|
||||
) -> Result<Bindings, Box<dyn Error>> {
|
||||
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<P: AsRef<Path>>(
|
||||
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)
|
||||
}
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
extern crate imgui_sys_bindgen;
|
||||
|
||||
use imgui_sys_bindgen::generate_bindings;
|
||||
use std::env;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user