UPDATE - accept dyn error and make Box<dyn error> conform to IntoDiagnosticArg

This commit is contained in:
Jhonny Bill Mena 2022-11-04 01:16:16 -04:00
parent 28491a7b36
commit 540c3f94d7
3 changed files with 22 additions and 22 deletions

View file

@ -35,30 +35,29 @@ pub trait ArchiveBuilderBuilder {
outdir: &Path, outdir: &Path,
bundled_lib_file_names: &FxHashSet<Symbol>, bundled_lib_file_names: &FxHashSet<Symbol>,
) -> Result<(), ExtractBundledLibsError<'_>> { ) -> Result<(), ExtractBundledLibsError<'_>> {
let archive_map = let archive_map = unsafe {
unsafe { Mmap::map(
Mmap::map(File::open(rlib).map_err(|e| ExtractBundledLibsError::OpenFile { File::open(rlib)
rlib, .map_err(|e| ExtractBundledLibsError::OpenFile { rlib, error: Box::new(e) })?,
error: e.to_string(), )
})?) .map_err(|e| ExtractBundledLibsError::MmapFile { rlib, error: Box::new(e) })?
.map_err(|e| ExtractBundledLibsError::MmapFile { rlib, error: e.to_string() })? };
};
let archive = ArchiveFile::parse(&*archive_map) let archive = ArchiveFile::parse(&*archive_map)
.map_err(|e| ExtractBundledLibsError::ParseArchive { rlib, error: e.to_string() })?; .map_err(|e| ExtractBundledLibsError::ParseArchive { rlib, error: Box::new(e) })?;
for entry in archive.members() { for entry in archive.members() {
let entry = entry let entry = entry
.map_err(|e| ExtractBundledLibsError::ReadEntry { rlib, error: e.to_string() })?; .map_err(|e| ExtractBundledLibsError::ReadEntry { rlib, error: Box::new(e) })?;
let data = entry.data(&*archive_map).map_err(|e| { let data = entry
ExtractBundledLibsError::ArchiveMember { rlib, error: e.to_string() } .data(&*archive_map)
})?; .map_err(|e| ExtractBundledLibsError::ArchiveMember { rlib, error: Box::new(e) })?;
let name = std::str::from_utf8(entry.name()) let name = std::str::from_utf8(entry.name())
.map_err(|e| ExtractBundledLibsError::ConvertName { rlib, error: e.to_string() })?; .map_err(|e| ExtractBundledLibsError::ConvertName { rlib, error: Box::new(e) })?;
if !bundled_lib_file_names.contains(&Symbol::intern(name)) { if !bundled_lib_file_names.contains(&Symbol::intern(name)) {
continue; // We need to extract only native libraries. continue; // We need to extract only native libraries.
} }
std::fs::write(&outdir.join(&name), data) std::fs::write(&outdir.join(&name), data)
.map_err(|e| ExtractBundledLibsError::WriteFile { rlib, error: e.to_string() })?; .map_err(|e| ExtractBundledLibsError::WriteFile { rlib, error: Box::new(e) })?;
} }
Ok(()) Ok(())
} }

View file

@ -488,25 +488,25 @@ pub struct OptionGccOnly;
#[derive(Diagnostic)] #[derive(Diagnostic)]
pub enum ExtractBundledLibsError<'a> { pub enum ExtractBundledLibsError<'a> {
#[diag(codegen_ssa_extract_bundled_libs_open_file)] #[diag(codegen_ssa_extract_bundled_libs_open_file)]
OpenFile { rlib: &'a Path, error: String }, OpenFile { rlib: &'a Path, error: Box<dyn std::error::Error> },
#[diag(codegen_ssa_extract_bundled_libs_mmap_file)] #[diag(codegen_ssa_extract_bundled_libs_mmap_file)]
MmapFile { rlib: &'a Path, error: String }, MmapFile { rlib: &'a Path, error: Box<dyn std::error::Error> },
#[diag(codegen_ssa_extract_bundled_libs_parse_archive)] #[diag(codegen_ssa_extract_bundled_libs_parse_archive)]
ParseArchive { rlib: &'a Path, error: String }, ParseArchive { rlib: &'a Path, error: Box<dyn std::error::Error> },
#[diag(codegen_ssa_extract_bundled_libs_read_entry)] #[diag(codegen_ssa_extract_bundled_libs_read_entry)]
ReadEntry { rlib: &'a Path, error: String }, ReadEntry { rlib: &'a Path, error: Box<dyn std::error::Error> },
#[diag(codegen_ssa_extract_bundled_libs_archive_member)] #[diag(codegen_ssa_extract_bundled_libs_archive_member)]
ArchiveMember { rlib: &'a Path, error: String }, ArchiveMember { rlib: &'a Path, error: Box<dyn std::error::Error> },
#[diag(codegen_ssa_extract_bundled_libs_convert_name)] #[diag(codegen_ssa_extract_bundled_libs_convert_name)]
ConvertName { rlib: &'a Path, error: String }, ConvertName { rlib: &'a Path, error: Box<dyn std::error::Error> },
#[diag(codegen_ssa_extract_bundled_libs_write_file)] #[diag(codegen_ssa_extract_bundled_libs_write_file)]
WriteFile { rlib: &'a Path, error: String }, WriteFile { rlib: &'a Path, error: Box<dyn std::error::Error> },
} }
#[derive(Diagnostic)] #[derive(Diagnostic)]

View file

@ -59,6 +59,7 @@ into_diagnostic_arg_using_display!(
i128, i128,
u128, u128,
std::io::Error, std::io::Error,
std::boxed::Box<dyn std::error::Error>,
std::num::NonZeroU32, std::num::NonZeroU32,
hir::Target, hir::Target,
Edition, Edition,