use {Machine, Symbol};
pub trait Object<'a>: Sized {
type Segment: ObjectSegment<'a>;
type SegmentIterator: Iterator<Item = Self::Segment>;
type Section: ObjectSection<'a>;
type SectionIterator: Iterator<Item = Self::Section>;
fn parse(data: &'a [u8]) -> Result<Self, &'static str>;
fn machine(&self) -> Machine;
fn segments(&'a self) -> Self::SegmentIterator;
fn section_data_by_name(&self, section_name: &str) -> Option<&'a [u8]>;
fn sections(&'a self) -> Self::SectionIterator;
fn symbols(&self) -> Vec<Symbol<'a>>;
fn is_little_endian(&self) -> bool;
}
pub trait ObjectSegment<'a> {
fn address(&self) -> u64;
fn size(&self) -> u64;
fn data(&self) -> &'a [u8];
fn name(&self) -> Option<&str>;
}
pub trait ObjectSection<'a> {
fn address(&self) -> u64;
fn size(&self) -> u64;
fn data(&self) -> &'a [u8];
fn name(&self) -> Option<&str>;
fn segment_name(&self) -> Option<&str>;
}