use std::fmt::Display; use crate::{ common::{Output, Relocatable}, error::Error, }; pub struct Linker<'data> { relocatables: Vec>, } impl<'data> Linker<'data> { pub fn new(relocatables: Vec>) -> Self { Self { relocatables } } pub fn add_relocatable(&mut self, relocatable: Box) { self.relocatables.push(relocatable); } pub fn link(&'data self, output: &mut dyn Output<'data>) -> Result { for r in self.relocatables.iter() { for s in r.sections() { output.append_section(s?)?; } } Ok(0) } } impl Display for Linker<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { writeln!(f, "===Relocatables===")?; for r in self.relocatables.iter() { write!(f, "{}", r)?; } Ok(()) } }