beet_rsx 0.0.8

An Astro inspired templating system built with bevy
#![cfg_attr(test, feature(test, custom_test_frameworks))]
#![cfg_attr(test, test_runner(beet_core::test_runner))]
use beet_rsx::prelude::*;
use beet_core::prelude::*;

#[test]
fn works() {
	let val = StructA::<u32>::default().field_a(2);
	val.get_field_a().xpect_eq(2);
	let val = ButtonB::default()
		.field_a(2)
		.field_b(3)
		.field_c(true)
		.field_d(4)
		.field_button_b(5);
	val.get_field_a().xpect_eq(2);
	val.get_field_b().xpect_eq(3);
	val.get_field_c().xpect_eq(true);
	val.get_field_d().xpect_eq(4);
}


#[derive(Debug, Default, Buildable)]
pub struct StructA<T: 'static + Clone>
where
	T: ToString,
{
	pub field_a: T,
}

#[derive(Debug, Default, Buildable)]
pub struct StructB<T: 'static> {
	#[field(flatten)]
	pub struct_a: StructA<usize>,
	pub field_b: T,
}
#[derive(Debug, Default, Buildable)]
pub struct StructC {
	#[field(flatten)]
	#[field(flatten = StructA<usize>)]
	pub struct_b: StructB<u32>,
	pub field_c: bool,
}
#[derive(Debug, Default, Buildable)]
pub struct StructD {
	#[field(flatten)]
	#[field(flatten = StructB<u32>)]
	#[field(flatten = StructA<usize>)]
	pub struct_c: StructC,
	pub field_d: u32,
}


#[derive(Debug, Default, Buildable)]
struct ButtonB {
	#[field(flatten)]
	#[field(flatten = StructB<u32>)]
	#[field(flatten = StructA<usize>)]
	#[field(flatten = StructC)]
	pub button_attrs: StructD,
	pub field_button_b: u32,
}