toad_jni/java/
no_upcast.rs1use std::marker::PhantomData;
2
3use crate::java;
4
5pub struct NoUpcast<T>(java::lang::Object, PhantomData<T>);
9
10impl<T> NoUpcast<T> where T: java::Class
11{
12 pub fn object(self) -> java::lang::Object {
14 self.0
15 }
16
17 pub fn from_object(o: java::lang::Object) -> Self {
19 Self(o, PhantomData)
20 }
21}
22
23impl<T> java::Class for NoUpcast<T> where T: java::Class
24{
25 const PATH: &'static str = T::PATH;
26}
27
28impl<T> java::Object for NoUpcast<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.object()
36 }
37
38 fn downcast_ref(&self, e: &mut java::Env) -> java::lang::Object {
39 self.0.downcast_ref(e)
40 }
41}