use {Machine, SectionKind, Symbol, SymbolMap};
pub trait Object<'data, 'file> {
type Segment: ObjectSegment<'data>;
type SegmentIterator: Iterator<Item = Self::Segment>;
type Section: ObjectSection<'data>;
type SectionIterator: Iterator<Item = Self::Section>;
type SymbolIterator: Iterator<Item = Symbol<'data>>;
fn machine(&self) -> Machine;
fn segments(&'file self) -> Self::SegmentIterator;
fn section_data_by_name(&self, section_name: &str) -> Option<&'data [u8]>;
fn sections(&'file self) -> Self::SectionIterator;
fn symbols(&'file self) -> Self::SymbolIterator;
fn dynamic_symbols(&'file self) -> Self::SymbolIterator;
fn symbol_map(&self) -> SymbolMap<'data>;
fn is_little_endian(&self) -> bool;
}
pub trait ObjectSegment<'data> {
fn address(&self) -> u64;
fn size(&self) -> u64;
fn data(&self) -> &'data [u8];
fn name(&self) -> Option<&str>;
}
pub trait ObjectSection<'data> {
fn address(&self) -> u64;
fn size(&self) -> u64;
fn data(&self) -> &'data [u8];
fn name(&self) -> Option<&str>;
fn segment_name(&self) -> Option<&str>;
fn kind(&self) -> SectionKind;
}