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_manager;
74#[cfg(is_v_7_1_or_newer)]
75mod firmware_settings;
76mod framebuffer;
77mod graphics_adapter;
78mod guest;
79#[cfg(not(is_v_6_1))]
80mod guest_debug_control;
81mod guest_file;
82mod guest_os_type;
83mod guest_process;
84mod guest_session;
85mod host;
86#[cfg(not(is_v_6_1))]
87mod host_audio_device;
88mod host_network_interface;
89#[cfg(not(is_v_6_1))]
90mod host_only_network;
91mod keyboard;
92mod machine;
93mod medium;
94mod medium_attachment;
95mod medium_format;
96mod medium_io;
97mod mouse;
98mod nat_network;
99mod network_adapter;
100mod not_impl;
101#[cfg(not(is_v_6_1))]
102mod nvram_store;
103mod parallel_port;
104mod pci_device_attachment;
105#[cfg(is_v_7_1_or_newer)]
106mod platform;
107#[cfg(is_v_7_1_or_newer)]
108mod platform_properties;
109mod performance_collector;
110mod progress;
111mod recording_settings;
112mod serial_port;
113mod session;
114mod shared_folder;
115mod snapshot;
116mod storage_controller;
117mod system_properties;
118mod token;
119#[cfg(not(is_v_6_1))]
120mod trusted_platform_module;
121mod unattended;
122#[cfg(not(is_v_6_1))]
123mod update_agent;
124mod usb_controller;
125mod usb_device;
126mod usb_device_filters;
127pub(crate) mod utility;
128mod virtual_system_description;
129mod virtualbox;
130mod virtualbox_client;
131mod virtualbox_error_info;
132mod vfs_explorer;
133mod vrde_server;
134#[cfg(is_v_7_1_or_newer)]
135mod platform_x86;
136#[cfg(is_v_7_1_or_newer)]
137mod platform_arm;
138
139pub use appliance::Appliance;
140pub use audio_adapter::AudioAdapter;
141#[cfg(not(is_v_6_1))]
142pub use audio_settings::AudioSettings;
143pub use bandwidth_control::BandwidthControl;
144pub use bandwidth_group::BandwidthGroup;
145#[cfg(not(is_v_7_1_or_newer))]
146pub use bios_settings::BIOSSettings;
147pub use certificate::Certificate;
148pub use cloud_network::CloudNetwork;
149pub use console::Console;
150#[cfg(not(is_v_6_1))]
151pub use cpu_profile::CPUProfile;
152pub use data_stream::DataStream;
153pub use dhcp_server::DHCPServer;
154pub use display::Display;
155pub use display::Resolution;
156pub use display::VideoModeHint;
157pub use errors::vbox_error_type::VboxErrorType;
158pub use errors::VboxError;
159pub use event::Event;
160pub use event_listener::EventListener;
161pub use event_source::EventSource;
162pub use ext_pack_manager::ExtPackManager;
163#[cfg(is_v_7_1_or_newer)]
164pub use firmware_settings::FirmwareSettings;
165pub use framebuffer::Framebuffer;
166pub use graphics_adapter::GraphicsAdapter;
167pub use guest::Guest;
168pub use guest::GuestInternalGetStatistics;
169#[cfg(not(is_v_6_1))]
170pub use guest_debug_control::GuestDebugControl;
171pub use guest_file::GuestFile;
172pub use guest_os_type::GuestOSType;
173pub use guest_process::GuestProcess;
174pub use guest_session::GuestSession;
175pub use host::Host;
176#[cfg(not(is_v_6_1))]
177pub use host_audio_device::HostAudioDevice;
178pub use host_network_interface::HostNetworkInterface;
179#[cfg(not(is_v_6_1))]
180pub use host_only_network::HostOnlyNetwork;
181pub use keyboard::Keyboard;
182pub use machine::Machine;
183pub use medium::Medium;
184pub use medium_attachment::MediumAttachment;
185pub use medium_format::MediumFormat;
186pub use medium_io::MediumIO;
187pub use mouse::Mouse;
188pub use nat_network::NATNetwork;
189pub use network_adapter::NetworkAdapter;
190#[cfg(is_v_7_1_or_newer)]
191pub use not_impl::bios_settings::BIOSSettings;
192#[cfg(is_v_6_1)]
193pub use not_impl::audio_settings_not_impl::AudioSettings;
194#[cfg(is_v_6_1)]
195pub use not_impl::cpu_profile::CPUProfile;
196#[cfg(is_v_6_1)]
197pub use not_impl::guest_debug_control_not_impl::GuestDebugControl;
198#[cfg(not(is_v_7_1_or_newer))]
199pub use not_impl::firmware_settings::FirmwareSettings;
200#[cfg(is_v_6_1)]
201pub use not_impl::host_audio_device::HostAudioDevice;
202#[cfg(is_v_6_1)]
203pub use not_impl::host_only_network::HostOnlyNetwork;
204#[cfg(is_v_6_1)]
205pub use not_impl::nvram_store::NvramStore;
206#[cfg(is_v_6_1)]
207pub use not_impl::trusted_platform_module::TrustedPlatformModule;
208#[cfg(is_v_6_1)]
209pub use not_impl::update_agent::UpdateAgent;
210#[cfg(not(is_v_6_1))]
211pub use nvram_store::NvramStore;
212pub use parallel_port::ParallelPort;
213#[cfg(is_v_7_1_or_newer)]
214pub use platform::Platform;
215#[cfg(not(is_v_7_1_or_newer))]
216pub use not_impl::platform::Platform;
217#[cfg(is_v_7_1_or_newer)]
218pub use platform_properties::PlatformProperties;
219pub use pci_device_attachment::PCIDeviceAttachment;
220pub use performance_collector::PerformanceCollector;
221pub use progress::Progress;
222pub use recording_settings::RecordingSettings;
223pub use serial_port::SerialPort;
224pub use session::Session;
225pub use shared_folder::SharedFolder;
226pub use snapshot::Snapshot;
227pub use storage_controller::StorageController;
228pub use system_properties::SystemProperties;
229pub use token::Token;
230#[cfg(not(is_v_6_1))]
231pub use trusted_platform_module::TrustedPlatformModule;
232pub use unattended::Unattended;
233#[cfg(not(is_v_6_1))]
234pub use update_agent::UpdateAgent;
235pub use usb_controller::USBController;
236pub use usb_device::USBDevice;
237pub use usb_device_filters::USBDeviceFilters;
238pub use virtual_system_description::VirtualSystemDescription;
239pub use virtualbox::VirtualBox;
240pub use virtualbox_client::VirtualBoxClient;
241pub use virtualbox_error_info::VirtualBoxErrorInfo;
242pub use vfs_explorer::VFSExplorer;
243pub use vrde_server::VRDEServer;
244#[cfg(is_v_7_1_or_newer)]
245pub use platform_x86::PlatformX86;
246#[cfg(not(is_v_7_1_or_newer))]
247pub use not_impl::platform_x86::PlatformX86;
248#[cfg(is_v_7_1_or_newer)]
249pub use platform_arm::PlatformARM;
250#[cfg(not(is_v_7_1_or_newer))]
251pub use not_impl::platform_arm::PlatformARM;
252
253#[allow(dead_code)]
254fn add(left: usize, right: usize) -> usize {
255    left + right
256}
257
258#[cfg(test)]
259mod tests {
260    use super::*;
261
262    #[test]
263    fn it_works() {
264        let result = add(2, 2);
265        assert_eq!(result, 4);
266    }
267}