use crate::console::Console;
use crate::enums::{SessionState, SessionType};
use crate::machine::Machine;
use crate::session::Session;
use crate::utility::macros::macros::{
get_function_result_number, get_function_result_pointer, get_function_result_str,
get_function_result_unit,
};
use crate::VboxError;
use vbox_raw::sys_lib::{IConsole, IMachine};
impl Session {
pub fn unlock_machine(&self) -> Result<(), VboxError> {
get_function_result_unit!(self.object, UnlockMachine)
}
pub fn get_state(&self) -> Result<SessionState, VboxError> {
let session_type = get_function_result_number!(self.object, GetState, u32)?;
Ok(SessionState::from(session_type))
}
pub fn get_type(&self) -> Result<SessionType, VboxError> {
let session_type = get_function_result_number!(self.object, GetType, u32)?;
Ok(SessionType::from(session_type))
}
pub fn get_name(&self) -> Result<&'static str, VboxError> {
get_function_result_str!(self.object, GetName)
}
pub fn get_machine(&self) -> Result<Machine, VboxError> {
let machine = get_function_result_pointer!(self.object, GetMachine, *mut IMachine)?;
Ok(Machine::new(machine))
}
pub fn get_console(&self) -> Result<Console, VboxError> {
let console = get_function_result_pointer!(self.object, GetConsole, *mut IConsole)?;
Ok(Console::new(console))
}
}