aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
index b62d52f..8f98366 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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;