use crate::io::dwg::dwg_stream_writers::DwgBitWriter;
use crate::io::dwg::dwg_version::DwgVersion;
use crate::types::DxfVersion;
const APP_NAME: &str = "AppInfoDataList";
const LIB_VERSION: &str = "0.1.0";
pub fn write_app_info(version: DxfVersion) -> Vec<u8> {
let dwg_version = DwgVersion::from_dxf_version(version)
.unwrap_or(DwgVersion::AC18);
let mut writer = DwgBitWriter::new(dwg_version, version);
let empty_checksum = [0u8; 16];
let class_version = if version >= DxfVersion::AC1027 { 3 } else { 2 };
writer.write_int(class_version);
writer.write_text_unicode(APP_NAME);
writer.write_int(3);
writer.write_bytes(&empty_checksum);
writer.write_text_unicode(LIB_VERSION);
writer.write_bytes(&empty_checksum);
writer.write_text_unicode("Generated by acadrust");
writer.write_bytes(&empty_checksum);
let product_xml = format!(
"<ProductInformation name=\"acadrust\" build_version=\"{}\" \
registry_version=\"{}\" install_id_string=\"acadrust\" \
registry_localeID=\"1033\"/>",
LIB_VERSION, LIB_VERSION
);
writer.write_text_unicode(&product_xml);
writer.into_bytes()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_write_app_info_not_empty() {
let data = write_app_info(DxfVersion::AC1018);
assert!(data.len() > 80, "App info should be at least 80 bytes, got {}", data.len());
}
#[test]
fn test_write_app_info_starts_with_version_2() {
let data = write_app_info(DxfVersion::AC1018);
assert_eq!(&data[0..4], &[2, 0, 0, 0]);
}
}