From 8e125fdd9fcd6d8fde67c230d254edd07c9f5132 Mon Sep 17 00:00:00 2001
From: Louis Capitanchik <contact@louiscap.co>
Date: Sun, 22 Oct 2023 02:35:14 +0100
Subject: [PATCH] Add README.md

---
 README.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
 create mode 100644 README.md

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f8392ab
--- /dev/null
+++ b/README.md
@@ -0,0 +1,81 @@
+# Micro Game Macros
+
+![docs.rs](https://img.shields.io/docsrs/micro_game_macros?style=for-the-badge)
+![Crates.io](https://img.shields.io/crates/v/micro_game_macros?style=for-the-badge)
+
+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 ...
+
+```
\ No newline at end of file
-- 
GitLab