mirror of https://github.com/dnomd343/klotski.git
Dnomd343
2 years ago
4 changed files with 57 additions and 46 deletions
@ -1,5 +1,5 @@ |
|||
extern crate klotski_ffi; |
|||
|
|||
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)] |
|||
#![allow(non_camel_case_types)] |
|||
#![allow(non_upper_case_globals)] |
|||
include!(concat!(env!("OUT_DIR"), "/bindings.rs")); |
|||
mod core; |
|||
mod metadata; |
|||
|
|||
use std::env; |
|||
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(), |
|||
} |
|||
} |
|||
} |
|||
pub use metadata::load_metadata; |
|||
|
@ -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