Skip to main content

virtualbox_rs/
lib.rs

1//! `virtualbox_rs` is a Rust library for interacting with VirtualBox through its SDK.
2//!
3//! This library provides a comprehensive set of bindings to manage VirtualBox VMs, including
4//! creating, deleting, and modifying virtual machines, handling snapshots, and configuring
5//! various VM settings such as network adapters, audio settings, and encryption.
6//!
7//! # Features
8//!
9//! - Create and manage VirtualBox VMs
10//! - Handle VM snapshots
11//! - Configure VM settings (network, audio, encryption, etc.)
12//! - Support for different VirtualBox API versions (6.1 and 7.0)
13//!
14//! # Example
15//!
16//! ```no_run
17//! use virtualbox_rs::{Session, VirtualBox, VirtualBoxClient};
18//! use virtualbox_rs::enums::SessionType;
19//!
20//! VirtualBoxClient::check_version().unwrap();
21//! let vbox = VirtualBox::init().unwrap();
22//! let mut session = Session::init().unwrap();
23//! let machine = vbox.find_machines("Freebsd_14").unwrap();
24//! machine.lock_machine(&mut session, SessionType::Shared).unwrap();
25//!
26//! let machine_mut = session.get_machine().unwrap();
27//! let progress = machine_mut.delete_snapshot_and_all_children("278ef54a-2e75-4aba-b212-551af4c69725").unwrap();
28//! progress.wait_for_completion(-1).unwrap();
29//! ```
30//!
31//! # Supported Platforms
32//!
33//! This library has been tested on:
34//! - FreeBSD 14.1
35//! - Ubuntu 24.04
36//!
37//! # Supported VirtualBox Versions
38//!
39//! This library supports VirtualBox versions 6.1, 7.0, and 7.1. By default, the library is built for version 7.1.
40//! To change the target version, enable the corresponding feature flag: `v7_1`, `v7_0`, or `v6_1`.
41//! If multiple versions are specified, the library will be built for the highest version available.
42//!
43//! **Important:** Running the library with an incompatible VirtualBox version is likely to result in a `Segmentation fault`.
44//! Before using the library, ensure compatibility by invoking `VirtualBoxClient::check_version().unwrap();`.
45//! If the versions do not match, the program should terminate immediately.
46//!
47//! # Note
48//!
49//! Not everything has been implemented yet. The library emphasizes providing examples for each method, which should simplify its usage.
50mod appliance;
51mod audio_adapter;
52#[cfg(not(is_v_6_1))]
53mod audio_settings;
54mod bandwidth_control;
55mod bandwidth_group;
56#[cfg(not(is_v_7_1_or_newer))]
57mod bios_settings;
58mod cloud_network;
59mod console;
60mod core;
61mod certificate;
62#[cfg(not(is_v_6_1))]
63mod cpu_profile;
64mod data_stream;
65mod dhcp_server;
66mod display;
67pub mod enums;
68mod errors;
69mod event;
70pub mod event_detail;
71mod event_listener;
72mod event_source;
73mod ext_pack;
74mod ext_pack_manager;
75#[cfg(is_v_7_1_or_newer)]
76mod firmware_settings;
77mod framebuffer;
78mod graphics_adapter;
79mod guest;
80#[cfg(not(is_v_6_1))]
81mod guest_debug_control;
82mod guest_file;
83mod guest_os_type;
84mod guest_process;
85mod guest_session;
86mod host;
87#[cfg(not(is_v_6_1))]
88mod host_audio_device;
89mod host_network_interface;
90#[cfg(not(is_v_6_1))]
91mod host_only_network;
92mod keyboard;
93mod machine;
94mod medium;
95mod medium_attachment;
96mod medium_format;
97mod medium_io;
98mod mouse;
99mod nat_network;
100mod network_adapter;
101mod not_impl;
102#[cfg(not(is_v_6_1))]
103mod nvram_store;
104mod parallel_port;
105mod pci_device_attachment;
106#[cfg(is_v_7_1_or_newer)]
107mod platform;
108#[cfg(is_v_7_1_or_newer)]
109mod platform_properties;
110mod performance_collector;
111mod progress;
112mod recording_settings;
113mod serial_port;
114mod session;
115mod shared_folder;
116mod snapshot;
117mod storage_controller;
118mod system_properties;
119mod token;
120#[cfg(not(is_v_6_1))]
121mod trusted_platform_module;
122mod unattended;
123#[cfg(not(is_v_6_1))]
124mod update_agent;
125mod usb_controller;
126mod usb_device;
127mod usb_device_filters;
128pub(crate) mod utility;
129mod virtual_system_description;
130mod virtualbox;
131mod virtualbox_client;
132mod virtualbox_error_info;
133mod vfs_explorer;
134mod vrde_server;
135#[cfg(is_v_7_1_or_newer)]
136mod platform_x86;
137#[cfg(is_v_7_1_or_newer)]
138mod platform_arm;
139
140pub use appliance::Appliance;
141pub use audio_adapter::AudioAdapter;
142#[cfg(not(is_v_6_1))]
143pub use audio_settings::AudioSettings;
144pub use bandwidth_control::BandwidthControl;
145pub use bandwidth_group::BandwidthGroup;
146#[cfg(not(is_v_7_1_or_newer))]
147pub use bios_settings::BIOSSettings;
148pub use certificate::Certificate;
149pub use cloud_network::CloudNetwork;
150pub use console::Console;
151#[cfg(not(is_v_6_1))]
152pub use cpu_profile::CPUProfile;
153pub use data_stream::DataStream;
154pub use dhcp_server::DHCPServer;
155pub use display::Display;
156pub use display::Resolution;
157pub use display::VideoModeHint;
158pub use errors::vbox_error_type::VboxErrorType;
159pub use errors::VboxError;
160pub use event::Event;
161pub use event_listener::EventListener;
162pub use event_source::EventSource;
163pub use ext_pack::ExtPack;
164pub use ext_pack_manager::ExtPackManager;
165#[cfg(is_v_7_1_or_newer)]
166pub use firmware_settings::FirmwareSettings;
167pub use framebuffer::Framebuffer;
168pub use graphics_adapter::GraphicsAdapter;
169pub use guest::Guest;
170pub use guest::GuestInternalGetStatistics;
171#[cfg(not(is_v_6_1))]
172pub use guest_debug_control::GuestDebugControl;
173pub use guest_file::GuestFile;
174pub use guest_os_type::GuestOSType;
175pub use guest_process::GuestProcess;
176pub use guest_session::GuestSession;
177pub use host::Host;
178#[cfg(not(is_v_6_1))]
179pub use host_audio_device::HostAudioDevice;
180pub use host_network_interface::HostNetworkInterface;
181#[cfg(not(is_v_6_1))]
182pub use host_only_network::HostOnlyNetwork;
183pub use keyboard::Keyboard;
184pub use machine::Machine;
185pub use medium::Medium;
186pub use medium_attachment::MediumAttachment;
187pub use medium_format::MediumFormat;
188pub use medium_io::MediumIO;
189pub use mouse::Mouse;
190pub use nat_network::NATNetwork;
191pub use network_adapter::NetworkAdapter;
192#[cfg(is_v_7_1_or_newer)]
193pub use not_impl::bios_settings::BIOSSettings;
194#[cfg(is_v_6_1)]
195pub use not_impl::audio_settings_not_impl::AudioSettings;
196#[cfg(is_v_6_1)]
197pub use not_impl::cpu_profile::CPUProfile;
198#[cfg(is_v_6_1)]
199pub use not_impl::guest_debug_control_not_impl::GuestDebugControl;
200#[cfg(not(is_v_7_1_or_newer))]
201pub use not_impl::firmware_settings::FirmwareSettings;
202#[cfg(is_v_6_1)]
203pub use not_impl::host_audio_device::HostAudioDevice;
204#[cfg(is_v_6_1)]
205pub use not_impl::host_only_network::HostOnlyNetwork;
206#[cfg(is_v_6_1)]
207pub use not_impl::nvram_store::NvramStore;
208#[cfg(is_v_6_1)]
209pub use not_impl::trusted_platform_module::TrustedPlatformModule;
210#[cfg(is_v_6_1)]
211pub use not_impl::update_agent::UpdateAgent;
212#[cfg(not(is_v_6_1))]
213pub use nvram_store::NvramStore;
214pub use parallel_port::ParallelPort;
215#[cfg(is_v_7_1_or_newer)]
216pub use platform::Platform;
217#[cfg(not(is_v_7_1_or_newer))]
218pub use not_impl::platform::Platform;
219#[cfg(is_v_7_1_or_newer)]
220pub use platform_properties::PlatformProperties;
221pub use pci_device_attachment::PCIDeviceAttachment;
222pub use performance_collector::PerformanceCollector;
223pub use progress::Progress;
224pub use recording_settings::RecordingSettings;
225pub use serial_port::SerialPort;
226pub use session::Session;
227pub use shared_folder::SharedFolder;
228pub use snapshot::Snapshot;
229pub use storage_controller::StorageController;
230pub use system_properties::SystemProperties;
231pub use token::Token;
232#[cfg(not(is_v_6_1))]
233pub use trusted_platform_module::TrustedPlatformModule;
234pub use unattended::Unattended;
235#[cfg(not(is_v_6_1))]
236pub use update_agent::UpdateAgent;
237pub use usb_controller::USBController;
238pub use usb_device::USBDevice;
239pub use usb_device_filters::USBDeviceFilters;
240pub use virtual_system_description::VirtualSystemDescription;
241pub use virtual_system_description::VirtualSystemDescriptionInfo;
242pub use virtualbox::VirtualBox;
243pub use virtualbox_client::VirtualBoxClient;
244pub use virtualbox_error_info::VirtualBoxErrorInfo;
245pub use vfs_explorer::VFSExplorer;
246pub use vrde_server::VRDEServer;
247#[cfg(is_v_7_1_or_newer)]
248pub use platform_x86::PlatformX86;
249#[cfg(not(is_v_7_1_or_newer))]
250pub use not_impl::platform_x86::PlatformX86;
251#[cfg(is_v_7_1_or_newer)]
252pub use platform_arm::PlatformARM;
253#[cfg(not(is_v_7_1_or_newer))]
254pub use not_impl::platform_arm::PlatformARM;
255
256#[allow(dead_code)]
257fn add(left: usize, right: usize) -> usize {
258    left + right
259}
260
261#[cfg(test)]
262mod tests {
263    use super::*;
264
265    #[test]
266    fn it_works() {
267        let result = add(2, 2);
268        assert_eq!(result, 4);
269    }
270}