pub struct ElimCase<Cases> {
    pub cases: Cases,
}
Expand description

A lazy pattern match reified as a Rust type.

expr is the expression being matched on, generally of some enum type Ty.

case represents the pattern match–it will generally be a structure with one field per constructor in Ty. The field should contain enough information to run the match arm for that constructor, given the information contained in the constructor arguments.

ty represents the return type of the match expression. It does not carry any runtime-relevant information, but is needed in order to simplify our trait definitions.

The intent is that you should not construct this structure directly, nor should you define or construct the Cases structure directly. Instead, to use this you are expected to wrap your enum declaration in a call to [make_case_elim!], as follows:


veloren_common::make_case_elim!(
    my_type_module,
    #[repr(u32)]
    #[derive(Clone,Copy)]
    pub enum MyType {
        Constr1 = 0,
        #[typed(pure)] Constr2(arg : u8) = 1,
        /* ..., */
    }
);

This macro automatically does a few things. First, it creates the enum type MyType in the current scope, as expected. Second, it creates a module named my_type_module in the current scope, into which it dumps a few things. In this case:


#[repr(u32)]
#[derive(Clone, Copy)]
pub enum MyType {
    Constr1 = 0,
    Constr2(u8) = 1,
    /* ..., */
}

mod my_type_module {
    use serde::{Deserialize, Serialize};

    /// The number of variants in this enum.
    pub const NUM_VARIANTS: usize = 2;

    /// An array of all the variant indices (in theory, this can be used by this or other
    /// macros in order to easily build up things like uniform random samplers).
    pub const ALL_INDICES: [u32; NUM_VARIANTS] = [0, 1];

    /// A convenience trait used to store a different type for each constructor in this
    /// pattern.
    pub trait PackedElim {
        type Constr1;
        type Constr2;
    }

    /// The actual *cases.*  If you think of pattern match arms as being closures that accept
    /// the constructor types as arguments, you can think of this structure as somehow
    /// representing just the data *owned* by the closure.  This is also what you will
    /// generally store in your ron file--it has a field for each constructor of your enum,
    /// with the types of all the fields specified by the implementation of [PackedElim] for
    /// the [Elim] argument.  Each field has the same name as the constructor it represents.
    #[derive(Serialize, Deserialize)]
    pub struct Cases<Elim: PackedElim> {
        pub Constr1: Elim::Constr1,
        pub Constr2: Elim::Constr2,
    }

    /// Finally, because it represents by an overwhelming margin the most common usecase, we
    /// predefine a particular pattern matching strategy--"pure"--where every arm holds data of
    /// the exact same type, T.
    impl<T> PackedElim for veloren_common::typed::Pure<T> {
        type Constr1 = T;
        type Constr2 = T;
    }

    /// Because PureCases is so convenient, we have an alias for it.  Thus, in order to
    /// represent a pattern match on an argument that returns a constant of type (u8,u8,u8) for
    /// each arm, you'd use the type `PureCases<(u8, u8, u8)>`.
    pub type PureCases<Elim> = Cases<veloren_common::typed::Pure<Elim>>;
}

Finally, a useful implementation of the Typed trait completes this story, providing a way to evaluate this lazy math statement within Rust. Unfortunately, Typed is quite complicated, and this story is still being fully evaluated, so showing teh type may not be that elucidating. Instead, we’ll just present the method you can use most easily to pattern match using the PureCases pattern we mentioned earlier:

pub fn elim_case_pure<’a, Type>(&’a self, cases: &’a $mod::PureCases) -> &’a Type

If self is expression of your defined enum type, and match data defined by PureCases, this evaluates the pattern match on self and returns the matched case.

To see how this is used in more detail, check out common/src/body/humanoid.rs; it is also used extensively in the world repository.


Limitations:

Unfortunately, due to restrictions on macro_rules, we currently always require the types defined to #[repr(inttype)] as you can see above. There are also some other current limitations that we hopefully will be able to lift at some point; struct variants are not yet supported, and neither attributes on fields.

Fields§

§cases: Cases

Trait Implementations§

source§

impl<'de, Cases> Deserialize<'de> for ElimCase<Cases>
where Cases: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<Cases> Serialize for ElimCase<Cases>
where Cases: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BlockKind,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Air: Typed<Context, Type, S>, &'b Elim::Water: Typed<Context, Type, S>, &'b Elim::Rock: Typed<Context, Type, S>, &'b Elim::WeakRock: Typed<Context, Type, S>, &'b Elim::Lava: Typed<Context, Type, S>, &'b Elim::GlowingRock: Typed<Context, Type, S>, &'b Elim::GlowingWeakRock: Typed<Context, Type, S>, &'b Elim::Grass: Typed<Context, Type, S>, &'b Elim::Snow: Typed<Context, Type, S>, &'b Elim::ArtSnow: Typed<Context, Type, S>, &'b Elim::Earth: Typed<Context, Type, S>, &'b Elim::Sand: Typed<Context, Type, S>, &'b Elim::Wood: Typed<Context, Type, S>, &'b Elim::Leaves: Typed<Context, Type, S>, &'b Elim::GlowingMushroom: Typed<Context, Type, S>, &'b Elim::Ice: Typed<Context, Type, S>, &'b Elim::ArtLeaves: Typed<Context, Type, S>, &'b Elim::Misc: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BlockKind,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Body,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Humanoid: Typed<((&'a Body,), Context), Type, S>, &'b Elim::QuadrupedSmall: Typed<((&'a Body,), Context), Type, S>, &'b Elim::QuadrupedMedium: Typed<((&'a Body,), Context), Type, S>, &'b Elim::BirdMedium: Typed<((&'a Body,), Context), Type, S>, &'b Elim::FishMedium: Typed<((&'a Body,), Context), Type, S>, &'b Elim::Dragon: Typed<((&'a Body,), Context), Type, S>, &'b Elim::BirdLarge: Typed<((&'a Body,), Context), Type, S>, &'b Elim::FishSmall: Typed<((&'a Body,), Context), Type, S>, &'b Elim::BipedLarge: Typed<((&'a Body,), Context), Type, S>, &'b Elim::BipedSmall: Typed<((&'a Body,), Context), Type, S>, &'b Elim::Object: Typed<((&'a Body,), Context), Type, S>, &'b Elim::Golem: Typed<((&'a Body,), Context), Type, S>, &'b Elim::Theropod: Typed<((&'a Body,), Context), Type, S>, &'b Elim::QuadrupedLow: Typed<((&'a Body,), Context), Type, S>, &'b Elim::Ship: Typed<((&'a Body,), Context), Type, S>, &'b Elim::Arthropod: Typed<((&'a Body,), Context), Type, S>, &'b Elim::ItemDrop: Typed<((&'a Body,), Context), Type, S>, &'b Elim::Crustacean: Typed<((&'a Body,), Context), Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Body,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Body,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Tool: Typed<((&'a ToolKind,), Context), Type, S>, &'b Elim::ModularComponent: Typed<Context, Type, S>, &'b Elim::Lantern: Typed<Context, Type, S>, &'b Elim::Glider: Typed<Context, Type, S>, &'b Elim::Armor: Typed<((&'a ItemDropArmorKind,), Context), Type, S>, &'b Elim::Utility: Typed<Context, Type, S>, &'b Elim::Consumable: Typed<Context, Type, S>, &'b Elim::Throwable: Typed<Context, Type, S>, &'b Elim::Ingredient: Typed<Context, Type, S>, &'b Elim::Coins: Typed<Context, Type, S>, &'b Elim::CoinPouch: Typed<Context, Type, S>, &'b Elim::Empty: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Body,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Body,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::DefaultAirship: Typed<Context, Type, S>, &'b Elim::AirBalloon: Typed<Context, Type, S>, &'b Elim::SailBoat: Typed<Context, Type, S>, &'b Elim::Galleon: Typed<Context, Type, S>, &'b Elim::Volume: Typed<Context, Type, S>, &'b Elim::Skiff: Typed<Context, Type, S>, &'b Elim::Submarine: Typed<Context, Type, S>, &'b Elim::Carriage: Typed<Context, Type, S>, &'b Elim::Cart: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Body,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Body,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Arrow: Typed<Context, Type, S>, &'b Elim::Bomb: Typed<Context, Type, S>, &'b Elim::Scarecrow: Typed<Context, Type, S>, &'b Elim::Cauldron: Typed<Context, Type, S>, &'b Elim::ChestVines: Typed<Context, Type, S>, &'b Elim::Chest: Typed<Context, Type, S>, &'b Elim::ChestDark: Typed<Context, Type, S>, &'b Elim::ChestDemon: Typed<Context, Type, S>, &'b Elim::ChestGold: Typed<Context, Type, S>, &'b Elim::ChestLight: Typed<Context, Type, S>, &'b Elim::ChestOpen: Typed<Context, Type, S>, &'b Elim::ChestSkull: Typed<Context, Type, S>, &'b Elim::Pumpkin: Typed<Context, Type, S>, &'b Elim::Pumpkin2: Typed<Context, Type, S>, &'b Elim::Pumpkin3: Typed<Context, Type, S>, &'b Elim::Pumpkin4: Typed<Context, Type, S>, &'b Elim::Pumpkin5: Typed<Context, Type, S>, &'b Elim::Campfire: Typed<Context, Type, S>, &'b Elim::LanternGround: Typed<Context, Type, S>, &'b Elim::LanternGroundOpen: Typed<Context, Type, S>, &'b Elim::LanternStanding2: Typed<Context, Type, S>, &'b Elim::LanternStanding: Typed<Context, Type, S>, &'b Elim::PotionBlue: Typed<Context, Type, S>, &'b Elim::PotionGreen: Typed<Context, Type, S>, &'b Elim::PotionRed: Typed<Context, Type, S>, &'b Elim::Crate: Typed<Context, Type, S>, &'b Elim::Tent: Typed<Context, Type, S>, &'b Elim::WindowSpooky: Typed<Context, Type, S>, &'b Elim::DoorSpooky: Typed<Context, Type, S>, &'b Elim::Anvil: Typed<Context, Type, S>, &'b Elim::Gravestone: Typed<Context, Type, S>, &'b Elim::Gravestone2: Typed<Context, Type, S>, &'b Elim::Bench: Typed<Context, Type, S>, &'b Elim::Chair: Typed<Context, Type, S>, &'b Elim::Chair2: Typed<Context, Type, S>, &'b Elim::Chair3: Typed<Context, Type, S>, &'b Elim::Table: Typed<Context, Type, S>, &'b Elim::Table2: Typed<Context, Type, S>, &'b Elim::Table3: Typed<Context, Type, S>, &'b Elim::Drawer: Typed<Context, Type, S>, &'b Elim::BedBlue: Typed<Context, Type, S>, &'b Elim::Carpet: Typed<Context, Type, S>, &'b Elim::Bedroll: Typed<Context, Type, S>, &'b Elim::CarpetHumanRound: Typed<Context, Type, S>, &'b Elim::CarpetHumanSquare: Typed<Context, Type, S>, &'b Elim::CarpetHumanSquare2: Typed<Context, Type, S>, &'b Elim::CarpetHumanSquircle: Typed<Context, Type, S>, &'b Elim::Pouch: Typed<Context, Type, S>, &'b Elim::CraftingBench: Typed<Context, Type, S>, &'b Elim::BoltFire: Typed<Context, Type, S>, &'b Elim::ArrowSnake: Typed<Context, Type, S>, &'b Elim::CampfireLit: Typed<Context, Type, S>, &'b Elim::BoltFireBig: Typed<Context, Type, S>, &'b Elim::TrainingDummy: Typed<Context, Type, S>, &'b Elim::FireworkBlue: Typed<Context, Type, S>, &'b Elim::FireworkGreen: Typed<Context, Type, S>, &'b Elim::FireworkPurple: Typed<Context, Type, S>, &'b Elim::FireworkRed: Typed<Context, Type, S>, &'b Elim::FireworkWhite: Typed<Context, Type, S>, &'b Elim::FireworkYellow: Typed<Context, Type, S>, &'b Elim::MultiArrow: Typed<Context, Type, S>, &'b Elim::BoltNature: Typed<Context, Type, S>, &'b Elim::ToughMeat: Typed<Context, Type, S>, &'b Elim::BeastMeat: Typed<Context, Type, S>, &'b Elim::Crossbow: Typed<Context, Type, S>, &'b Elim::ArrowTurret: Typed<Context, Type, S>, &'b Elim::Coins: Typed<Context, Type, S>, &'b Elim::GoldOre: Typed<Context, Type, S>, &'b Elim::SilverOre: Typed<Context, Type, S>, &'b Elim::ClayRocket: Typed<Context, Type, S>, &'b Elim::HaniwaSentry: Typed<Context, Type, S>, &'b Elim::SeaLantern: Typed<Context, Type, S>, &'b Elim::Snowball: Typed<Context, Type, S>, &'b Elim::BirdMeat: Typed<Context, Type, S>, &'b Elim::FishMeat: Typed<Context, Type, S>, &'b Elim::SmallMeat: Typed<Context, Type, S>, &'b Elim::Tornado: Typed<Context, Type, S>, &'b Elim::Apple: Typed<Context, Type, S>, &'b Elim::Hive: Typed<Context, Type, S>, &'b Elim::Coconut: Typed<Context, Type, S>, &'b Elim::SpitPoison: Typed<Context, Type, S>, &'b Elim::BoltIcicle: Typed<Context, Type, S>, &'b Elim::Dart: Typed<Context, Type, S>, &'b Elim::GnarlingTotemRed: Typed<Context, Type, S>, &'b Elim::GnarlingTotemGreen: Typed<Context, Type, S>, &'b Elim::GnarlingTotemWhite: Typed<Context, Type, S>, &'b Elim::DagonBomb: Typed<Context, Type, S>, &'b Elim::BarrelOrgan: Typed<Context, Type, S>, &'b Elim::IceBomb: Typed<Context, Type, S>, &'b Elim::SpectralSwordSmall: Typed<Context, Type, S>, &'b Elim::SpectralSwordLarge: Typed<Context, Type, S>, &'b Elim::LaserBeam: Typed<Context, Type, S>, &'b Elim::AdletSpear: Typed<Context, Type, S>, &'b Elim::AdletTrap: Typed<Context, Type, S>, &'b Elim::Flamethrower: Typed<Context, Type, S>, &'b Elim::Mine: Typed<Context, Type, S>, &'b Elim::LightningBolt: Typed<Context, Type, S>, &'b Elim::SpearIcicle: Typed<Context, Type, S>, &'b Elim::Portal: Typed<Context, Type, S>, &'b Elim::PortalActive: Typed<Context, Type, S>, &'b Elim::FieryTornado: Typed<Context, Type, S>, &'b Elim::FireRainDrop: Typed<Context, Type, S>, &'b Elim::ArrowClay: Typed<Context, Type, S>, &'b Elim::GrenadeClay: Typed<Context, Type, S>, &'b Elim::Pebble: Typed<Context, Type, S>, &'b Elim::LaserBeamSmall: Typed<Context, Type, S>, &'b Elim::TerracottaStatue: Typed<Context, Type, S>, &'b Elim::TerracottaDemolisherBomb: Typed<Context, Type, S>, &'b Elim::BoltBesieger: Typed<Context, Type, S>, &'b Elim::SurpriseEgg: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Body,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a BodyType,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Female: Typed<Context, Type, S>, &'b Elim::Male: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a BodyType,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Category,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Void: Typed<Context, Type, S>, &'b Elim::Misc: Typed<Context, Type, S>, &'b Elim::Furniture: Typed<Context, Type, S>, &'b Elim::Plant: Typed<Context, Type, S>, &'b Elim::Resources: Typed<Context, Type, S>, &'b Elim::Structural: Typed<Context, Type, S>, &'b Elim::Decor: Typed<Context, Type, S>, &'b Elim::Lamp: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Category,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a EyeColor,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::AmberOrange: Typed<Context, Type, S>, &'b Elim::AmberYellow: Typed<Context, Type, S>, &'b Elim::BrightBrown: Typed<Context, Type, S>, &'b Elim::CornflowerBlue: Typed<Context, Type, S>, &'b Elim::CuriousGreen: Typed<Context, Type, S>, &'b Elim::EmeraldGreen: Typed<Context, Type, S>, &'b Elim::ExoticPurple: Typed<Context, Type, S>, &'b Elim::FrozenBlue: Typed<Context, Type, S>, &'b Elim::GhastlyYellow: Typed<Context, Type, S>, &'b Elim::LoyalBrown: Typed<Context, Type, S>, &'b Elim::MagicPurple: Typed<Context, Type, S>, &'b Elim::NobleBlue: Typed<Context, Type, S>, &'b Elim::PineGreen: Typed<Context, Type, S>, &'b Elim::PumpkinOrange: Typed<Context, Type, S>, &'b Elim::RubyRed: Typed<Context, Type, S>, &'b Elim::RegalPurple: Typed<Context, Type, S>, &'b Elim::RustBrown: Typed<Context, Type, S>, &'b Elim::SapphireBlue: Typed<Context, Type, S>, &'b Elim::SulfurYellow: Typed<Context, Type, S>, &'b Elim::ToxicGreen: Typed<Context, Type, S>, &'b Elim::ViciousRed: Typed<Context, Type, S>, &'b Elim::VigorousBlack: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a EyeColor,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a ItemDropArmorKind,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Shoulder: Typed<Context, Type, S>, &'b Elim::Chest: Typed<Context, Type, S>, &'b Elim::Belt: Typed<Context, Type, S>, &'b Elim::Hand: Typed<Context, Type, S>, &'b Elim::Pants: Typed<Context, Type, S>, &'b Elim::Foot: Typed<Context, Type, S>, &'b Elim::Back: Typed<Context, Type, S>, &'b Elim::Ring: Typed<Context, Type, S>, &'b Elim::Neck: Typed<Context, Type, S>, &'b Elim::Head: Typed<Context, Type, S>, &'b Elim::Tabard: Typed<Context, Type, S>, &'b Elim::Bag: Typed<Context, Type, S>,

source§

fn reduce( self, ((head), context): ((&'a ItemDropArmorKind,), Context) ) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Skin,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::HumanOne: Typed<Context, Type, S>, &'b Elim::HumanTwo: Typed<Context, Type, S>, &'b Elim::HumanThree: Typed<Context, Type, S>, &'b Elim::HumanFour: Typed<Context, Type, S>, &'b Elim::HumanFive: Typed<Context, Type, S>, &'b Elim::HumanSix: Typed<Context, Type, S>, &'b Elim::HumanSeven: Typed<Context, Type, S>, &'b Elim::HumanEight: Typed<Context, Type, S>, &'b Elim::HumanNine: Typed<Context, Type, S>, &'b Elim::HumanTen: Typed<Context, Type, S>, &'b Elim::HumanEleven: Typed<Context, Type, S>, &'b Elim::HumanTwelve: Typed<Context, Type, S>, &'b Elim::HumanThirteen: Typed<Context, Type, S>, &'b Elim::HumanFourteen: Typed<Context, Type, S>, &'b Elim::HumanFifteen: Typed<Context, Type, S>, &'b Elim::HumanSixteen: Typed<Context, Type, S>, &'b Elim::HumanSeventeen: Typed<Context, Type, S>, &'b Elim::HumanEighteen: Typed<Context, Type, S>, &'b Elim::DwarfOne: Typed<Context, Type, S>, &'b Elim::DwarfTwo: Typed<Context, Type, S>, &'b Elim::DwarfThree: Typed<Context, Type, S>, &'b Elim::DwarfFour: Typed<Context, Type, S>, &'b Elim::DwarfFive: Typed<Context, Type, S>, &'b Elim::DwarfSix: Typed<Context, Type, S>, &'b Elim::DwarfSeven: Typed<Context, Type, S>, &'b Elim::DwarfEight: Typed<Context, Type, S>, &'b Elim::DwarfNine: Typed<Context, Type, S>, &'b Elim::DwarfTen: Typed<Context, Type, S>, &'b Elim::DwarfEleven: Typed<Context, Type, S>, &'b Elim::DwarfTwelve: Typed<Context, Type, S>, &'b Elim::DwarfThirteen: Typed<Context, Type, S>, &'b Elim::DwarfFourteen: Typed<Context, Type, S>, &'b Elim::ElfOne: Typed<Context, Type, S>, &'b Elim::ElfTwo: Typed<Context, Type, S>, &'b Elim::ElfThree: Typed<Context, Type, S>, &'b Elim::ElfFour: Typed<Context, Type, S>, &'b Elim::ElfFive: Typed<Context, Type, S>, &'b Elim::ElfSix: Typed<Context, Type, S>, &'b Elim::ElfSeven: Typed<Context, Type, S>, &'b Elim::ElfEight: Typed<Context, Type, S>, &'b Elim::ElfNine: Typed<Context, Type, S>, &'b Elim::ElfTen: Typed<Context, Type, S>, &'b Elim::ElfEleven: Typed<Context, Type, S>, &'b Elim::ElfTwelve: Typed<Context, Type, S>, &'b Elim::ElfThirteen: Typed<Context, Type, S>, &'b Elim::ElfFourteen: Typed<Context, Type, S>, &'b Elim::ElfFifteen: Typed<Context, Type, S>, &'b Elim::ElfSixteen: Typed<Context, Type, S>, &'b Elim::ElfSeventeen: Typed<Context, Type, S>, &'b Elim::ElfEighteen: Typed<Context, Type, S>, &'b Elim::OrcOne: Typed<Context, Type, S>, &'b Elim::OrcTwo: Typed<Context, Type, S>, &'b Elim::OrcThree: Typed<Context, Type, S>, &'b Elim::OrcFour: Typed<Context, Type, S>, &'b Elim::OrcFive: Typed<Context, Type, S>, &'b Elim::OrcSix: Typed<Context, Type, S>, &'b Elim::OrcSeven: Typed<Context, Type, S>, &'b Elim::OrcEight: Typed<Context, Type, S>, &'b Elim::DanariOne: Typed<Context, Type, S>, &'b Elim::DanariTwo: Typed<Context, Type, S>, &'b Elim::DanariThree: Typed<Context, Type, S>, &'b Elim::DanariFour: Typed<Context, Type, S>, &'b Elim::DanariFive: Typed<Context, Type, S>, &'b Elim::DanariSix: Typed<Context, Type, S>, &'b Elim::DanariSeven: Typed<Context, Type, S>, &'b Elim::DraugrOne: Typed<Context, Type, S>, &'b Elim::DraugrTwo: Typed<Context, Type, S>, &'b Elim::DraugrThree: Typed<Context, Type, S>, &'b Elim::DraugrFour: Typed<Context, Type, S>, &'b Elim::DraugrFive: Typed<Context, Type, S>, &'b Elim::DraugrSix: Typed<Context, Type, S>, &'b Elim::DraugrSeven: Typed<Context, Type, S>, &'b Elim::DraugrEight: Typed<Context, Type, S>, &'b Elim::DraugrNine: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Skin,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::StoneGolem: Typed<Context, Type, S>, &'b Elim::Treant: Typed<Context, Type, S>, &'b Elim::ClayGolem: Typed<Context, Type, S>, &'b Elim::WoodGolem: Typed<Context, Type, S>, &'b Elim::CoralGolem: Typed<Context, Type, S>, &'b Elim::Gravewarden: Typed<Context, Type, S>, &'b Elim::AncientEffigy: Typed<Context, Type, S>, &'b Elim::Mogwai: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Crocodile: Typed<Context, Type, S>, &'b Elim::Alligator: Typed<Context, Type, S>, &'b Elim::Salamander: Typed<Context, Type, S>, &'b Elim::Monitor: Typed<Context, Type, S>, &'b Elim::Asp: Typed<Context, Type, S>, &'b Elim::Tortoise: Typed<Context, Type, S>, &'b Elim::Pangolin: Typed<Context, Type, S>, &'b Elim::Maneater: Typed<Context, Type, S>, &'b Elim::Sandshark: Typed<Context, Type, S>, &'b Elim::Hakulaq: Typed<Context, Type, S>, &'b Elim::Lavadrake: Typed<Context, Type, S>, &'b Elim::Basilisk: Typed<Context, Type, S>, &'b Elim::Deadwood: Typed<Context, Type, S>, &'b Elim::Icedrake: Typed<Context, Type, S>, &'b Elim::SeaCrocodile: Typed<Context, Type, S>, &'b Elim::Dagon: Typed<Context, Type, S>, &'b Elim::Rocksnapper: Typed<Context, Type, S>, &'b Elim::Rootsnapper: Typed<Context, Type, S>, &'b Elim::Reefsnapper: Typed<Context, Type, S>, &'b Elim::Elbst: Typed<Context, Type, S>, &'b Elim::Mossdrake: Typed<Context, Type, S>, &'b Elim::Driggle: Typed<Context, Type, S>, &'b Elim::HermitAlligator: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Gnome: Typed<Context, Type, S>, &'b Elim::Sahagin: Typed<Context, Type, S>, &'b Elim::Adlet: Typed<Context, Type, S>, &'b Elim::Gnarling: Typed<Context, Type, S>, &'b Elim::Mandragora: Typed<Context, Type, S>, &'b Elim::Kappa: Typed<Context, Type, S>, &'b Elim::Cactid: Typed<Context, Type, S>, &'b Elim::Gnoll: Typed<Context, Type, S>, &'b Elim::Haniwa: Typed<Context, Type, S>, &'b Elim::Myrmidon: Typed<Context, Type, S>, &'b Elim::Husk: Typed<Context, Type, S>, &'b Elim::Boreal: Typed<Context, Type, S>, &'b Elim::Bushly: Typed<Context, Type, S>, &'b Elim::Irrwurz: Typed<Context, Type, S>, &'b Elim::Clockwork: Typed<Context, Type, S>, &'b Elim::Flamekeeper: Typed<Context, Type, S>, &'b Elim::ShamanicSpirit: Typed<Context, Type, S>, &'b Elim::Jiangshi: Typed<Context, Type, S>, &'b Elim::TreasureEgg: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Phoenix: Typed<Context, Type, S>, &'b Elim::Cockatrice: Typed<Context, Type, S>, &'b Elim::Roc: Typed<Context, Type, S>, &'b Elim::FlameWyvern: Typed<Context, Type, S>, &'b Elim::CloudWyvern: Typed<Context, Type, S>, &'b Elim::FrostWyvern: Typed<Context, Type, S>, &'b Elim::SeaWyvern: Typed<Context, Type, S>, &'b Elim::WealdWyvern: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Marlin: Typed<Context, Type, S>, &'b Elim::Icepike: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::SnowyOwl: Typed<Context, Type, S>, &'b Elim::HornedOwl: Typed<Context, Type, S>, &'b Elim::Duck: Typed<Context, Type, S>, &'b Elim::Cockatiel: Typed<Context, Type, S>, &'b Elim::Chicken: Typed<Context, Type, S>, &'b Elim::Bat: Typed<Context, Type, S>, &'b Elim::Penguin: Typed<Context, Type, S>, &'b Elim::Goose: Typed<Context, Type, S>, &'b Elim::Peacock: Typed<Context, Type, S>, &'b Elim::Eagle: Typed<Context, Type, S>, &'b Elim::Parrot: Typed<Context, Type, S>, &'b Elim::Crow: Typed<Context, Type, S>, &'b Elim::Dodo: Typed<Context, Type, S>, &'b Elim::Parakeet: Typed<Context, Type, S>, &'b Elim::Puffin: Typed<Context, Type, S>, &'b Elim::Toucan: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Danari: Typed<Context, Type, S>, &'b Elim::Dwarf: Typed<Context, Type, S>, &'b Elim::Elf: Typed<Context, Type, S>, &'b Elim::Human: Typed<Context, Type, S>, &'b Elim::Orc: Typed<Context, Type, S>, &'b Elim::Draugr: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Crab: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Ogre: Typed<Context, Type, S>, &'b Elim::Cyclops: Typed<Context, Type, S>, &'b Elim::Wendigo: Typed<Context, Type, S>, &'b Elim::Cavetroll: Typed<Context, Type, S>, &'b Elim::Mountaintroll: Typed<Context, Type, S>, &'b Elim::Swamptroll: Typed<Context, Type, S>, &'b Elim::Dullahan: Typed<Context, Type, S>, &'b Elim::Werewolf: Typed<Context, Type, S>, &'b Elim::Occultsaurok: Typed<Context, Type, S>, &'b Elim::Mightysaurok: Typed<Context, Type, S>, &'b Elim::Slysaurok: Typed<Context, Type, S>, &'b Elim::Mindflayer: Typed<Context, Type, S>, &'b Elim::Minotaur: Typed<Context, Type, S>, &'b Elim::Tidalwarrior: Typed<Context, Type, S>, &'b Elim::Yeti: Typed<Context, Type, S>, &'b Elim::Harvester: Typed<Context, Type, S>, &'b Elim::Blueoni: Typed<Context, Type, S>, &'b Elim::Redoni: Typed<Context, Type, S>, &'b Elim::Cultistwarlord: Typed<Context, Type, S>, &'b Elim::Cultistwarlock: Typed<Context, Type, S>, &'b Elim::Huskbrute: Typed<Context, Type, S>, &'b Elim::Tursus: Typed<Context, Type, S>, &'b Elim::Gigasfrost: Typed<Context, Type, S>, &'b Elim::AdletElder: Typed<Context, Type, S>, &'b Elim::SeaBishop: Typed<Context, Type, S>, &'b Elim::HaniwaGeneral: Typed<Context, Type, S>, &'b Elim::TerracottaBesieger: Typed<Context, Type, S>, &'b Elim::TerracottaDemolisher: Typed<Context, Type, S>, &'b Elim::TerracottaPunisher: Typed<Context, Type, S>, &'b Elim::TerracottaPursuer: Typed<Context, Type, S>, &'b Elim::Cursekeeper: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Clownfish: Typed<Context, Type, S>, &'b Elim::Piranha: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a Species,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Reddragon: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a Species,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a SpriteKind,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::Empty: Typed<Context, Type, S>, &'b Elim::Ember: Typed<Context, Type, S>, &'b Elim::SmokeDummy: Typed<Context, Type, S>, &'b Elim::Bomb: Typed<Context, Type, S>, &'b Elim::FireBlock: Typed<Context, Type, S>, &'b Elim::Mine: Typed<Context, Type, S>, &'b Elim::HotSurface: Typed<Context, Type, S>, &'b Elim::CoatRack: Typed<Context, Type, S>, &'b Elim::Bed: Typed<Context, Type, S>, &'b Elim::Bench: Typed<Context, Type, S>, &'b Elim::ChairSingle: Typed<Context, Type, S>, &'b Elim::ChairDouble: Typed<Context, Type, S>, &'b Elim::DrawerLarge: Typed<Context, Type, S>, &'b Elim::DrawerMedium: Typed<Context, Type, S>, &'b Elim::DrawerSmall: Typed<Context, Type, S>, &'b Elim::TableSide: Typed<Context, Type, S>, &'b Elim::TableDining: Typed<Context, Type, S>, &'b Elim::TableDouble: Typed<Context, Type, S>, &'b Elim::WardrobeSingle: Typed<Context, Type, S>, &'b Elim::WardrobeDouble: Typed<Context, Type, S>, &'b Elim::BookshelfArabic: Typed<Context, Type, S>, &'b Elim::WallTableArabic: Typed<Context, Type, S>, &'b Elim::TableArabicLarge: Typed<Context, Type, S>, &'b Elim::TableArabicSmall: Typed<Context, Type, S>, &'b Elim::CupboardArabic: Typed<Context, Type, S>, &'b Elim::OvenArabic: Typed<Context, Type, S>, &'b Elim::CushionArabic: Typed<Context, Type, S>, &'b Elim::CanapeArabic: Typed<Context, Type, S>, &'b Elim::Shelf: Typed<Context, Type, S>, &'b Elim::Planter: Typed<Context, Type, S>, &'b Elim::Pot: Typed<Context, Type, S>, &'b Elim::CraftingBench: Typed<Context, Type, S>, &'b Elim::Forge: Typed<Context, Type, S>, &'b Elim::Cauldron: Typed<Context, Type, S>, &'b Elim::Anvil: Typed<Context, Type, S>, &'b Elim::CookingPot: Typed<Context, Type, S>, &'b Elim::SpinningWheel: Typed<Context, Type, S>, &'b Elim::TanningRack: Typed<Context, Type, S>, &'b Elim::Loom: Typed<Context, Type, S>, &'b Elim::DismantlingBench: Typed<Context, Type, S>, &'b Elim::RepairBench: Typed<Context, Type, S>, &'b Elim::Chest: Typed<Context, Type, S>, &'b Elim::DungeonChest0: Typed<Context, Type, S>, &'b Elim::DungeonChest1: Typed<Context, Type, S>, &'b Elim::DungeonChest2: Typed<Context, Type, S>, &'b Elim::DungeonChest3: Typed<Context, Type, S>, &'b Elim::DungeonChest4: Typed<Context, Type, S>, &'b Elim::DungeonChest5: Typed<Context, Type, S>, &'b Elim::CoralChest: Typed<Context, Type, S>, &'b Elim::HaniwaUrn: Typed<Context, Type, S>, &'b Elim::TerracottaChest: Typed<Context, Type, S>, &'b Elim::CommonLockedChest: Typed<Context, Type, S>, &'b Elim::ChestBuried: Typed<Context, Type, S>, &'b Elim::Crate: Typed<Context, Type, S>, &'b Elim::Barrel: Typed<Context, Type, S>, &'b Elim::CrateBlock: Typed<Context, Type, S>, &'b Elim::HangingBasket: Typed<Context, Type, S>, &'b Elim::HangingSign: Typed<Context, Type, S>, &'b Elim::ChristmasOrnament: Typed<Context, Type, S>, &'b Elim::ChristmasWreath: Typed<Context, Type, S>, &'b Elim::WallLampWizard: Typed<Context, Type, S>, &'b Elim::WallLamp: Typed<Context, Type, S>, &'b Elim::WallLampSmall: Typed<Context, Type, S>, &'b Elim::WallSconce: Typed<Context, Type, S>, &'b Elim::DungeonWallDecor: Typed<Context, Type, S>, &'b Elim::Tent: Typed<Context, Type, S>, &'b Elim::Bedroll: Typed<Context, Type, S>, &'b Elim::BedrollSnow: Typed<Context, Type, S>, &'b Elim::BedrollPirate: Typed<Context, Type, S>, &'b Elim::Sign: Typed<Context, Type, S>, &'b Elim::Helm: Typed<Context, Type, S>, &'b Elim::Scarecrow: Typed<Context, Type, S>, &'b Elim::FountainArabic: Typed<Context, Type, S>, &'b Elim::Hearth: Typed<Context, Type, S>, &'b Elim::BarrelCactus: Typed<Context, Type, S>, &'b Elim::RoundCactus: Typed<Context, Type, S>, &'b Elim::ShortCactus: Typed<Context, Type, S>, &'b Elim::MedFlatCactus: Typed<Context, Type, S>, &'b Elim::ShortFlatCactus: Typed<Context, Type, S>, &'b Elim::LargeCactus: Typed<Context, Type, S>, &'b Elim::TallCactus: Typed<Context, Type, S>, &'b Elim::BlueFlower: Typed<Context, Type, S>, &'b Elim::PinkFlower: Typed<Context, Type, S>, &'b Elim::PurpleFlower: Typed<Context, Type, S>, &'b Elim::RedFlower: Typed<Context, Type, S>, &'b Elim::WhiteFlower: Typed<Context, Type, S>, &'b Elim::YellowFlower: Typed<Context, Type, S>, &'b Elim::Sunflower: Typed<Context, Type, S>, &'b Elim::Moonbell: Typed<Context, Type, S>, &'b Elim::Pyrebloom: Typed<Context, Type, S>, &'b Elim::LushFlower: Typed<Context, Type, S>, &'b Elim::LanternFlower: Typed<Context, Type, S>, &'b Elim::LongGrass: Typed<Context, Type, S>, &'b Elim::MediumGrass: Typed<Context, Type, S>, &'b Elim::ShortGrass: Typed<Context, Type, S>, &'b Elim::Fern: Typed<Context, Type, S>, &'b Elim::LargeGrass: Typed<Context, Type, S>, &'b Elim::GrassSnow: Typed<Context, Type, S>, &'b Elim::Reed: Typed<Context, Type, S>, &'b Elim::GrassBlue: Typed<Context, Type, S>, &'b Elim::SavannaGrass: Typed<Context, Type, S>, &'b Elim::TallSavannaGrass: Typed<Context, Type, S>, &'b Elim::RedSavannaGrass: Typed<Context, Type, S>, &'b Elim::SavannaBush: Typed<Context, Type, S>, &'b Elim::Welwitch: Typed<Context, Type, S>, &'b Elim::LeafyPlant: Typed<Context, Type, S>, &'b Elim::DeadBush: Typed<Context, Type, S>, &'b Elim::JungleFern: Typed<Context, Type, S>, &'b Elim::GrassBlueShort: Typed<Context, Type, S>, &'b Elim::GrassBlueMedium: Typed<Context, Type, S>, &'b Elim::GrassBlueLong: Typed<Context, Type, S>, &'b Elim::CavernLillypadBlue: Typed<Context, Type, S>, &'b Elim::EnsnaringVines: Typed<Context, Type, S>, &'b Elim::LillyPads: Typed<Context, Type, S>, &'b Elim::JungleLeafyPlant: Typed<Context, Type, S>, &'b Elim::JungleRedGrass: Typed<Context, Type, S>, &'b Elim::LanternPlant: Typed<Context, Type, S>, &'b Elim::SporeReed: Typed<Context, Type, S>, &'b Elim::DeadPlant: Typed<Context, Type, S>, &'b Elim::Corn: Typed<Context, Type, S>, &'b Elim::WheatYellow: Typed<Context, Type, S>, &'b Elim::WheatGreen: Typed<Context, Type, S>, &'b Elim::LingonBerry: Typed<Context, Type, S>, &'b Elim::Blueberry: Typed<Context, Type, S>, &'b Elim::Cabbage: Typed<Context, Type, S>, &'b Elim::Pumpkin: Typed<Context, Type, S>, &'b Elim::Carrot: Typed<Context, Type, S>, &'b Elim::Tomato: Typed<Context, Type, S>, &'b Elim::Radish: Typed<Context, Type, S>, &'b Elim::Turnip: Typed<Context, Type, S>, &'b Elim::Flax: Typed<Context, Type, S>, &'b Elim::Mushroom: Typed<Context, Type, S>, &'b Elim::CaveMushroom: Typed<Context, Type, S>, &'b Elim::Cotton: Typed<Context, Type, S>, &'b Elim::WildFlax: Typed<Context, Type, S>, &'b Elim::SewerMushroom: Typed<Context, Type, S>, &'b Elim::LushMushroom: Typed<Context, Type, S>, &'b Elim::RockyMushroom: Typed<Context, Type, S>, &'b Elim::GlowMushroom: Typed<Context, Type, S>, &'b Elim::StonyCoral: Typed<Context, Type, S>, &'b Elim::SoftCoral: Typed<Context, Type, S>, &'b Elim::SeaweedTemperate: Typed<Context, Type, S>, &'b Elim::SeaweedTropical: Typed<Context, Type, S>, &'b Elim::GiantKelp: Typed<Context, Type, S>, &'b Elim::BullKelp: Typed<Context, Type, S>, &'b Elim::WavyAlgae: Typed<Context, Type, S>, &'b Elim::SeaGrapes: Typed<Context, Type, S>, &'b Elim::MermaidsFan: Typed<Context, Type, S>, &'b Elim::SeaAnemone: Typed<Context, Type, S>, &'b Elim::Seagrass: Typed<Context, Type, S>, &'b Elim::RedAlgae: Typed<Context, Type, S>, &'b Elim::Liana: Typed<Context, Type, S>, &'b Elim::MycelBlue: Typed<Context, Type, S>, &'b Elim::CeilingMushroom: Typed<Context, Type, S>, &'b Elim::Mold: Typed<Context, Type, S>, &'b Elim::Root: Typed<Context, Type, S>, &'b Elim::CeilingLanternPlant: Typed<Context, Type, S>, &'b Elim::CeilingLanternFlower: Typed<Context, Type, S>, &'b Elim::CeilingJungleLeafyPlant: Typed<Context, Type, S>, &'b Elim::Amethyst: Typed<Context, Type, S>, &'b Elim::AmethystSmall: Typed<Context, Type, S>, &'b Elim::Ruby: Typed<Context, Type, S>, &'b Elim::RubySmall: Typed<Context, Type, S>, &'b Elim::Sapphire: Typed<Context, Type, S>, &'b Elim::SapphireSmall: Typed<Context, Type, S>, &'b Elim::Emerald: Typed<Context, Type, S>, &'b Elim::EmeraldSmall: Typed<Context, Type, S>, &'b Elim::Topaz: Typed<Context, Type, S>, &'b Elim::TopazSmall: Typed<Context, Type, S>, &'b Elim::Diamond: Typed<Context, Type, S>, &'b Elim::DiamondSmall: Typed<Context, Type, S>, &'b Elim::Bloodstone: Typed<Context, Type, S>, &'b Elim::Coal: Typed<Context, Type, S>, &'b Elim::Cobalt: Typed<Context, Type, S>, &'b Elim::Copper: Typed<Context, Type, S>, &'b Elim::Iron: Typed<Context, Type, S>, &'b Elim::Tin: Typed<Context, Type, S>, &'b Elim::Silver: Typed<Context, Type, S>, &'b Elim::Gold: Typed<Context, Type, S>, &'b Elim::Velorite: Typed<Context, Type, S>, &'b Elim::VeloriteFrag: Typed<Context, Type, S>, &'b Elim::Twigs: Typed<Context, Type, S>, &'b Elim::Wood: Typed<Context, Type, S>, &'b Elim::Bamboo: Typed<Context, Type, S>, &'b Elim::Hardwood: Typed<Context, Type, S>, &'b Elim::Ironwood: Typed<Context, Type, S>, &'b Elim::Frostwood: Typed<Context, Type, S>, &'b Elim::Eldwood: Typed<Context, Type, S>, &'b Elim::Apple: Typed<Context, Type, S>, &'b Elim::Coconut: Typed<Context, Type, S>, &'b Elim::Stones: Typed<Context, Type, S>, &'b Elim::Seashells: Typed<Context, Type, S>, &'b Elim::Beehive: Typed<Context, Type, S>, &'b Elim::Bowl: Typed<Context, Type, S>, &'b Elim::PotionMinor: Typed<Context, Type, S>, &'b Elim::PotionDummy: Typed<Context, Type, S>, &'b Elim::VialEmpty: Typed<Context, Type, S>, &'b Elim::Door: Typed<Context, Type, S>, &'b Elim::DoorDark: Typed<Context, Type, S>, &'b Elim::DoorWide: Typed<Context, Type, S>, &'b Elim::BoneKeyhole: Typed<Context, Type, S>, &'b Elim::BoneKeyDoor: Typed<Context, Type, S>, &'b Elim::Keyhole: Typed<Context, Type, S>, &'b Elim::KeyDoor: Typed<Context, Type, S>, &'b Elim::GlassKeyhole: Typed<Context, Type, S>, &'b Elim::KeyholeBars: Typed<Context, Type, S>, &'b Elim::HaniwaKeyDoor: Typed<Context, Type, S>, &'b Elim::HaniwaKeyhole: Typed<Context, Type, S>, &'b Elim::TerracottaKeyDoor: Typed<Context, Type, S>, &'b Elim::TerracottaKeyhole: Typed<Context, Type, S>, &'b Elim::Window1: Typed<Context, Type, S>, &'b Elim::Window2: Typed<Context, Type, S>, &'b Elim::Window3: Typed<Context, Type, S>, &'b Elim::Window4: Typed<Context, Type, S>, &'b Elim::WitchWindow: Typed<Context, Type, S>, &'b Elim::WindowArabic: Typed<Context, Type, S>, &'b Elim::GlassBarrier: Typed<Context, Type, S>, &'b Elim::SeaDecorBlock: Typed<Context, Type, S>, &'b Elim::CliffDecorBlock: Typed<Context, Type, S>, &'b Elim::MagicalBarrier: Typed<Context, Type, S>, &'b Elim::OneWayWall: Typed<Context, Type, S>, &'b Elim::SeaDecorWindowHor: Typed<Context, Type, S>, &'b Elim::SeaDecorWindowVer: Typed<Context, Type, S>, &'b Elim::DropGate: Typed<Context, Type, S>, &'b Elim::DropGateBottom: Typed<Context, Type, S>, &'b Elim::WoodBarricades: Typed<Context, Type, S>, &'b Elim::Rope: Typed<Context, Type, S>, &'b Elim::SeaDecorChain: Typed<Context, Type, S>, &'b Elim::IronSpike: Typed<Context, Type, S>, &'b Elim::DoorBars: Typed<Context, Type, S>, &'b Elim::HaniwaTrap: Typed<Context, Type, S>, &'b Elim::HaniwaTrapTriggered: Typed<Context, Type, S>, &'b Elim::TerracottaStatue: Typed<Context, Type, S>, &'b Elim::TerracottaBlock: Typed<Context, Type, S>, &'b Elim::Bones: Typed<Context, Type, S>, &'b Elim::IceCrystal: Typed<Context, Type, S>, &'b Elim::GlowIceCrystal: Typed<Context, Type, S>, &'b Elim::CrystalHigh: Typed<Context, Type, S>, &'b Elim::CrystalLow: Typed<Context, Type, S>, &'b Elim::UnderwaterVent: Typed<Context, Type, S>, &'b Elim::SeaUrchin: Typed<Context, Type, S>, &'b Elim::IceSpike: Typed<Context, Type, S>, &'b Elim::Mud: Typed<Context, Type, S>, &'b Elim::Orb: Typed<Context, Type, S>, &'b Elim::EnsnaringWeb: Typed<Context, Type, S>, &'b Elim::DiamondLight: Typed<Context, Type, S>, &'b Elim::Grave: Typed<Context, Type, S>, &'b Elim::Gravestone: Typed<Context, Type, S>, &'b Elim::MelonCut: Typed<Context, Type, S>, &'b Elim::ForgeTools: Typed<Context, Type, S>, &'b Elim::JugAndBowlArabic: Typed<Context, Type, S>, &'b Elim::JugArabic: Typed<Context, Type, S>, &'b Elim::DecorSetArabic: Typed<Context, Type, S>, &'b Elim::SepareArabic: Typed<Context, Type, S>, &'b Elim::Candle: Typed<Context, Type, S>, &'b Elim::SmithingTable: Typed<Context, Type, S>, &'b Elim::Forge0: Typed<Context, Type, S>, &'b Elim::GearWheel0: Typed<Context, Type, S>, &'b Elim::Quench0: Typed<Context, Type, S>, &'b Elim::SeaDecorEmblem: Typed<Context, Type, S>, &'b Elim::SeaDecorPillar: Typed<Context, Type, S>, &'b Elim::MagicalSeal: Typed<Context, Type, S>, &'b Elim::Lantern: Typed<Context, Type, S>, &'b Elim::StreetLamp: Typed<Context, Type, S>, &'b Elim::StreetLampTall: Typed<Context, Type, S>, &'b Elim::SeashellLantern: Typed<Context, Type, S>, &'b Elim::FireBowlGround: Typed<Context, Type, S>,

source§

fn reduce(self, ((head), context): ((&'a SpriteKind,), Context)) -> (Type, S)

source§

impl<'a, 'b, Elim: PackedElim, Context, Type, S> Typed<((&'a StructureBlock,), Context), Type, S> for &'b ElimCase<Cases<Elim>>
where &'b Elim::None: Typed<Context, Type, S>, &'b Elim::Grass: Typed<Context, Type, S>, &'b Elim::TemperateLeaves: Typed<Context, Type, S>, &'b Elim::PineLeaves: Typed<Context, Type, S>, &'b Elim::Acacia: Typed<Context, Type, S>, &'b Elim::Mangrove: Typed<Context, Type, S>, &'b Elim::PalmLeavesInner: Typed<Context, Type, S>, &'b Elim::PalmLeavesOuter: Typed<Context, Type, S>, &'b Elim::Water: Typed<Context, Type, S>, &'b Elim::GreenSludge: Typed<Context, Type, S>, &'b Elim::Fruit: Typed<Context, Type, S>, &'b Elim::Coconut: Typed<Context, Type, S>, &'b Elim::Chest: Typed<Context, Type, S>, &'b Elim::Hollow: Typed<Context, Type, S>, &'b Elim::Liana: Typed<Context, Type, S>, &'b Elim::Normal: Typed<((&'a Rgb<u8>,), Context), Type, S>, &'b Elim::Log: Typed<Context, Type, S>, &'b Elim::Filled: Typed<((&'a BlockKind, &'a Rgb<u8>), Context), Type, S>, &'b Elim::Sprite: Typed<((&'a SpriteKind,), Context), Type, S>, &'b Elim::Chestnut: Typed<Context, Type, S>, &'b Elim::Baobab: Typed<Context, Type, S>, &'b Elim::BirchWood: Typed<Context, Type, S>, &'b Elim::FrostpineLeaves: Typed<Context, Type, S>, &'b Elim::RotatedSprite: Typed<((&'a SpriteKind, &'a u8), Context), Type, S>, &'b Elim::EntitySpawner: Typed<((&'a String, &'a f32), Context), Type, S>, &'b Elim::Keyhole: Typed<((&'a String,), Context), Type, S>, &'b Elim::BoneKeyhole: Typed<((&'a String,), Context), Type, S>, &'b Elim::GlassKeyhole: Typed<((&'a String,), Context), Type, S>, &'b Elim::Sign: Typed<((&'a Content, &'a u8), Context), Type, S>, &'b Elim::KeyholeBars: Typed<((&'a String,), Context), Type, S>, &'b Elim::HaniwaKeyhole: Typed<((&'a String,), Context), Type, S>, &'b Elim::TerracottaKeyhole: Typed<((&'a String,), Context), Type, S>, &'b Elim::MapleLeaves: Typed<Context, Type, S>, &'b Elim::CherryLeaves: Typed<Context, Type, S>, &'b Elim::AutumnLeaves: Typed<Context, Type, S>, &'b Elim::RedwoodWood: Typed<Context, Type, S>,

source§

fn reduce( self, ((head), context): ((&'a StructureBlock,), Context) ) -> (Type, S)

Auto Trait Implementations§

§

impl<Cases> RefUnwindSafe for ElimCase<Cases>
where Cases: RefUnwindSafe,

§

impl<Cases> Send for ElimCase<Cases>
where Cases: Send,

§

impl<Cases> Sync for ElimCase<Cases>
where Cases: Sync,

§

impl<Cases> Unpin for ElimCase<Cases>
where Cases: Unpin,

§

impl<Cases> UnwindSafe for ElimCase<Cases>
where Cases: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<Context> SubContext<Context> for Context

source§

fn sub_context(self) -> Context

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<T> Event for T
where T: Send + Sync + 'static,

§

impl<T> Resource for T
where T: Any + Send + Sync,