aboutsummaryrefslogtreecommitdiff
path: root/azalea-inventory/azalea-inventory-macros/src/parse_macro.rs
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2023-05-03 20:57:27 -0500
committerGitHub <noreply@github.com>2023-05-03 20:57:27 -0500
commit634cb8d72c6608512aedba19e5cd669104bc35ea (patch)
treef8e76ce9eb43403d29cc0cbcf9a4f51522419dc2 /azalea-inventory/azalea-inventory-macros/src/parse_macro.rs
parent1fb4418f2c9cbd004c64c2f23d2d0352ee12c0e5 (diff)
downloadazalea-drasl-634cb8d72c6608512aedba19e5cd669104bc35ea.tar.xz
Inventory (#48)
* start adding azalea-inventory * design more of how inventories are defined * start working on az-inv-macros * inventory macro works * start adding inventory codegen * update some deps * add inventory codegen * manually write inventory menus * put the inventories in Client * start on containersetcontent * inventory menu should hopefully work * checks in containersetcontent * format a comment * move some variant matches * inventory.rs * inventory stuff * more inventory stuff * inventory/container tracking works * start adding interact function * sequence number * start adding HitResultComponent * implement traverse_blocks * start adding clip * add clip function * update_hit_result_component * start trying to fix * fix * make some stuff simpler * clippy * lever * chest * container handle * fix ambiguity * fix some doc tests * move some container stuff from az-client to azalea * clicking container * start implementing simulate_click * keep working on simulate click * implement more of simulate_click this is really boring * inventory fixes * start implementing shift clicking * fix panic in azalea-chat i hope * shift clicking implemented * more inventory stuff * fix items not showing in containers sometimes * fix test * fix all warnings * remove a println --------- Co-authored-by: mat <git@matdoes.dev>
Diffstat (limited to 'azalea-inventory/azalea-inventory-macros/src/parse_macro.rs')
-rw-r--r--azalea-inventory/azalea-inventory-macros/src/parse_macro.rs69
1 files changed, 69 insertions, 0 deletions
diff --git a/azalea-inventory/azalea-inventory-macros/src/parse_macro.rs b/azalea-inventory/azalea-inventory-macros/src/parse_macro.rs
new file mode 100644
index 00000000..8eada4ec
--- /dev/null
+++ b/azalea-inventory/azalea-inventory-macros/src/parse_macro.rs
@@ -0,0 +1,69 @@
+use syn::{
+ self, braced,
+ parse::{Parse, ParseStream, Result},
+ Ident, LitInt, Token,
+};
+
+/// An identifier, colon, and number
+/// `craft_result: 1`
+pub struct Field {
+ pub name: Ident,
+ pub length: usize,
+}
+impl Parse for Field {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let name = input.parse::<Ident>()?;
+ let _ = input.parse::<Token![:]>()?;
+ let length = input.parse::<LitInt>()?.base10_parse()?;
+ Ok(Self { name, length })
+ }
+}
+
+/// An identifier and a list of `Field` in curly brackets
+/// ```rust,ignore
+/// Player {
+/// craft_result: 1,
+/// ...
+/// }
+/// ```
+pub struct Menu {
+ /// The menu name, e.g. `Player`
+ pub name: Ident,
+ pub fields: Vec<Field>,
+}
+
+impl Parse for Menu {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let name = input.parse::<Ident>()?;
+
+ let content;
+ braced!(content in input);
+ let fields = content
+ .parse_terminated::<Field, Token![,]>(Field::parse)?
+ .into_iter()
+ .collect();
+
+ Ok(Self { name, fields })
+ }
+}
+
+/// A list of `Menu`s
+/// ```rust,ignore
+/// Player {
+/// craft_result: 1,
+/// ...
+/// },
+/// ...
+/// ```
+pub struct DeclareMenus {
+ pub menus: Vec<Menu>,
+}
+impl Parse for DeclareMenus {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let menus = input
+ .parse_terminated::<Menu, Token![,]>(Menu::parse)?
+ .into_iter()
+ .collect();
+ Ok(Self { menus })
+ }
+}