toad_jni/java/
primitive.rs1use jni::objects::{JValue, JValueOwned};
2
3use crate::java;
4
5pub trait Primitive
8 where Self: java::Type + Sized + Copy
9{
10 type PrimitiveWrapper: java::Class;
12
13 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper;
15
16 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self;
18
19 fn from_jvalue_ref(jv: JValue) -> Self;
21
22 fn from_jvalue(jv: JValueOwned) -> Self;
24
25 fn into_jvalue<'local>(self) -> JValueOwned<'local>;
27}
28
29impl Primitive for i8 {
30 type PrimitiveWrapper = java::lang::Byte;
31
32 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper {
33 java::lang::Byte::new(e, *self)
34 }
35
36 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self {
37 w.inner(e)
38 }
39
40 fn from_jvalue_ref(jv: JValue) -> i8 {
41 jv.b().unwrap()
42 }
43
44 fn from_jvalue(jv: JValueOwned) -> Self {
45 jv.b().unwrap()
46 }
47
48 fn into_jvalue<'local>(self) -> JValueOwned<'local> {
49 self.into()
50 }
51}
52
53impl Primitive for u16 {
54 type PrimitiveWrapper = java::lang::Char;
55
56 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper {
57 java::lang::Char::new(e, *self)
58 }
59
60 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self {
61 w.inner(e)
62 }
63
64 fn from_jvalue_ref(jv: JValue) -> u16 {
65 jv.c().unwrap()
66 }
67
68 fn from_jvalue(jv: JValueOwned) -> Self {
69 Self::from_jvalue_ref((&jv).into())
70 }
71
72 fn into_jvalue<'local>(self) -> JValueOwned<'local> {
73 self.into()
74 }
75}
76
77impl Primitive for i16 {
78 type PrimitiveWrapper = java::lang::Short;
79
80 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper {
81 java::lang::Short::new(e, *self)
82 }
83
84 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self {
85 w.inner(e)
86 }
87
88 fn from_jvalue_ref(jv: JValue) -> i16 {
89 jv.s().unwrap()
90 }
91
92 fn from_jvalue(jv: JValueOwned) -> Self {
93 Self::from_jvalue_ref((&jv).into())
94 }
95
96 fn into_jvalue<'local>(self) -> JValueOwned<'local> {
97 self.into()
98 }
99}
100
101impl Primitive for i32 {
102 type PrimitiveWrapper = java::lang::Integer;
103
104 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper {
105 java::lang::Integer::new(e, *self)
106 }
107
108 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self {
109 w.inner(e)
110 }
111
112 fn from_jvalue_ref(jv: JValue) -> i32 {
113 jv.i().unwrap()
114 }
115
116 fn from_jvalue(jv: JValueOwned) -> Self {
117 Self::from_jvalue_ref((&jv).into())
118 }
119
120 fn into_jvalue<'local>(self) -> JValueOwned<'local> {
121 self.into()
122 }
123}
124
125impl Primitive for i64 {
126 type PrimitiveWrapper = java::lang::Long;
127
128 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper {
129 java::lang::Long::new(e, *self)
130 }
131
132 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self {
133 w.inner(e)
134 }
135
136 fn from_jvalue_ref(jv: JValue) -> i64 {
137 jv.j().unwrap()
138 }
139
140 fn from_jvalue(jv: JValueOwned) -> Self {
141 Self::from_jvalue_ref((&jv).into())
142 }
143
144 fn into_jvalue<'local>(self) -> JValueOwned<'local> {
145 self.into()
146 }
147}
148
149impl Primitive for f32 {
150 type PrimitiveWrapper = java::lang::Float;
151
152 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper {
153 java::lang::Float::new(e, *self)
154 }
155
156 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self {
157 w.inner(e)
158 }
159
160 fn from_jvalue_ref(jv: JValue) -> f32 {
161 jv.f().unwrap()
162 }
163
164 fn from_jvalue(jv: JValueOwned) -> Self {
165 Self::from_jvalue_ref((&jv).into())
166 }
167
168 fn into_jvalue<'local>(self) -> JValueOwned<'local> {
169 self.into()
170 }
171}
172
173impl Primitive for f64 {
174 type PrimitiveWrapper = java::lang::Double;
175
176 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper {
177 java::lang::Double::new(e, *self)
178 }
179
180 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self {
181 w.inner(e)
182 }
183
184 fn from_jvalue_ref(jv: JValue) -> f64 {
185 jv.d().unwrap()
186 }
187
188 fn from_jvalue(jv: JValueOwned) -> Self {
189 Self::from_jvalue_ref((&jv).into())
190 }
191
192 fn into_jvalue<'local>(self) -> JValueOwned<'local> {
193 self.into()
194 }
195}
196
197impl Primitive for bool {
198 type PrimitiveWrapper = java::lang::Bool;
199
200 fn to_primitive_wrapper(&self, e: &mut java::Env) -> Self::PrimitiveWrapper {
201 java::lang::Bool::new(e, *self)
202 }
203
204 fn from_primitive_wrapper(e: &mut java::Env, w: Self::PrimitiveWrapper) -> Self {
205 w.inner(e)
206 }
207
208 fn from_jvalue_ref(jv: JValue) -> bool {
209 jv.z().unwrap()
210 }
211
212 fn from_jvalue(jv: JValueOwned) -> Self {
213 Self::from_jvalue_ref((&jv).into())
214 }
215
216 fn into_jvalue<'local>(self) -> JValueOwned<'local> {
217 self.into()
218 }
219}