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/property | |
| parent | f0a14ca83f6eb8946d6add25210194cf95df3110 (diff) | |
| download | azalea-drasl-a4a63ead6e00a645899bf87deea4ec94a66703f3.tar.xz | |
add BlockTrait::set_property
closes #140
Diffstat (limited to 'azalea-block/azalea-block-macros/src/property')
| -rw-r--r-- | azalea-block/azalea-block-macros/src/property/generate.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/azalea-block/azalea-block-macros/src/property/generate.rs b/azalea-block/azalea-block-macros/src/property/generate.rs index c49afd53..fc48e609 100644 --- a/azalea-block/azalea-block-macros/src/property/generate.rs +++ b/azalea-block/azalea-block-macros/src/property/generate.rs @@ -36,6 +36,7 @@ fn generate_property_code( let property_struct_name = get_property_type_name(&property.data); let mut to_static_str_inner = quote! {}; + let mut from_str_match_inner = quote! {}; match &property.data { PropertyData::Enum { variants, .. } => { @@ -56,6 +57,9 @@ fn generate_property_code( to_static_str_inner.extend(quote! { Self::#variant_ident => #variant_str, }); + from_str_match_inner.extend(quote! { + #variant_str => Self::#variant_ident, + }); } properties_code.extend(quote! { @@ -79,6 +83,10 @@ fn generate_property_code( Self(true) => "true", Self(false) => "false", }); + from_str_match_inner.extend(quote! { + "true" => Self(true), + "false" => Self(false), + }); properties_code.extend(quote! { #[derive(Clone, Copy, Debug, Eq, PartialEq)] @@ -122,6 +130,16 @@ fn generate_property_code( } } } + impl FromStr for #property_struct_name { + type Err = (); + + fn from_str(s: &str) -> Result<Self, Self::Err> { + Ok(match s { + #from_str_match_inner + _ => return Err(()) + }) + } + } impl std::fmt::Display for #property_struct_name { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { |
