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 } }