toad_jni/java/
nullable.rs1use std::marker::PhantomData;
2
3use crate::java;
4
5pub struct Nullable<T>(java::lang::Object, PhantomData<T>);
9
10impl<T> Nullable<T> where T: java::Class
11{
12 pub fn into_option(self, e: &mut java::Env) -> Option<T> {
15 if self.0.is_null() {
16 None
17 } else {
18 Some(self.0.upcast_to::<T>(e))
19 }
20 }
21}
22
23impl<T> java::Class for Nullable<T> where T: java::Class
24{
25 const PATH: &'static str = T::PATH;
26}
27
28impl<T> java::Object for Nullable<T> where T: java::Class
29{
30 fn upcast(_: &mut java::Env, jobj: java::lang::Object) -> Self {
31 Self(jobj, PhantomData)
32 }
33
34 fn downcast(self, _: &mut java::Env) -> java::lang::Object {
35 self.0
36 }
37
38 fn downcast_ref(&self, e: &mut java::Env) -> java::lang::Object {
39 self.0.downcast_ref(e)
40 }
41}