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}