jvmti_rs/wrapper/objects/
jextension_function_info.rs

1use 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}