jvmti_rs/wrapper/objects/
jextension_function_info.rs1use crate::{builder::*, JVMTIEnv, JvmtiError, objects::*, stringify, sys::*};
2
3#[derive(Debug)]
4pub struct JExtensionFunctionInfo<'a> {
5 internal: jvmtiExtensionFunctionInfo,
6
7 pub func: jvmtiExtensionFunction,
8 pub id: String,
9 pub short_description: String,
10 pub params: Vec<JParamInfo<'a>>,
11 pub errors: Vec<JvmtiError>,
12}
13
14impl<'a> JExtensionFunctionInfo<'a> {
15 pub fn new<'b: 'a>(info: jvmtiExtensionFunctionInfo, jvmti: &'b JVMTIEnv<'a>) -> JExtensionFunctionInfo<'a> {
16 let params_builder: MutAutoDeallocateObjectArrayBuilder<jvmtiParamInfo> = MutAutoDeallocateObjectArrayBuilder::create(info.param_count, info.params);
17 let params: Vec<JParamInfo<'a>> = params_builder.build(jvmti);
18 let errors_builder: MutObjectArrayBuilder<jvmtiError> = MutObjectArrayBuilder::create(info.error_count, info.errors);
19 let errors: Vec<JvmtiError> = errors_builder.build();
20
21 JExtensionFunctionInfo {
22 internal: info,
23
24 func: info.func,
25 id: stringify(info.id),
26 short_description: stringify(info.short_description),
27 params,
28 errors,
29 }
30 }
31}
32
33impl<'a> ::std::ops::Deref for JExtensionFunctionInfo<'a> {
34 type Target = jvmtiExtensionFunctionInfo;
35
36 fn deref(&self) -> &Self::Target {
37 &self.internal
38 }
39}