jvmti_rs/wrapper/jvmtifns/
capability.rs

1use crate::{
2    errors::*,
3    JVMTIEnv,
4    objects::*,
5};
6use crate::sys::jvmtiCapabilities;
7
8impl<'a> JVMTIEnv<'a> {
9    pub fn get_capabilities(&self) -> Result<JCapabilities> {
10        let mut capabilities: jvmtiCapabilities = jvmtiCapabilities {
11            _bitfield_1: jvmtiCapabilities::newEmptyBitfield(),
12        };
13        let res = jvmti_call_result!(self.jvmti_raw(), GetCapabilities,
14            &mut capabilities
15        );
16        jvmti_error_code_to_result(res)?;
17        Ok(JCapabilities::merge(capabilities))
18    }
19
20    pub fn get_potential_capabilities(&self) -> Result<JCapabilities> {
21        let mut capabilities: jvmtiCapabilities = jvmtiCapabilities {
22            _bitfield_1: jvmtiCapabilities::newEmptyBitfield(),
23        };
24        let res = jvmti_call_result!(self.jvmti_raw(), GetPotentialCapabilities,
25            &mut capabilities
26        );
27        jvmti_error_code_to_result(res)?;
28        Ok(JCapabilities::merge(capabilities))
29    }
30
31    pub fn add_capabilities(&self, caps: &JCapabilities) -> Result<()> {
32        let capabilities_ptr: jvmtiCapabilities = (*caps).into();
33        jvmti_call!(self.jvmti_raw(), AddCapabilities,
34            &capabilities_ptr
35        )
36    }
37
38    pub fn relinquish_capabilities(&self, caps: &JCapabilities) -> Result<()> {
39        let capabilities_ptr: jvmtiCapabilities = (*caps).into();
40        jvmti_call!(self.jvmti_raw(), RelinquishCapabilities,
41            &capabilities_ptr
42        )
43    }
44}