use std::path::Path;
use colored::Colorize;
use crate::core::PartitionPrint;
use crate::helper::types::{DataType, PartitionFmt};
use crate::helper::utils;
use crate::parser::partition::PartitionParser;
use crate::writer::partition::PartWriter;
impl PartitionPrint for PartitionConverter<'_> {}
pub struct PartitionConverter<'a> {
input: &'a Path,
input_partition_fmt: &'a PartitionFmt,
output: &'a Path,
output_partition_fmt: &'a PartitionFmt,
}
impl<'a> PartitionConverter<'a> {
pub fn new(
input: &'a Path,
input_partition_fmt: &'a PartitionFmt,
output: &'a Path,
output_partition_fmt: &'a PartitionFmt,
) -> Self {
Self {
input,
input_partition_fmt,
output,
output_partition_fmt,
}
}
pub fn convert(&self, datatype: &DataType, is_uncheck: bool) {
let partitions =
PartitionParser::new(self.input, self.input_partition_fmt, is_uncheck).parse();
self.print_partition_info(self.input, &partitions.len());
let spin = utils::set_spinner();
spin.set_message("Converting partitions...");
let writer = PartWriter::new(
self.output,
&partitions,
self.output_partition_fmt,
datatype,
);
writer.write_partition();
spin.finish_with_message("Finished converting partitions!\n");
self.print_output_info()
}
fn print_output_info(&self) {
log::info!("{}", "Output".yellow());
log::info!("{:18}: {}", "Output path", self.output.display());
}
}