use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum EsquemaParticion {
Mbr,
Gpt,
SinTabla,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SistemaArchivos {
Ntfs,
Fat,
Ext2,
Ext3,
Ext4,
Xfs,
Btrfs,
LinuxSwap,
Lvm2,
Desconocido,
}
impl SistemaArchivos {
pub fn es_linux(&self) -> bool {
matches!(
self,
SistemaArchivos::Ext2
| SistemaArchivos::Ext3
| SistemaArchivos::Ext4
| SistemaArchivos::Xfs
| SistemaArchivos::Btrfs
| SistemaArchivos::LinuxSwap
| SistemaArchivos::Lvm2
)
}
pub fn nombre(&self) -> &'static str {
match self {
SistemaArchivos::Ntfs => "NTFS",
SistemaArchivos::Fat => "FAT",
SistemaArchivos::Ext2 => "ext2",
SistemaArchivos::Ext3 => "ext3",
SistemaArchivos::Ext4 => "ext4",
SistemaArchivos::Xfs => "XFS",
SistemaArchivos::Btrfs => "Btrfs",
SistemaArchivos::LinuxSwap => "Linux swap",
SistemaArchivos::Lvm2 => "LVM2 PV",
SistemaArchivos::Desconocido => "desconocido",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SistemaOperativo {
Windows,
Linux,
Desconocido,
}
impl SistemaOperativo {
pub fn icono(&self) -> &'static str {
match self {
SistemaOperativo::Windows => "🪟",
SistemaOperativo::Linux => "🐧",
SistemaOperativo::Desconocido => "❓",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Particion {
pub indice: usize,
pub inicio: u64,
pub tamano: u64,
pub tipo: String,
pub sistema_archivos: SistemaArchivos,
pub etiqueta: Option<String>,
}
impl Particion {
pub fn es_ntfs(&self) -> bool {
matches!(self.sistema_archivos, SistemaArchivos::Ntfs)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_sistema_archivos() {
assert!(SistemaArchivos::Ext4.es_linux());
assert!(!SistemaArchivos::Ntfs.es_linux());
assert_eq!(SistemaArchivos::Ntfs.nombre(), "NTFS");
}
}