Drop use of Option for Partition fields
This simplifies the code quite a bit and the Option<T> logic is only used for string parsing. s.is_empty() is just fine in this case IMO.
This commit is contained in:
parent
1e223aa56a
commit
dd03962c84
4 changed files with 56 additions and 74 deletions
40
src/app.rs
40
src/app.rs
|
|
@ -385,29 +385,31 @@ impl App {
|
|||
if let Some(disk_index) = self.disk_index_dest {
|
||||
if let Some(disk) = disk_list.get(disk_index) {
|
||||
let table_type = self.table_type.clone().unwrap();
|
||||
let letter_boot = if let Some(s) = disk
|
||||
.parts
|
||||
.get(self.part_index_boot.unwrap())
|
||||
.clone()
|
||||
.unwrap()
|
||||
.letter
|
||||
.clone()
|
||||
let letter_boot: String;
|
||||
let letter_os: String;
|
||||
if let Some(part) =
|
||||
disk.parts.get(self.part_index_boot.unwrap())
|
||||
{
|
||||
s
|
||||
} else {
|
||||
letter_boot = if part.letter.is_empty() {
|
||||
String::from("??")
|
||||
};
|
||||
let letter_os = if let Some(s) = disk
|
||||
.parts
|
||||
.get(self.part_index_os.unwrap())
|
||||
.unwrap()
|
||||
.letter
|
||||
.clone()
|
||||
{
|
||||
s
|
||||
} else {
|
||||
String::from("??")
|
||||
part.letter.clone()
|
||||
};
|
||||
letter_os = if part.letter.is_empty() {
|
||||
String::from("??")
|
||||
} else {
|
||||
part.letter.clone()
|
||||
};
|
||||
} else {
|
||||
self.action_tx.send(Action::DisplayPopup(
|
||||
popup::Type::Error,
|
||||
String::from(
|
||||
"Failed to get drive letters for destination",
|
||||
),
|
||||
))?;
|
||||
self.action_tx.send(Action::SetMode(Mode::Done))?;
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Create boot files
|
||||
self.action_tx.send(Action::Command(
|
||||
|
|
|
|||
|
|
@ -44,9 +44,9 @@ pub struct Disk {
|
|||
pub struct Partition {
|
||||
pub id: usize,
|
||||
pub is_selected: bool,
|
||||
pub fs_type: Option<String>,
|
||||
pub label: Option<String>,
|
||||
pub letter: Option<String>,
|
||||
pub fs_type: String,
|
||||
pub label: String,
|
||||
pub letter: String,
|
||||
pub part_type: String,
|
||||
pub size: u64, // In bytes
|
||||
}
|
||||
|
|
@ -102,10 +102,10 @@ impl fmt::Display for Disk {
|
|||
impl fmt::Display for Partition {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
let mut s: String;
|
||||
let fs = if let Some(fs_type) = &self.fs_type {
|
||||
format!("({fs_type})")
|
||||
} else {
|
||||
let fs = if self.fs_type.is_empty() {
|
||||
String::from("(?)")
|
||||
} else {
|
||||
format!("({})", self.fs_type)
|
||||
};
|
||||
if cfg!(windows) {
|
||||
s = format!(
|
||||
|
|
@ -122,8 +122,8 @@ impl fmt::Display for Partition {
|
|||
fs
|
||||
);
|
||||
}
|
||||
if let Some(l) = &self.label {
|
||||
s = format!("{s} \"{l}\"");
|
||||
if !self.label.is_empty() {
|
||||
s = format!("{s} \"{}\"", &self.label);
|
||||
}
|
||||
write!(f, "{s}")
|
||||
}
|
||||
|
|
@ -162,33 +162,31 @@ pub fn get_fake_disks() -> Vec<Disk> {
|
|||
part_type: PartitionTableType::Legacy,
|
||||
parts: vec![
|
||||
Partition {
|
||||
fs_type: Some(String::from("NTFS")),
|
||||
id: 1,
|
||||
label: Some(String::from("System Reserved")),
|
||||
fs_type: String::from("NTFS"),
|
||||
label: String::from("System Reserved"),
|
||||
part_type: String::from("7"),
|
||||
size: 104_857_600,
|
||||
..Default::default()
|
||||
},
|
||||
Partition {
|
||||
fs_type: None,
|
||||
id: 2,
|
||||
label: None,
|
||||
part_type: String::from("5"),
|
||||
size: 267_806_310_400,
|
||||
..Default::default()
|
||||
},
|
||||
Partition {
|
||||
fs_type: Some(String::from("NTFS")),
|
||||
id: 5,
|
||||
label: Some(String::from("Win7")),
|
||||
fs_type: String::from("NTFS"),
|
||||
label: String::from("Win7"),
|
||||
part_type: String::from("7"),
|
||||
size: 267_701_452_800,
|
||||
..Default::default()
|
||||
},
|
||||
Partition {
|
||||
fs_type: Some(String::from("NTFS")),
|
||||
id: 6,
|
||||
label: Some(String::from("Tools")),
|
||||
fs_type: String::from("NTFS"),
|
||||
label: String::from("Tools"),
|
||||
part_type: String::from("7"),
|
||||
size: 524_288_000,
|
||||
..Default::default()
|
||||
|
|
@ -204,9 +202,9 @@ pub fn get_fake_disks() -> Vec<Disk> {
|
|||
model: "ADATA Garbage".to_string(),
|
||||
part_type: PartitionTableType::Legacy,
|
||||
parts: vec![Partition {
|
||||
fs_type: Some(String::from("NTFS")),
|
||||
id: 1,
|
||||
label: Some(String::from("Scratch")),
|
||||
fs_type: String::from("NTFS"),
|
||||
label: String::from("Scratch"),
|
||||
part_type: String::from("7"),
|
||||
size: 249_998_951_424,
|
||||
..Default::default()
|
||||
|
|
@ -222,25 +220,23 @@ pub fn get_fake_disks() -> Vec<Disk> {
|
|||
part_type: PartitionTableType::Guid,
|
||||
parts: vec![
|
||||
Partition {
|
||||
fs_type: Some(String::from("FAT32")),
|
||||
id: 1,
|
||||
label: Some(String::from("ESP")),
|
||||
fs_type: String::from("FAT32"),
|
||||
label: String::from("ESP"),
|
||||
part_type: String::from("EFI"),
|
||||
size: 272_629_760,
|
||||
..Default::default()
|
||||
},
|
||||
Partition {
|
||||
fs_type: None,
|
||||
id: 2,
|
||||
label: None,
|
||||
part_type: String::from("MSR"),
|
||||
size: 16_777_216,
|
||||
..Default::default()
|
||||
},
|
||||
Partition {
|
||||
fs_type: Some(String::from("NTFS")),
|
||||
id: 4,
|
||||
label: Some(String::from("Win10")),
|
||||
fs_type: String::from("NTFS"),
|
||||
label: String::from("Win10"),
|
||||
part_type: String::from("MS Basic Data"),
|
||||
size: 824_340_119_552,
|
||||
..Default::default()
|
||||
|
|
@ -257,17 +253,15 @@ pub fn get_fake_disks() -> Vec<Disk> {
|
|||
part_type: PartitionTableType::Guid,
|
||||
parts: vec![
|
||||
Partition {
|
||||
fs_type: Some(String::from("FAT32")),
|
||||
id: 1,
|
||||
label: Some(String::from("EFI Boot")),
|
||||
fs_type: String::from("FAT32"),
|
||||
label: String::from("EFI Boot"),
|
||||
part_type: String::from("EFI"),
|
||||
size: 209_715_200,
|
||||
..Default::default()
|
||||
},
|
||||
Partition {
|
||||
fs_type: None,
|
||||
id: 2,
|
||||
label: None,
|
||||
part_type: String::from("{48465300-0000-11AA-AA11-00306543ECAC}"),
|
||||
size: 171_586_879_488,
|
||||
..Default::default()
|
||||
|
|
@ -281,7 +275,6 @@ pub fn get_fake_disks() -> Vec<Disk> {
|
|||
conn_type: "MISC".to_string(),
|
||||
id: 5,
|
||||
part_type: PartitionTableType::Legacy,
|
||||
parts: Vec::new(),
|
||||
model: "Iomega".to_string(),
|
||||
serial: "000".to_string(),
|
||||
size: 14,
|
||||
|
|
|
|||
|
|
@ -315,21 +315,9 @@ pub fn parse_partition_details(parts: &mut Vec<Partition>, contents: &str) {
|
|||
for (_, [_id, letter, label, fs_type]) in
|
||||
RE_VOL.captures_iter(vol_line).map(|c| c.extract())
|
||||
{
|
||||
part.label = if label.trim().is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(String::from(label.trim()))
|
||||
};
|
||||
part.letter = if letter.trim().is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(String::from(letter.trim()))
|
||||
};
|
||||
part.fs_type = if fs_type.trim().is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(String::from(fs_type.trim()))
|
||||
};
|
||||
part.label = String::from(label.trim());
|
||||
part.letter = String::from(letter.trim());
|
||||
part.fs_type = String::from(fs_type.trim());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,10 +40,9 @@ mod diskpart {
|
|||
fn get_partition_details() {
|
||||
// Left
|
||||
let partition_1 = system::disk::Partition {
|
||||
fs_type: Some(String::from("FAT32")),
|
||||
id: 1,
|
||||
label: Some(String::from("ESP")),
|
||||
letter: None,
|
||||
fs_type: String::from("FAT32"),
|
||||
label: String::from("ESP"),
|
||||
part_type: String::from("c12a7328-f81f-11d2-ba4b-00a0c93ec93b"),
|
||||
size: 272629760,
|
||||
..Default::default()
|
||||
|
|
@ -55,10 +54,10 @@ mod diskpart {
|
|||
..Default::default()
|
||||
};
|
||||
let partition_4 = system::disk::Partition {
|
||||
fs_type: Some(String::from("NTFS")),
|
||||
id: 4,
|
||||
label: Some(String::from("Windows")),
|
||||
letter: Some(String::from("C")),
|
||||
fs_type: String::from("NTFS"),
|
||||
label: String::from("Windows"),
|
||||
letter: String::from("C"),
|
||||
part_type: String::from("ebd0a0a2-b9e5-4433-87c0-68b6b72699c7"),
|
||||
size: 50465865728,
|
||||
..Default::default()
|
||||
|
|
@ -103,9 +102,9 @@ mod diskpart {
|
|||
disk.parts.push(system::disk::Partition::default());
|
||||
|
||||
let partition_1 = system::disk::Partition {
|
||||
fs_type: Some(String::from("FAT32")),
|
||||
label: Some(String::from("ESP")),
|
||||
letter: Some(String::from("S")),
|
||||
fs_type: String::from("FAT32"),
|
||||
label: String::from("ESP"),
|
||||
letter: String::from("S"),
|
||||
part_type: String::from("c12a7328-f81f-11d2-ba4b-00a0c93ec93b"),
|
||||
..Default::default()
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue