diff --git a/Cargo.toml b/Cargo.toml index 606ca45..8f9e786 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,13 +11,16 @@ license = "MIT" edition = "2018" publish = false +[features] +serde_obj = ["serde"] + [workspace] members = ["source/leela", "source/tycho"] [dependencies] bitflags = "1.0" failure = {version = "0.1", features = ["std"]} -serde = {version = "1.0", features = ["derive"]} +serde = {version = "1.0", features = ["derive"], optional = true} memchr = "2.0" [profile.dev] diff --git a/source/durandal/bin.rs b/source/durandal/bin.rs index e8cc534..49400e0 100644 --- a/source/durandal/bin.rs +++ b/source/durandal/bin.rs @@ -469,13 +469,13 @@ impl fmt::Debug for Ident /// assert_eq!(Ident(*b"POLY").0, *b"POLY"); /// ``` #[derive(Clone, Copy, Default, PartialEq)] -#[derive(serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize, serde::Deserialize))] pub struct Ident(/** The individual bytes of this identifier. */ pub [u8; 4]); /// An object identified by a `u16` which may be `u16::max_value()` to /// represent a nulled value. #[derive(Clone, Copy, Default, PartialEq)] -#[derive(serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize, serde::Deserialize))] pub struct OptU16(Option); // EOF diff --git a/source/durandal/fixed.rs b/source/durandal/fixed.rs index e70d5a5..9daab6e 100644 --- a/source/durandal/fixed.rs +++ b/source/durandal/fixed.rs @@ -71,7 +71,8 @@ macro_rules! define_fixed_types { )* ) => {$( $(#[$outer])* - #[derive(Copy, Clone, Default, PartialEq, PartialOrd, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Copy, Clone, Default, PartialEq, PartialOrd)] pub struct $t($ti); impl $t diff --git a/source/durandal/image.rs b/source/durandal/image.rs index 75c539b..6f25395 100644 --- a/source/durandal/image.rs +++ b/source/durandal/image.rs @@ -226,15 +226,18 @@ impl Color for Color8 } /// An RGB16 color. -#[derive(Copy, Clone, Debug, PartialEq, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Copy, Clone, Debug, PartialEq)] pub struct Color16(u16, u16, u16); /// An RGB8 color. -#[derive(Copy, Clone, Debug, PartialEq, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Copy, Clone, Debug, PartialEq)] pub struct Color8(u8, u8, u8); /// An RGB16 image. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Image16 { w: usize, @@ -245,7 +248,8 @@ pub struct Image16 } /// An RGB8 image. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Image8 { w: usize, diff --git a/source/leela/Cargo.toml b/source/leela/Cargo.toml index ff3fac6..bbf314f 100644 --- a/source/leela/Cargo.toml +++ b/source/leela/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" [dependencies] argparse = "0.2" -maraiah = {path = "../.."} +maraiah = {path = "../..", features = ["serde_obj"]} memmap = "0.7" serde = "1.0" serde_yaml = "0.8" diff --git a/source/marathon/map.rs b/source/marathon/map.rs index 9a03300..3d9df47 100644 --- a/source/marathon/map.rs +++ b/source/marathon/map.rs @@ -508,7 +508,8 @@ impl Default for Minf } /// A point in world-space. -#[derive(Clone, Debug, Default, PartialEq, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Clone, Debug, Default, PartialEq)] pub struct Point { pub x: Unit, @@ -516,7 +517,8 @@ pub struct Point } /// A line segment. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Line { pub flags: LineFlags, @@ -529,7 +531,8 @@ pub struct Line } /// The texture of a side segment. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct SideTex { pub offs: Point, @@ -537,7 +540,8 @@ pub struct SideTex } /// One side of a line segment. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Side { pub stype: SideType, @@ -554,7 +558,8 @@ pub struct Side } /// A polygon segment. -#[derive(Debug, Default, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug, Default)] pub struct Polygon { pub ptype: PolyType, @@ -576,7 +581,8 @@ pub struct Polygon } /// A light function. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct LightFunc { pub ftype: LightFuncType, @@ -587,7 +593,8 @@ pub struct LightFunc } /// A dynamic polygon light. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Light { pub ltype: LightType, @@ -603,7 +610,8 @@ pub struct Light } /// An object in the world. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Object { pub group: u16, @@ -618,7 +626,8 @@ pub struct Object } /// The difficulty definition for various object types. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct ObjectFreq { pub rnd_loc: bool, @@ -630,7 +639,8 @@ pub struct ObjectFreq } /// An ambient sound definition. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct SoundAmbi { pub index: u16, @@ -638,7 +648,8 @@ pub struct SoundAmbi } /// A randomly played sound definition. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct SoundRand { pub no_dir: bool, @@ -654,7 +665,8 @@ pub struct SoundRand } /// A media, as in a part of a polygon which goes up the middle of the wall. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Media { pub mtype: MediaType, @@ -672,7 +684,8 @@ pub struct Media } /// Extra information for polygons with platforms. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Platform { pub ptype: u16, @@ -686,7 +699,8 @@ pub struct Platform } /// Overhead map annotations. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Note { pub pos: Point, @@ -695,7 +709,8 @@ pub struct Note } /// Static map information. -#[derive(Debug, PartialEq, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug, PartialEq)] pub struct Minf { pub texture_id: u16, @@ -708,7 +723,8 @@ pub struct Minf } /// The action type of a `Polygon`. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub enum PolyType { Normal, @@ -739,7 +755,7 @@ pub enum PolyType bitflags! { /// Flags for `Line`. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct LineFlags: u16 { const TRANS_SIDE = 1 << 9; @@ -753,7 +769,7 @@ bitflags! { bitflags! { /// Flags for `Side`. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct SideFlags: u16 { const STATUS = 1; @@ -769,7 +785,7 @@ bitflags! { bitflags! { /// Static environment flags. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct EnvFlags: u16 { const VACUUM = 1; @@ -788,7 +804,7 @@ bitflags! { bitflags! { /// Static entry point flags. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct EntFlags: u32 { const SOLO = 1; @@ -804,7 +820,7 @@ bitflags! { bitflags! { /// Static mission flags. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct MsnFlags: u16 { const EXTERMINATION = 1; @@ -817,7 +833,7 @@ bitflags! { bitflags! { /// Flags for `Polygon`. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct PolyFlags: u16 { const DETACHED = 1 << 14; @@ -826,7 +842,7 @@ bitflags! { bitflags! { /// Flags for `Light`. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct LightFlags: u16 { const INIT_ACTIVE = 1; @@ -837,7 +853,7 @@ bitflags! { bitflags! { /// Flags for `Object`. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct ObjectFlags: u16 { const INVISIBLE = 1; @@ -851,7 +867,7 @@ bitflags! { bitflags! { /// Flags for `Platform`. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct PlatformFlags: u32 { const INIT_ACTIVE = 1; @@ -886,7 +902,8 @@ bitflags! { c_enum! { /// The texture type of a `Side`. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum SideType: u16 { 0 => Full, @@ -899,7 +916,8 @@ c_enum! { c_enum! { /// The type of function for a `LightFunc`. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum LightFuncType: u16 { 0 => Constant, @@ -913,7 +931,8 @@ c_enum! { c_enum! { /// The type of a `Light`. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum LightType: u16 { 0 => Normal, @@ -924,7 +943,8 @@ c_enum! { c_enum! { /// The liquid type of a `Media`. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum MediaType: u16 { 0 => Water, diff --git a/source/marathon/phy.rs b/source/marathon/phy.rs index 00f4a1f..7b74e36 100644 --- a/source/marathon/phy.rs +++ b/source/marathon/phy.rs @@ -283,7 +283,8 @@ fn read_attack(b: &[u8]) -> ResultS } /// Static physics information. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Physics { pub acc_ang: Fixed, @@ -315,7 +316,8 @@ pub struct Physics } /// An effect definition. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Effect { pub collection: u16, @@ -327,7 +329,8 @@ pub struct Effect } /// A weapon definition. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Weapon { pub amp_bob: Fixed, @@ -358,7 +361,8 @@ pub struct Weapon } /// The definition of one of two triggers for a weapon. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Trigger { pub burst: u16, @@ -382,7 +386,8 @@ pub struct Trigger } /// A projectile definition. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Projectile { pub collection: OptU16, @@ -405,7 +410,8 @@ pub struct Projectile } /// A monster definition. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Monster { pub collection: u16, @@ -462,7 +468,8 @@ pub struct Monster } /// A damage definition. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Damage { pub dtype: DamageType, @@ -473,7 +480,8 @@ pub struct Damage } /// The definition of a monster's attack. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Attack { pub ptype: OptU16, @@ -488,7 +496,7 @@ pub struct Attack bitflags! { /// Flags for an effect. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct EffectFlags: u16 { const END_ON_LOOP = 1; @@ -501,7 +509,7 @@ bitflags! { bitflags! { /// Flags for a weapon. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct WeaponFlags: u16 { const AUTOMATIC = 1; @@ -520,7 +528,7 @@ bitflags! { bitflags! { /// Flags for a projectile. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct ProjectileFlags: u32 { const GUIDED = 1; @@ -549,7 +557,7 @@ bitflags! { bitflags! { /// Flags for a monster. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct MonsterFlags: u32 { const IGNORE_LOS = 1; @@ -585,7 +593,7 @@ bitflags! { bitflags! { /// The composite type of a monster. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct MonsterClass: u32 { const PLAYER = 1; @@ -609,7 +617,7 @@ bitflags! { bitflags! { /// The composite type of damage taken by something. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct DamageTypeFlags: u32 { const EXPLOSION = 1; @@ -641,7 +649,8 @@ bitflags! { c_enum! { /// A bullet shell casing emitted by a weapon. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum CasingType: u16 { 0 => Rifle, @@ -655,7 +664,8 @@ c_enum! { c_enum! { /// The type of functionality a weapon provides. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum WeaponType: u16 { 0 => Melee, @@ -668,7 +678,8 @@ c_enum! { c_enum! { /// A named type of damage taken by something. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum DamageType: u16 { 0 => Explosion, diff --git a/source/marathon/shp.rs b/source/marathon/shp.rs index 4df8363..5c6d232 100644 --- a/source/marathon/shp.rs +++ b/source/marathon/shp.rs @@ -317,7 +317,8 @@ impl Color for ColorShp } /// A color in an `ImageShp`'s color table. -#[derive(Copy, Clone, Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Copy, Clone, Debug)] pub enum ColorShp { /// A completely translucent color. @@ -354,7 +355,8 @@ pub struct ImageShp<'a, 'b> } /// A frame, also known as a low level shape. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Frame { /// The flags for this frame. @@ -386,7 +388,8 @@ pub struct Frame } /// A sequence, also known as a high level shape. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Sequence { /// The display name for this sequence. @@ -456,7 +459,7 @@ bitflags! { bitflags! { /// Flags for `Frame`. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct FrameFlags: u16 { /// The player's torso will obscure the player's legs. @@ -470,7 +473,8 @@ bitflags! { c_enum! { /// The type of a collection. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum CollectionType: u16 { 0 => Unused, @@ -483,7 +487,8 @@ c_enum! { c_enum! { /// The type of or number of views for a sequence. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum ViewType: u16 { 1 => Anim, diff --git a/source/marathon/snd.rs b/source/marathon/snd.rs index 280ca35..3d99223 100644 --- a/source/marathon/snd.rs +++ b/source/marathon/snd.rs @@ -150,7 +150,7 @@ pub type SoundTable = BTreeMap; bitflags! { /// Flags for `SoundDef`. - #[derive(serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct SoundFlags: u16 { /// The sound will not restart when trying to play over itself. @@ -172,7 +172,8 @@ bitflags! { c_enum! { /// The type of volume this sound has. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum Volume: u16 { 0 => Quiet, diff --git a/source/marathon/trm.rs b/source/marathon/trm.rs index 0b50921..13cd2eb 100644 --- a/source/marathon/trm.rs +++ b/source/marathon/trm.rs @@ -97,7 +97,8 @@ impl Default for GroupType } /// A terminal definition, with collections of groups and faces. -#[derive(Debug, PartialEq, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug, PartialEq)] pub struct Terminal { pub lines: u16, @@ -106,7 +107,8 @@ pub struct Terminal } /// A text face. -#[derive(Debug, PartialEq, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug, PartialEq)] pub struct Face { pub start: usize, @@ -115,7 +117,8 @@ pub struct Face } /// A terminal command grouping. -#[derive(Debug, PartialEq, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug, PartialEq)] pub struct Group { pub flags: GroupFlags, @@ -136,7 +139,8 @@ pub struct InterGroup } /// The command of a `Group`. -#[derive(Clone, Copy, Debug, PartialEq, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Clone, Copy, Debug, PartialEq)] pub enum GroupType { Logon(u16), @@ -160,7 +164,7 @@ pub enum GroupType bitflags! { /// Flags for `Group`. - #[derive(Default, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] pub struct GroupFlags: u16 { /// Draws the picture on the right. diff --git a/source/marathon/wad.rs b/source/marathon/wad.rs index 9c55d88..c5b319a 100644 --- a/source/marathon/wad.rs +++ b/source/marathon/wad.rs @@ -134,7 +134,8 @@ pub fn read_wad(b: &[u8]) -> ResultS } /// Any kind of chunk in an `Entry`. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub enum Chunk { /// A `PICT` chunk. @@ -185,7 +186,8 @@ pub enum Chunk } /// An entry containing chunks and application-specific data. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Entry { /// All of the chunks in this `Entry`. @@ -196,7 +198,8 @@ pub struct Entry } /// A Map file containing entries. -#[derive(Debug, serde::Serialize)] +#[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] +#[derive(Debug)] pub struct Wad { /// The original name of this file. @@ -211,8 +214,8 @@ pub struct Wad c_enum! { /// The version of a `Wad`. - #[derive(Debug, serde::Serialize)] - pub enum Ver: u16 + #[derive(Debug)] + enum Ver: u16 { 0 => Base, 1 => Dir, diff --git a/source/marathon/xfer.rs b/source/marathon/xfer.rs index d104738..d82d4c3 100644 --- a/source/marathon/xfer.rs +++ b/source/marathon/xfer.rs @@ -9,7 +9,8 @@ impl Default for TransferMode c_enum! { /// A rendering style for many things. - #[derive(Debug, serde::Serialize)] + #[cfg_attr(feature = "serde_obj", derive(serde::Serialize))] + #[derive(Debug)] pub enum TransferMode: u16 { 0 => Normal,