pub mod archive;
pub mod error;
pub mod hash;
pub mod parse;
pub mod sign;
pub mod split;
use std::path::Path;
use error::KnxprodError;
pub fn generate_knxprod(input: &Path, output: &Path) -> Result<parse::KnxMetadata, KnxprodError> {
let xml = std::fs::read_to_string(input).map_err(|e| KnxprodError::io(input, e))?;
let metadata = parse::extract_metadata_from_str(&xml)?;
let temp_dir = tempfile::tempdir().map_err(|e| KnxprodError::io(input, e))?;
let split_result = split::split_xml(&xml, &metadata, temp_dir.path())?;
let signed_result = sign::sign_application(&split_result)?;
archive::create_knxprod(temp_dir.path(), output)?;
let new_app_id = signed_result
.application
.file_stem()
.and_then(|s| s.to_str())
.unwrap_or(&metadata.application_id)
.to_string();
Ok(parse::KnxMetadata {
application_id: new_app_id,
..metadata
})
}