use std::num::NonZeroU32;
use super::TestArch;
use crate::entity::{self};
use crate::{comp, storage, Entity};
#[comp(dynec_as(crate), of = TestArch)]
#[derive(Debug, PartialEq)]
pub struct Simple1OptionalNoDepNoInit(pub i32);
#[comp(dynec_as(crate), of = TestArch, init = init_comp2/1)]
#[derive(Debug)]
pub struct Simple2OptionalDepends1(pub i32);
fn init_comp2(c1: &Simple1OptionalNoDepNoInit) -> Simple2OptionalDepends1 {
Simple2OptionalDepends1(c1.0 + 2)
}
#[comp(
dynec_as(crate),
of = TestArch,
init = |c1: &Simple1OptionalNoDepNoInit, c2: &Simple2OptionalDepends1| Simple3OptionalDepends12(c1.0 * 3, c2.0 * 5),
)]
#[derive(Debug)]
pub struct Simple3OptionalDepends12(pub i32, pub i32);
#[comp(
dynec_as(crate),
of = TestArch,
init = |c1: &Simple1OptionalNoDepNoInit, c2: &Simple2OptionalDepends1| Simple4Depends12(c1.0 * 7, c2.0 * 8),
)]
#[derive(Debug, PartialEq)]
pub struct Simple4Depends12(pub i32, pub i32);
#[comp(dynec_as(crate), of = TestArch, required)]
#[derive(Debug, PartialEq)]
pub struct Simple5RequiredNoInit(pub i32);
#[comp(dynec_as(crate), of = TestArch, required, init = || Simple6RequiredWithInitNoDeps(9))]
#[derive(Debug)]
pub struct Simple6RequiredWithInitNoDeps(pub i32);
#[comp(dynec_as(crate), of = TestArch, finalizer)]
pub struct Simple7WithFinalizerNoinit;
pub struct SimpleN<const N: usize>(pub i32);
impl<const N: usize> entity::Referrer for SimpleN<N> {
fn visit_type(arg: &mut entity::referrer::VisitTypeArg) { arg.mark::<Self>(); }
fn visit_mut<V: entity::referrer::VisitMutArg>(&mut self, _: &mut V) {}
}
impl<const N: usize> comp::SimpleOrIsotope<TestArch> for SimpleN<N> {
const PRESENCE: comp::Presence = comp::Presence::Optional;
const INIT_STRATEGY: comp::InitStrategy<TestArch, Self> = comp::InitStrategy::None;
type Storage = storage::Vec<NonZeroU32, Self>;
}
impl<const N: usize> comp::Simple<TestArch> for SimpleN<N> {
const IS_FINALIZER: bool = false;
}
#[comp(dynec_as(crate), of = TestArch)]
pub struct StrongRefSimple(#[entity] pub Entity<TestArch>);