jvmti_rs/wrapper/objects/
jextension_event_info.rs

1use std::marker::PhantomData;
2
3use crate::{builder::*, JVMTIEnv, JvmtiParamKind, JvmtiParamTypes, stringify, sys::*, to_bool};
4
5#[derive(Debug)]
6pub struct JExtensionEventInfo<'a> {
7    internal: jvmtiExtensionEventInfo,
8
9    pub extension_event_index: u32,
10    pub id: String,
11    pub short_description: String,
12    pub params: Vec<JParamInfo<'a>>,
13}
14
15impl<'a> JExtensionEventInfo<'a> {
16    pub fn new<'b: 'a>(info: jvmtiExtensionEventInfo, jvmti: &'b JVMTIEnv<'a>) -> Self {
17        let builder: MutAutoDeallocateObjectArrayBuilder<jvmtiParamInfo> = MutAutoDeallocateObjectArrayBuilder::create(info.param_count, info.params);
18        let params: Vec<JParamInfo<'a>> = builder.build(jvmti);
19
20        JExtensionEventInfo {
21            internal: info,
22
23            extension_event_index: info.extension_event_index as u32,
24            id: stringify(info.id),
25            short_description: stringify(info.short_description),
26            params,
27        }
28    }
29}
30
31impl<'a> ::std::ops::Deref for JExtensionEventInfo<'a> {
32    type Target = jvmtiExtensionEventInfo;
33
34    fn deref(&self) -> &Self::Target {
35        &self.internal
36    }
37}
38
39
40#[derive(Debug)]
41pub struct JParamInfo<'a> {
42    internal: jvmtiParamInfo,
43    lifetime: PhantomData<&'a ()>,
44
45    pub name: String,
46    pub kind: JvmtiParamKind,
47    pub base_type: JvmtiParamTypes,
48    pub null_ok: bool,
49}
50
51
52impl<'a> From<jvmtiParamInfo> for JParamInfo<'a> {
53    fn from(info: jvmtiParamInfo) -> Self {
54        JParamInfo {
55            internal: info,
56            lifetime: PhantomData,
57
58            name: stringify(info.name),
59            kind: info.kind.into(),
60            base_type: info.base_type.into(),
61            null_ok: to_bool(info.null_ok),
62        }
63    }
64}
65
66impl<'a> ::std::ops::Deref for JParamInfo<'a> {
67    type Target = jvmtiParamInfo;
68
69    fn deref(&self) -> &Self::Target {
70        &self.internal
71    }
72}