jvmti_rs/wrapper/objects/
jthread_id.rs

1use std::marker::PhantomData;
2
3use crate::sys::{
4    jobject,
5    jthread,
6};
7
8#[repr(transparent)]
9#[derive(Clone, Copy, Debug)]
10pub struct JThreadID<'a> {
11    internal: jthread,
12    lifetime: PhantomData<&'a ()>,
13}
14
15impl<'a> From<jthread> for JThreadID<'a> {
16    fn from(thread: jthread) -> Self {
17        JThreadID {
18            internal: thread,
19            lifetime: PhantomData,
20        }
21    }
22}
23
24impl<'a> From<&JThreadID<'a>> for jthread {
25    fn from(other: &JThreadID<'a>) -> Self {
26        other.internal
27    }
28}
29
30impl<'a> From<JThreadID<'a>> for jthread {
31    fn from(other: JThreadID<'a>) -> Self {
32        other.internal
33    }
34}
35
36impl<'a> ::std::ops::Deref for JThreadID<'a> {
37    type Target = jthread;
38
39    fn deref(&self) -> &Self::Target {
40        &self.internal
41    }
42}
43
44impl<'a> JThreadID<'a> {
45    pub fn new(obj: jobject) -> JThreadID<'a> {
46        JThreadID {
47            internal: obj,
48            lifetime: PhantomData,
49        }
50    }
51
52    /// Creates a new null thread
53    pub fn null() -> JThreadID<'a> {
54        (::std::ptr::null_mut() as jthread).into()
55    }
56}