1use std::convert::TryFrom;
2
3use ffi::*;
4use libc::c_int;
5
6#[derive(Eq, PartialEq, Clone, Copy, Debug)]
7pub enum Level {
8 Quiet,
9 Panic,
10 Fatal,
11 Error,
12 Warning,
13 Info,
14 Verbose,
15 Debug,
16 Trace,
17}
18
19pub struct LevelError;
20
21impl TryFrom<c_int> for Level {
22 type Error = &'static str;
23
24 fn try_from(value: c_int) -> Result<Self, &'static str> {
25 match value {
26 AV_LOG_QUIET: i32 => Ok(Level::Quiet),
27 AV_LOG_PANIC: i32 => Ok(Level::Panic),
28 AV_LOG_FATAL: i32 => Ok(Level::Fatal),
29 AV_LOG_ERROR: i32 => Ok(Level::Error),
30 AV_LOG_WARNING: i32 => Ok(Level::Warning),
31 AV_LOG_INFO: i32 => Ok(Level::Info),
32 AV_LOG_VERBOSE: i32 => Ok(Level::Verbose),
33 AV_LOG_DEBUG: i32 => Ok(Level::Debug),
34 AV_LOG_TRACE: i32 => Ok(Level::Trace),
35 _ => Err("illegal log level"),
36 }
37 }
38}
39
40impl From<Level> for c_int {
41 fn from(value: Level) -> c_int {
42 match value {
43 Level::Quiet => AV_LOG_QUIET,
44 Level::Panic => AV_LOG_PANIC,
45 Level::Fatal => AV_LOG_FATAL,
46 Level::Error => AV_LOG_ERROR,
47 Level::Warning => AV_LOG_WARNING,
48 Level::Info => AV_LOG_INFO,
49 Level::Verbose => AV_LOG_VERBOSE,
50 Level::Debug => AV_LOG_DEBUG,
51 Level::Trace => AV_LOG_TRACE,
52 }
53 }
54}
55