diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 29 | 
1 files changed, 29 insertions, 0 deletions
| @@ -1,5 +1,7 @@  extern crate num_traits;  extern crate termion; +#[cfg(feature="use-serde")] +extern crate serde;  use std::str::FromStr; @@ -14,6 +16,9 @@ use num_traits::{Bounded, WrappingAdd, WrappingSub, CheckedAdd, CheckedSub};  use termion::color; +#[cfg(feature="use-serde")] +use serde::{Serialize, Deserialize}; +  pub mod display;                                                               // This is pretty wonk..  pub trait AddressDisplay { @@ -34,6 +39,22 @@ pub trait AddrParse: Sized {      fn parse_from(s: &str) -> Result<Self, Self::Err>;  } +#[cfg(feature="use-serde")] +pub trait Address where Self: +    Serialize + for<'de> Deserialize<'de> + +    Debug + Display + AddressDisplay + +    Copy + Clone + Sized + +    Ord + Eq + PartialEq + Bounded + +    Add<Output=Self> + Sub<Output=Self> + +    AddAssign + SubAssign + +    WrappingAdd + WrappingSub + +    CheckedAdd + CheckedSub + +    AddrParse + +    identities::One + identities::Zero { +    fn to_linear(&self) -> usize; + +} +#[cfg(not(feature="use-serde"))]  pub trait Address where Self:      Debug + Display + AddressDisplay +      Copy + Clone + Sized + @@ -142,6 +163,14 @@ pub trait Decodable where Self: Sized {      fn decode_into<T: IntoIterator<Item=u8>>(&mut self, bytes: T) -> Option<()>;  } +#[cfg(feature="use-serde")] +pub trait Arch { +    type Address: Address + Debug + Serialize + for<'de> Deserialize<'de>; +    type Instruction: Decodable + LengthedInstruction<Unit=Self::Address> + Debug; +    type Operand; +} + +#[cfg(not(feature="use-serde"))]  pub trait Arch {      type Address: Address + Debug;      type Instruction: Decodable + LengthedInstruction<Unit=Self::Address> + Debug; | 
