jvmti_rs/wrapper/metadata/
jthread_info.rs

1use crate::{
2    objects::*,
3    stringify,
4};
5use crate::sys::jvmtiThreadInfo;
6use std::marker::PhantomData;
7use std::ptr;
8
9#[derive(Clone, Debug)]
10pub struct JThreadInfo<'a> {
11    internal: jvmtiThreadInfo,
12    lifetime: PhantomData<&'a ()>,
13
14    pub name: String,
15    pub priority: u32,
16    pub is_daemon: bool,
17    pub thread_group: JThreadGroupID<'a>,
18    pub context_class_loader: JObject<'a>,
19}
20
21impl<'a> JThreadInfo<'a> {
22    pub fn new(info: jvmtiThreadInfo) -> JThreadInfo<'a> {
23        JThreadInfo {
24            internal: info,
25            lifetime: PhantomData,
26
27            name: stringify(info.name),
28            priority: info.priority as u32,
29            is_daemon: if info.is_daemon > 0 { true } else { false },
30            thread_group: info.thread_group.into(),
31            context_class_loader: info.context_class_loader.into(),
32        }
33    }
34
35    pub fn empty_raw() -> jvmtiThreadInfo {
36        jvmtiThreadInfo {
37            name: ptr::null_mut(),
38            priority: 0,
39            is_daemon: 0,
40            thread_group: ptr::null_mut(),
41            context_class_loader: ptr::null_mut(),
42        }
43    }
44}
45
46impl<'a> ::std::ops::Deref for JThreadInfo<'a> {
47    type Target = jvmtiThreadInfo;
48
49    fn deref(&self) -> &Self::Target {
50        &self.internal
51    }
52}