This commit is contained in:
2026-05-09 18:07:24 -05:00
parent 60f037d20d
commit d6b816d273
6 changed files with 48 additions and 2 deletions
+25 -1
View File
@@ -1,5 +1,4 @@
use std::ffi::OsString;
use std::io;
use std::path::{Path, PathBuf};
use clap::{Parser, Subcommand};
use crate::error::DrawerError;
@@ -94,6 +93,31 @@ fn resolve_key(key: Option<PathBuf>) -> KeyType {
}
impl DrawerOperation {
pub fn perform(&self) -> Result<(), DrawerError> {
self.validate()?;
match self.operation_type {
OperationType::Open => self.perform_open(),
OperationType::Close => self.perform_close(),
}
}
fn perform_open(&self) -> Result<(), DrawerError> {
todo!()
}
fn perform_close(&self) -> Result<(), DrawerError> {
let mut buf: Vec<u8> = Vec::new();
{
let mut archive = tar::Builder::new(&mut buf);
archive.append_dir_all(".", &self.target_path)
.map_err(|_| DrawerError::TarFailed)?;
archive.finish()
.map_err(|_| DrawerError::TarFailed)?;
}
std::fs::write(&self.drawer_file, &buf)
.map_err(|_| DrawerError::WriteFailed(self.drawer_file.clone()))
}
pub fn validate(&self) -> Result<(), DrawerError> {
if self.drawer_file.extension().and_then(|e| e.to_str()) != Some("drawer") {
return Err(DrawerError::DrawerFileInvalidExtension(self.drawer_file.clone()));