toad_jni/java/util/logging/
level.rs1use crate::java::{self, NoUpcast};
2
3#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
5pub enum Level {
6 All,
8 Config,
10 Fine,
12 Finer,
14 Finest,
16 Info,
18 Off,
20 Warning,
22 Severe,
24}
25
26impl Level {
27 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}