jvmti_rs/wrapper/objects/
jthread_id.rs1use 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 pub fn null() -> JThreadID<'a> {
54 (::std::ptr::null_mut() as jthread).into()
55 }
56}