jvmti_rs/wrapper/objects/
jextension_event_info.rs1use 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}