libdonut_rs/lib.rs
1//! # Donut Loader API
2//!
3//! Public API for configuring and building Donut instances.
4//!
5//! ## Example
6//!
7//! ```rust
8//! use std::io;
9//! use libdonut_rs::{Donut, DonutConfig, DonutHttpInstance};
10//!
11//! fn main() -> io::Result<()> {
12//! let http_opts = DonutHttpInstance::new("http://127.0.0.1:9001", Some("/payload.bin"), 5, Some("GET"), false);
13//! let cfg = DonutConfig::new("C:\\Windows\\System32\\calc.exe").http_options(Some(http_opts));
14//! println!("Created config: {cfg:?}");
15//!
16//! let mut donut = Donut::new(&cfg)?;
17//! println!("Created donut object");
18//! let bp = donut.build()?;
19//! println!("Finished building donut object");
20//!
21//! let payload = bp.payload();
22//! let metadata = bp.metadata();
23//! println!("Metadata: {metadata:?}");
24//! println!("Payload size: {}", payload.len());
25//! Ok(())
26//! }
27//! ```
28//! ## Versioning
29//!
30//! - API version 5 is the current ([`DONUT_API_VERSION`]).
31//!
32//! ## Notes
33//!
34//! - This crate is under active development. APIs may change.
35
36#![cfg_attr(not(feature = "std"), no_std)]
37#![warn(missing_docs)]
38
39extern crate alloc;
40#[cfg(feature="loader")]
41extern crate core;
42
43/// Crate-wide error types.
44mod errors;
45
46/// Platform-specific bindings, structs, and types.
47mod platform;
48
49/// Common structs, types, and enums used across components.
50mod types;
51
52/// Public instance API.
53mod instance;
54
55/// Internal utilities.
56mod utils;
57
58/// Builder API (std-only).
59#[cfg(feature = "std")]
60mod builder;
61
62/// Compression utilities
63mod compression;
64
65/// Donut configuration code (std-only)
66#[cfg(feature = "std")]
67mod config;
68
69/// Cryptographic helpers and utilities
70mod crypto;
71
72/// Filesystem utilities (std-only)
73#[cfg(feature = "std")]
74mod fs;
75/// Module re-exports
76pub mod prelude;
77#[cfg(feature = "std")]
78mod donut;
79
80/// API version const
81pub const DONUT_API_VERSION: u32 = 5;
82
83/// Header value for the instance (debug mode)
84pub const DONUT_DEBUG_INSTANCE_VERSION: &[u8; 23] = b"DONUT_INSTANCE_VERSION=";
85#[cfg(feature = "std")]
86pub use prelude::{Donut, DonutConfig, DonutInstanceStub, DonutHttpInstance};
87pub use prelude::{DonutModule, DonutInstance,DonutResult, DonutError};