use std::io::{self, Write};
use crate::{
metadata::{tables::ManifestResourceAttributes, typesystem::CilTypeReference},
CilObject,
};
pub(super) fn format_resources(w: &mut dyn Write, assembly: &CilObject) -> io::Result<()> {
for entry in assembly.resources().iter() {
let name = entry.key();
let resource = entry.value();
let vis = if resource.flags.contains(ManifestResourceAttributes::PUBLIC) {
"public"
} else {
"private"
};
writeln!(w, ".mresource {vis} '{name}' {{")?;
match &resource.source {
Some(CilTypeReference::File(file)) => {
if resource.data_offset > 0 {
writeln!(
w,
" .file '{}' at 0x{:08X}",
file.name, resource.data_offset
)?;
} else {
writeln!(w, " .file '{}'", file.name)?;
}
}
Some(CilTypeReference::AssemblyRef(aref)) => {
writeln!(w, " .assembly extern '{}'", aref.name)?;
}
_ => {
}
}
writeln!(w, "}}")?;
}
Ok(())
}