use crate::cfg::config::Config; use std::fs::{File, create_dir_all}; use std::path::Path; use flate2::read::GzDecoder; use tar::Archive; pub enum arch { x86_64, aarch64, x86, } pub struct Package { name: String, version: String, arch: arch, descr: String, } impl Package { /// Checks if the archive contains INSTALL, SETTS and BUILD files. /// /// Checks if INSTALL file exists and is not empty. If it does not exist or is empty, returns an error. /// /// Checks if SETTS and BUILD files exist and are not empty. If they do not exist or are empty, logs a warning. /// /// * Returns an error if INSTALL file does not exist or is empty. /// * Returns an error if INSTALL file is empty. /// // TODO: Add meta-files validation here. pub fn check(path_to_archive: String) -> Result { let config: Config = Config::parse().unwrap(); create_dir_all(&config.paths.cache_dir)?; let file = File::open(&path_to_archive)?; let gz = GzDecoder::new(file); let mut archive = Archive::new(gz); archive.unpack(&config.paths.cache_dir)?; let install_path = Path::new(&config.paths.cache_dir).join("INSTALL"); let setts_path = Path::new(&config.paths.cache_dir).join("SETTS"); let build_path = Path::new(&config.paths.cache_dir).join("BUILD"); if !install_path.exists() { return Err(std::io::Error::new( std::io::ErrorKind::NotFound, "INSTALL file not found in archive", )); } let install_content = std::fs::read_to_string(&install_path)?; if install_content.trim().is_empty() { return Err(std::io::Error::new( std::io::ErrorKind::InvalidData, "INSTALL file is empty", )); } if !setts_path.exists() { log::warn!("SETTS file not found in archive. Make sure you dont need this."); } else { let setts_content = std::fs::read_to_string(&setts_path)?; if setts_content.trim().is_empty() { log::warn!("SETTS file is empty. Make sure you dont need this."); } } if !build_path.exists() { log::warn!("BUILD file not found in archive. Make sure you dont need this."); } else { let build_content = std::fs::read_to_string(&build_path)?; if build_content.trim().is_empty() { log::warn!("BUILD file is empty. Make sure you dont need this."); } } Ok(true) } pub fn build() -> Result { todo!(); } pub fn install() -> Result { todo!(); } }