typed_jni/array/
mod.rs

1mod object;
2mod primitive;
3mod primitive_impls;
4
5use core::marker::PhantomData;
6
7use typed_jni_core::{JNIEnv, StrongRef};
8
9pub use self::{object::*, primitive::*};
10use crate::{LocalObject, Object, ObjectType, Signature, Type, TypedRef, builtin::JavaThrowable};
11
12/// A type descriptor of an array.
13pub struct Array<T: Type + 'static>(pub PhantomData<T>);
14
15impl<T: Type + 'static> Type for Array<T> {
16    const SIGNATURE: Signature = Signature::Array(&T::SIGNATURE);
17}
18
19impl<T: Type + 'static> ObjectType for Array<T> {}
20
21/// Extension methods for typed arrays.
22pub trait TypedArrayExt {
23    /// Get the length of an array.
24    fn typed_get_array_length<R: StrongRef, T: ObjectType>(
25        &self,
26        array: &Object<R, Array<T>>,
27    ) -> Result<i32, LocalObject<'_, JavaThrowable>>;
28}
29
30impl<'vm> TypedArrayExt for JNIEnv<'vm> {
31    fn typed_get_array_length<R: StrongRef, T: Type + 'static>(
32        &self,
33        array: &Object<R, Array<T>>,
34    ) -> Result<i32, LocalObject<'_, JavaThrowable>> {
35        unsafe { self.get_array_length(&**array).map_err(|err| LocalObject::from_ref(err)) }
36    }
37}