# Micro Game Macros   A collection of utility macros for building games ## Macros For executable examples, visit the rustdoc and/or read the doctests in `src/lib.rs` ### JSON Loader Generate a Bevy asset loader for a given asset, supporting JSON files that define a single instance of that asset type, or a list of that asset type. Instances of an asset need to be identifiable, though the property that is used to identify a particular asset is customisable ```rust #[derive(JsonLoader, TypePath, TypeUuid, Serialize, Deserialize)] #[loader( extension = "asset.json", uuid = "00000000-0000-0000-0000-000000000000", storage = inner_module::SimpleAssetLocator, asset_name = some_asset_prop, index_name = set_of_assets )] #[uuid = "00000000-0000-0000-0000-000000000001"] pub struct MyAsset { /// The asset identifier needs to implement [std::fmt::Display] #[asset_id] uniq_ident: usize, } ``` ### Asset System Generate a set of structs and systems for managed loading in a Bevy game ```rust use bevy::prelude::{Image, Res, Resource}; use micro_games_macros::asset_system; #[asset_system] pub struct AssetHandles { my_asset: Image, } pub fn loading_system(mut loader: AssetHandlesLoader) { loader.load_my_asset("path/to/asset.png", "Asset"); } pub fn use_asset_system(assets: Res<AssetHandles>) { let handle = assets.my_asset("Asset"); } ``` ### From Inner Derive an impl of `From<T>` for structs that wrap a single inner type (Tuple and Named Property structs are supported) ```rust use micro_game_macros::FromInner; #[derive(FromInner)] struct MyType(usize); fn example() { let value = MyType::from(123usize); } ``` ### Kayak Widget A simple derive for Kayak UI's "Widget" trait ```rust use micro_game_macros::Widget; #[derive(Widget)] struct MyComponent; // ... Other Kayak Setup ... ```