mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-21 02:18:32 +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"
|
name = "imgui-sys-bindgen"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
authors = ["Joonas Javanainen <joonas.javanainen@gmail.com>", "imgui-rs contributors"]
|
authors = ["Joonas Javanainen <joonas.javanainen@gmail.com>", "imgui-rs contributors"]
|
||||||
|
edition = "2018"
|
||||||
description = "imgui-sys bindings updater"
|
description = "imgui-sys bindings updater"
|
||||||
homepage = "https://github.com/Gekkio/imgui-rs"
|
homepage = "https://github.com/Gekkio/imgui-rs"
|
||||||
repository = "https://github.com/Gekkio/imgui-rs"
|
repository = "https://github.com/Gekkio/imgui-rs"
|
||||||
@ -10,7 +11,6 @@ publish = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bindgen = "0.53"
|
bindgen = "0.53"
|
||||||
failure = "0.1"
|
|
||||||
serde = "1.0"
|
serde = "1.0"
|
||||||
serde_derive = "1.0"
|
serde_derive = "1.0"
|
||||||
serde_json = "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 bindgen::{Bindings, EnumVariation, RustTarget};
|
||||||
use failure::Error;
|
use serde_derive::Deserialize;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
use std::error::Error;
|
||||||
|
use std::fmt;
|
||||||
use std::fs::{read_to_string, File};
|
use std::fs::{read_to_string, File};
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::path::Path;
|
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)]
|
#[derive(Deserialize)]
|
||||||
struct StructsAndEnums {
|
struct StructsAndEnums {
|
||||||
enums: HashMap<String, serde_json::Value>,
|
enums: HashMap<String, serde_json::Value>,
|
||||||
@ -38,17 +44,13 @@ struct Whitelist {
|
|||||||
definitions: Vec<String>,
|
definitions: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn only_key<K, V>((key, _): (K, V)) -> K {
|
|
||||||
key
|
|
||||||
}
|
|
||||||
|
|
||||||
fn parse_whitelist<R: Read>(
|
fn parse_whitelist<R: Read>(
|
||||||
structs_and_enums: R,
|
structs_and_enums: R,
|
||||||
definitions: R,
|
definitions: R,
|
||||||
) -> Result<Whitelist, serde_json::Error> {
|
) -> Result<Whitelist, serde_json::Error> {
|
||||||
let StructsAndEnums { enums, structs } = serde_json::from_reader(structs_and_enums)?;
|
let StructsAndEnums { enums, structs } = serde_json::from_reader(structs_and_enums)?;
|
||||||
let enums = enums.into_iter().map(only_key).collect();
|
let enums = enums.keys().cloned().collect();
|
||||||
let structs = structs.into_iter().map(only_key).collect();
|
let structs = structs.keys().cloned().collect();
|
||||||
|
|
||||||
let definitions: HashMap<String, Vec<Definition>> = serde_json::from_reader(definitions)?;
|
let definitions: HashMap<String, Vec<Definition>> = serde_json::from_reader(definitions)?;
|
||||||
let definitions = definitions
|
let definitions = definitions
|
||||||
@ -74,7 +76,7 @@ fn parse_whitelist<R: Read>(
|
|||||||
pub fn generate_bindings<P: AsRef<Path>>(
|
pub fn generate_bindings<P: AsRef<Path>>(
|
||||||
path: &P,
|
path: &P,
|
||||||
wasm_import_name: Option<String>,
|
wasm_import_name: Option<String>,
|
||||||
) -> Result<Bindings, Error> {
|
) -> Result<Bindings, Box<dyn Error>> {
|
||||||
let path = path.as_ref();
|
let path = path.as_ref();
|
||||||
let structs_and_enums = File::open(path.join("structs_and_enums.json"))?;
|
let structs_and_enums = File::open(path.join("structs_and_enums.json"))?;
|
||||||
let definitions = File::open(path.join("definitions.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 {
|
for e in whitelist.definitions {
|
||||||
builder = builder.whitelist_function(format!("^{}", e));
|
builder = builder.whitelist_function(format!("^{}", e));
|
||||||
}
|
}
|
||||||
let bindings = builder
|
let bindings = builder.generate().map_err(|_| BindgenError)?;
|
||||||
.generate()
|
|
||||||
.map_err(|_| format_err!("Failed to generate bindings"))?;
|
|
||||||
Ok(bindings)
|
Ok(bindings)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
extern crate imgui_sys_bindgen;
|
|
||||||
|
|
||||||
use imgui_sys_bindgen::generate_bindings;
|
use imgui_sys_bindgen::generate_bindings;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user