assimp/log/
mod.rs
1use std::ffi::CString;
2use std::ptr;
3
4use ffi::*;
5use std::os::raw::{c_char, c_void};
6
7pub struct LogStream {
8 raw: AiLogStream,
9 attached: bool
10}
11
12impl LogStream {
13 pub fn file(filename: &str) -> Option<LogStream> {
14 let cstr = CString::new(filename).unwrap();
15 let stream = unsafe { aiGetPredefinedLogStream(AiDefaultLogStream::File, cstr.as_ptr()) };
16 if stream.callback.is_some() {
17 Some(LogStream { raw: stream, attached: false })
18 } else {
19 None
20 }
21 }
22
23 pub fn stdout() -> LogStream {
24 let stream = unsafe { aiGetPredefinedLogStream(AiDefaultLogStream::StdOut, ptr::null()) };
25 LogStream { raw: stream, attached: false }
26 }
27
28 pub fn stderr() -> LogStream {
29 let stream = unsafe { aiGetPredefinedLogStream(AiDefaultLogStream::StdErr, ptr::null()) };
30 LogStream { raw: stream, attached: false }
31 }
32
33 #[cfg(windows)]
34 pub fn debug() -> LogStream {
35 let stream = unsafe { aiGetPredefinedLogStream(AiDefaultLogStream::Debugger, ptr::null()) };
36 LogStream { raw: stream, attached: false }
37 }
38
39 pub fn callback(cb: unsafe extern "system" fn(*const c_char, *mut c_char)) -> LogStream {
40 LogStream {
41 raw: AiLogStream {
42 callback: Some(cb),
43 user: ptr::null::<c_void>() as *mut c_void
44 },
45 attached: false
46 }
47 }
48
49 pub fn attached(&self) -> bool { self.attached }
50
51 pub fn attach(&mut self) {
52 if !self.attached { unsafe { aiAttachLogStream(&self.raw) } }
53 }
54
55 pub fn detach(&mut self) {
56 if self.attached { unsafe { aiDetachLogStream(&self.raw); } }
57 }
58
59 pub fn set_verbose_logging(state: bool) {
60 unsafe { aiEnableVerboseLogging(if state { AI_TRUE } else { AI_FALSE }) }
61 }
62}
63
64impl Drop for LogStream {
65 fn drop(&mut self) {
66 self.detach()
67 }
68}