aboutsummaryrefslogtreecommitdiff
path: root/azalea-block/azalea-block-macros/src/property
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2026-01-03 13:57:10 -1030
committermat <git@matdoes.dev>2026-01-04 05:28:22 +0500
commita4a63ead6e00a645899bf87deea4ec94a66703f3 (patch)
tree5c202045614ba045a311fca80964fc17d5279a01 /azalea-block/azalea-block-macros/src/property
parentf0a14ca83f6eb8946d6add25210194cf95df3110 (diff)
downloadazalea-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.rs18
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 {