1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use std::marker::PhantomData;
use crate::sys::jfieldID;
/// Wrapper around `sys::jfieldid` that adds a lifetime. This prevents it from
/// outliving the context in which it was acquired and getting GC'd out from
/// under us. It matches C's representation of the raw pointer, so it can be
/// used in any of the extern function argument positions that would take a
/// `jfieldid`.
#[repr(transparent)]
#[derive(Copy, Clone)]
pub struct JFieldID<'a> {
internal: jfieldID,
lifetime: PhantomData<&'a ()>,
}
impl<'a> From<jfieldID> for JFieldID<'a> {
fn from(other: jfieldID) -> Self {
JFieldID {
internal: other,
lifetime: PhantomData,
}
}
}
impl<'a> JFieldID<'a> {
/// Unwrap to the internal jni type.
pub fn into_inner(self) -> jfieldID {
self.internal
}
}