1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
use crate::api::Api; use std::ffi::{c_void, CString}; use tm_sys::ffi::{ tm_log_type_TM_LOG_TYPE_DEBUG, tm_log_type_TM_LOG_TYPE_ERROR, tm_log_type_TM_LOG_TYPE_INFO, tm_logger_api, TM_LOGGER_API_NAME, }; #[derive(Copy, Clone)] pub struct LogApi { api: *mut tm_logger_api, } unsafe impl Send for LogApi {} unsafe impl Sync for LogApi {} impl Api for LogApi { type CType = *mut tm_logger_api; const NAME: &'static [u8] = TM_LOGGER_API_NAME; #[inline] fn new(api: *mut c_void) -> Self { Self { api: api as Self::CType, } } } impl LogApi { #[inline] pub fn info(&self, message: &str) { let message = CString::new(message).unwrap(); unsafe { (*self.api).print.unwrap()( tm_log_type_TM_LOG_TYPE_INFO, message.as_ptr() as *const ::std::os::raw::c_char, ) }; } #[inline] pub fn debug(&self, message: &str) { let message = CString::new(message).unwrap(); unsafe { (*self.api).print.unwrap()( tm_log_type_TM_LOG_TYPE_DEBUG, message.as_ptr() as *const ::std::os::raw::c_char, ) }; } #[inline] pub fn error(&self, message: &str) { let message = CString::new(message).unwrap(); unsafe { (*self.api).print.unwrap()( tm_log_type_TM_LOG_TYPE_ERROR, message.as_ptr() as *const ::std::os::raw::c_char, ) }; } }