@@ -16,21 +16,41 @@ limitations under the License.
1616
1717use core:: ffi:: c_char;
1818
19+ /// C-compatible log level enum
20+ #[ repr( C ) ]
21+ #[ derive( Debug , Copy , Clone , PartialEq , Eq ) ]
22+ pub enum Level {
23+ Error = 1 ,
24+ Warn = 2 ,
25+ Info = 3 ,
26+ Debug = 4 ,
27+ Trace = 5 ,
28+ }
29+
30+ impl From < Level > for tracing:: log:: Level {
31+ fn from ( level : Level ) -> Self {
32+ match level {
33+ Level :: Error => tracing:: log:: Level :: Error ,
34+ Level :: Warn => tracing:: log:: Level :: Warn ,
35+ Level :: Info => tracing:: log:: Level :: Info ,
36+ Level :: Debug => tracing:: log:: Level :: Debug ,
37+ Level :: Trace => tracing:: log:: Level :: Trace ,
38+ }
39+ }
40+ }
41+
1942#[ unsafe( no_mangle) ]
20- pub extern "C" fn hl_log (
21- level : log:: Level ,
22- message : * const c_char ,
23- line : i32 ,
24- file : * const c_char ,
25- ) {
26- if log:: log_enabled!( level) {
43+ pub extern "C" fn hl_log ( level : Level , message : * const c_char , line : i32 , file : * const c_char ) {
44+ let log_level: tracing:: log:: Level = level. into ( ) ;
45+
46+ if tracing:: log:: log_enabled!( log_level) {
2747 let message = unsafe { core:: ffi:: CStr :: from_ptr ( message) . to_string_lossy ( ) } ;
2848 let file = unsafe { core:: ffi:: CStr :: from_ptr ( file) . to_string_lossy ( ) } ;
2949
30- log:: logger ( ) . log (
31- & log:: RecordBuilder :: new ( )
32- . args ( format_args ! ( "{}: {}" , level , message) )
33- . level ( level )
50+ tracing :: log:: logger ( ) . log (
51+ & tracing :: log:: RecordBuilder :: new ( )
52+ . args ( format_args ! ( "{}: {}" , log_level , message) )
53+ . level ( log_level )
3454 . line ( Some ( line as u32 ) )
3555 . file ( Some ( & file) )
3656 . build ( ) ,
0 commit comments