toad_jni/java/util/logging/
level.rs

1use crate::java::{self, NoUpcast};
2
3/// `java.util.logging.Level`
4#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
5pub enum Level {
6  /// [`ALL`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#ALL)
7  All,
8  /// [`CONFIG`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#CONFIG)
9  Config,
10  /// [`FINE`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#FINE)
11  Fine,
12  /// [`FINER`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#FINER)
13  Finer,
14  /// [`FINEST`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#FINEST)
15  Finest,
16  /// [`INFO`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#INFO)
17  Info,
18  /// [`OFF`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#OFF)
19  Off,
20  /// [`WARNING`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#WARNING)
21  Warning,
22  /// [`SEVERE`](https://docs.oracle.com/en/java/javase/19/docs/api/java.logging/java/util/logging/Level.html#SEVERE)
23  Severe,
24}
25
26impl Level {
27  /// ```
28  /// use toad_jni::java::util::logging::Level;
29  ///
30  /// assert_eq!(Level::from_log_level(log::Level::Trace), Level::Finer);
31  /// assert_eq!(Level::from_log_level(log::Level::Debug), Level::Fine);
32  /// assert_eq!(Level::from_log_level(log::Level::Info), Level::Info);
33  /// assert_eq!(Level::from_log_level(log::Level::Warn), Level::Warning);
34  /// assert_eq!(Level::from_log_level(log::Level::Error), Level::Severe);
35  /// ```
36  pub fn from_log_level(lv: log::Level) -> Self {
37    match lv {
38      | log::Level::Error => Self::Severe,
39      | log::Level::Warn => Self::Warning,
40      | log::Level::Info => Self::Info,
41      | log::Level::Debug => Self::Fine,
42      | log::Level::Trace => Self::Finer,
43    }
44  }
45}
46
47impl java::Object for Level {
48  fn upcast(e: &mut java::Env, jobj: java::lang::Object) -> Self {
49    use Level::*;
50
51    let all = All.downcast(e);
52    let config = Config.downcast(e);
53    let fine = Fine.downcast(e);
54    let finer = Finer.downcast(e);
55    let finest = Finest.downcast(e);
56    let info = Info.downcast(e);
57    let off = Off.downcast(e);
58    let warning = Warning.downcast(e);
59    let severe = Severe.downcast(e);
60
61    if jobj.equals(e, &all) {
62      Self::All
63    } else if jobj.equals(e, &config) {
64      Self::Config
65    } else if jobj.equals(e, &fine) {
66      Self::Fine
67    } else if jobj.equals(e, &finer) {
68      Self::Finer
69    } else if jobj.equals(e, &finest) {
70      Self::Finest
71    } else if jobj.equals(e, &info) {
72      Self::Info
73    } else if jobj.equals(e, &off) {
74      Self::Off
75    } else if jobj.equals(e, &warning) {
76      Self::Warning
77    } else if jobj.equals(e, &severe) {
78      Self::Severe
79    } else {
80      panic!("not java.util.logging.Level: {}", jobj.to_string(e));
81    }
82  }
83
84  fn downcast(self, e: &mut java::Env) -> java::lang::Object {
85    self.downcast_ref(e)
86  }
87
88  fn downcast_ref(&self, e: &mut java::Env) -> java::lang::Object {
89    use Level::*;
90
91    type F = java::StaticField<Level, NoUpcast<Level>>;
92
93    struct Field {
94      all: F,
95      off: F,
96      cfg: F,
97      info: F,
98      warning: F,
99      severe: F,
100      fine: F,
101      finer: F,
102      finest: F,
103    }
104
105    static FIELD: Field = Field { all: F::new("ALL"),
106                                  off: F::new("OFF"),
107                                  cfg: F::new("CONFIG"),
108                                  info: F::new("INFO"),
109                                  warning: F::new("WARNING"),
110                                  severe: F::new("SEVERE"),
111                                  fine: F::new("FINE"),
112                                  finer: F::new("FINER"),
113                                  finest: F::new("FINEST") };
114
115    match self {
116      | All => &FIELD.all,
117      | Config => &FIELD.cfg,
118      | Fine => &FIELD.fine,
119      | Finer => &FIELD.finer,
120      | Finest => &FIELD.finest,
121      | Info => &FIELD.info,
122      | Off => &FIELD.off,
123      | Warning => &FIELD.warning,
124      | Severe => &FIELD.severe,
125    }.get(e)
126     .object()
127  }
128}
129
130impl java::Class for Level {
131  const PATH: &'static str = "java/util/logging/Level";
132}