make serde optional (to save compile times)

png-branch
an 2019-03-12 07:34:17 -04:00
parent dcf0f9e22f
commit 24f22a682c
12 changed files with 127 additions and 74 deletions

View File

@ -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]

View File

@ -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<NonZeroU16>);
// EOF

View File

@ -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

View File

@ -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,

View File

@ -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"

View File

@ -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,

View File

@ -283,7 +283,8 @@ fn read_attack(b: &[u8]) -> ResultS<Attack>
}
/// 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,

View File

@ -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,

View File

@ -150,7 +150,7 @@ pub type SoundTable = BTreeMap<u16, SoundDef>;
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,

View File

@ -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.

View File

@ -134,7 +134,8 @@ pub fn read_wad(b: &[u8]) -> ResultS<Wad>
}
/// 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,

View File

@ -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,