use bevy::prelude::*;
use proptest_derive::Arbitrary;
use super::one_way_fn::OneWayFn;
#[derive(Copy, Clone, Default, Debug, PartialEq, Eq, Component, Arbitrary)]
pub struct NumberComponent<const MARKER: usize>(pub u128);
pub fn two_number_components_one_way_transform(
f0: OneWayFn,
f1: OneWayFn,
) -> impl Fn((NumberComponent<0>, NumberComponent<1>)) -> (NumberComponent<0>, NumberComponent<1>) {
move |(NumberComponent(n0), NumberComponent(n1))| {
(NumberComponent(f0.call(n0)), NumberComponent(f1.call(n1)))
}
}
pub fn n0_to_n1_through_one_way_function(
f: OneWayFn,
) -> impl Fn(NumberComponent<0>) -> NumberComponent<1> {
move |NumberComponent(n)| NumberComponent(f.call(n))
}
pub fn n0_query_data_to_n1_through_one_way_function(
f: OneWayFn,
) -> impl Fn((NumberComponent<1>,), &NumberComponent<0>) -> (NumberComponent<1>,) {
move |_, n0| (n0_to_n1_through_one_way_function(f)(*n0),)
}
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Message, Arbitrary)]
pub struct NumberMessage(pub u128);
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Event, Arbitrary)]
pub struct NumberEvent(pub u128);
#[derive(Copy, Clone, Debug, PartialEq, Eq, Resource, Arbitrary, Default)]
pub struct NumberResource(pub u128);