file_system/mbr/partition/statistics.rs
1use crate::Size;
2
3/// Comprehensive statistics about partitions in an MBR.
4///
5/// This structure provides detailed statistical information about the partitions
6/// present in an MBR, including counts by type, size information, and bootability status.
7/// It's useful for disk analysis, partition management tools, and system diagnostics.
8///
9/// # Fields
10///
11/// ## Partition Counts
12/// * `total_partitions` - Total number of valid partitions
13/// * `Bootable_partitions` - Number of partitions marked as bootable
14/// * `Fat_partitions` - Number of FAT file system partitions (FAT16, FAT32, etc.)
15/// * `Linux_partitions` - Number of Linux-type partitions
16/// * `Hidden_partitions` - Number of hidden partitions
17/// * `Extended_partitions` - Number of extended partitions
18/// * `Unknown_partitions` - Number of partitions with unknown/unrecognized types
19///
20/// ## Size Information
21/// * `Total_used_sectors` - Total sectors used by all partitions
22/// * `Largest_partition_sectors` - Size of the largest partition in sectors
23/// * `Smallest_partition_sectors` - Size of the smallest partition in sectors
24///
25/// # Examples
26///
27/// ```rust
28/// extern crate alloc;
29/// use file_system::{mbr::{Mbr, PartitionKind, PartitionStatistics}, MemoryDevice};
30///
31/// let device = MemoryDevice::<512>::new(4 * 1024 * 1024);
32/// // Create an MBR with some partitions
33/// let mut mbr = Mbr::new_with_signature(0x12345678);
34/// mbr.add_partition(PartitionKind::Fat32Lba, 2048, 1024, true).unwrap();
35/// mbr.add_partition(PartitionKind::Linux, 4096, 2048, false).unwrap();
36/// mbr.write_to_device(&device).unwrap();
37///
38/// // Read it back and get statistics
39/// let mbr = Mbr::read_from_device(&device).unwrap();
40/// let stats = mbr.get_statistics();
41/// println!("Total partitions: {}", stats.total_partitions);
42/// println!("Bootable partitions: {}", stats.bootable_partitions);
43/// println!("Total used sectors: {}", stats.total_used_sectors);
44/// ```
45#[derive(Debug, Clone)]
46pub struct PartitionStatistics {
47 /// Total number of valid partitions in the MBR.
48 pub total_partitions: usize,
49 /// Number of partitions marked as bootable.
50 pub bootable_partitions: usize,
51 /// Number of FAT file system partitions.
52 pub fat_partitions: usize,
53 /// Number of Linux-type partitions.
54 pub linux_partitions: usize,
55 /// Number of hidden partitions.
56 pub hidden_partitions: usize,
57 /// Number of extended partitions.
58 pub extended_partitions: usize,
59 /// Number of partitions with unknown types.
60 pub unknown_partitions: usize,
61 /// Total sectors used by all partitions.
62 pub total_used_sectors: Size,
63 /// Size of the largest partition in sectors.
64 pub largest_partition_sectors: u32,
65 /// Size of the smallest partition in sectors.
66 pub smallest_partition_sectors: u32,
67}