diff options
| author | mat <git@matdoes.dev> | 2026-01-03 13:57:10 -1030 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2026-01-04 05:28:22 +0500 |
| commit | a4a63ead6e00a645899bf87deea4ec94a66703f3 (patch) | |
| tree | 5c202045614ba045a311fca80964fc17d5279a01 /azalea-block/azalea-block-macros/src/lib.rs | |
| parent | f0a14ca83f6eb8946d6add25210194cf95df3110 (diff) | |
| download | azalea-drasl-a4a63ead6e00a645899bf87deea4ec94a66703f3.tar.xz | |
add BlockTrait::set_property
closes #140
Diffstat (limited to 'azalea-block/azalea-block-macros/src/lib.rs')
| -rw-r--r-- | azalea-block/azalea-block-macros/src/lib.rs | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/azalea-block/azalea-block-macros/src/lib.rs b/azalea-block/azalea-block-macros/src/lib.rs index 586d6a98..23546a2b 100644 --- a/azalea-block/azalea-block-macros/src/lib.rs +++ b/azalea-block/azalea-block-macros/src/lib.rs @@ -434,7 +434,8 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { }); let mut property_map_inner = quote! {}; - let mut get_property_inner = quote! {}; + let mut get_property_match_inner = quote! {}; + let mut set_property_match_inner = quote! {}; for PropertyWithNameAndDefault { name, @@ -450,10 +451,30 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { property_map_inner.extend(quote! { map.insert(#name, #variant_name_tokens); }); - get_property_inner.extend(quote! { + get_property_match_inner.extend(quote! { #name => Some(#variant_name_tokens), }); + + set_property_match_inner.extend(match kind { + PropertyKind::Enum => quote! { #name => self.#name_ident = new_value.parse()?, }, + PropertyKind::Bool => { + quote! { #name => self.#name_ident = new_value.parse::<bool>().map_err(|_| ())?, } + } + }); } + let set_property = if set_property_match_inner.is_empty() { + quote! { + Err(()) + } + } else { + quote! { + match name { + #set_property_match_inner + _ => return Err(()), + } + Ok(()) + } + }; let mut block_default_fields = quote! {}; for PropertyWithNameAndDefault { @@ -502,10 +523,13 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { } fn get_property(&self, name: &str) -> Option<&'static str> { match name { - #get_property_inner + #get_property_match_inner _ => None, } } + fn set_property(&mut self, name: &str, new_value: &str) -> Result<(), ()> { + #set_property + } } impl From<#block_struct_name> for BlockState { |
