mirror of https://github.com/dnomd343/klotski.git
4 changed files with 57 additions and 46 deletions
@ -1,5 +1,5 @@ |
|||||
extern crate klotski_ffi; |
extern crate klotski_ffi; |
||||
|
|
||||
fn main() { |
fn main() { |
||||
println!("{:#?}", klotski_ffi::load_version()); |
println!("{:#?}", klotski_ffi::load_metadata()); |
||||
} |
} |
||||
|
@ -0,0 +1,26 @@ |
|||||
|
/// Klotski c-style API convert by bindgen.
|
||||
|
/// Core module expose these interfaces for abstraction.
|
||||
|
|
||||
|
pub mod Core { |
||||
|
#![allow(dead_code)] |
||||
|
#![allow(non_snake_case)] |
||||
|
#![allow(non_camel_case_types)] |
||||
|
#![allow(non_upper_case_globals)] |
||||
|
include!(concat!(env!("OUT_DIR"), "/bindings.rs")); |
||||
|
|
||||
|
use std::ffi::{c_char, CStr}; |
||||
|
|
||||
|
pub trait CStringDump { |
||||
|
fn dump(&self) -> String; |
||||
|
} |
||||
|
|
||||
|
impl CStringDump for *const c_char { |
||||
|
fn dump(&self) -> String { |
||||
|
let cstr: &CStr; |
||||
|
unsafe { |
||||
|
cstr = CStr::from_ptr(*self); |
||||
|
} |
||||
|
String::from(cstr.to_str().unwrap()) |
||||
|
} |
||||
|
} |
||||
|
} |
@ -1,46 +1,4 @@ |
|||||
#![allow(non_snake_case)] |
mod core; |
||||
#![allow(non_camel_case_types)] |
mod metadata; |
||||
#![allow(non_upper_case_globals)] |
|
||||
include!(concat!(env!("OUT_DIR"), "/bindings.rs")); |
|
||||
|
|
||||
use std::env; |
pub use metadata::load_metadata; |
||||
use std::ffi::{c_char, CStr}; |
|
||||
|
|
||||
#[derive(Debug)] |
|
||||
pub struct Version { |
|
||||
pub author: String, |
|
||||
pub system: String, |
|
||||
pub version: String, |
|
||||
pub compiler: String, |
|
||||
pub commit_id: String, |
|
||||
pub build_time: String, |
|
||||
pub project_url: String, |
|
||||
} |
|
||||
|
|
||||
pub trait CStringDump { |
|
||||
fn dump(&self) -> String; |
|
||||
} |
|
||||
|
|
||||
impl CStringDump for *const c_char { |
|
||||
fn dump(&self) -> String { |
|
||||
let cstr: &CStr; |
|
||||
unsafe { |
|
||||
cstr = CStr::from_ptr(*self); |
|
||||
} |
|
||||
String::from(cstr.to_str().unwrap()) |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
pub fn load_version() -> Version { |
|
||||
unsafe { |
|
||||
Version { |
|
||||
author: get_author().dump(), |
|
||||
system: get_system_info().dump(), |
|
||||
version: get_version().dump(), |
|
||||
compiler: get_compiler_info().dump(), |
|
||||
commit_id: get_commit_id().dump(), |
|
||||
build_time: get_build_time().dump(), |
|
||||
project_url: get_project_url().dump(), |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
@ -0,0 +1,27 @@ |
|||||
|
use super::core::Core; |
||||
|
use Core::CStringDump; |
||||
|
|
||||
|
#[derive(Debug)] |
||||
|
pub struct Metadata { |
||||
|
pub author: String, |
||||
|
pub system: String, |
||||
|
pub version: String, |
||||
|
pub compiler: String, |
||||
|
pub commit_id: String, |
||||
|
pub build_time: String, |
||||
|
pub project_url: String, |
||||
|
} |
||||
|
|
||||
|
pub fn load_metadata() -> Metadata { |
||||
|
unsafe { |
||||
|
Metadata { |
||||
|
author: Core::get_author().dump(), |
||||
|
system: Core::get_system_info().dump(), |
||||
|
version: Core::get_version().dump(), |
||||
|
compiler: Core::get_compiler_info().dump(), |
||||
|
commit_id: Core::get_commit_id().dump(), |
||||
|
build_time: Core::get_build_time().dump(), |
||||
|
project_url: Core::get_project_url().dump(), |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue