Skip to content

Commit 731391e

Browse files
committed
feat: add name_hash field to DojoEvent and DojoModel for enhanced event and model identification
chore: update Scarb.lock to version 1.6.0-alpha.1 for dojo and dojo_cairo_test fix: correct import in model.cairo for ModelDefinition and remove unnecessary line
1 parent c2fbbe0 commit 731391e

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

crates/dojo/macros/src/attributes/event.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use cairo_lang_macro::{quote, Diagnostic, ProcMacroResult, TokenStream};
22
use cairo_lang_parser::utils::SimpleParserDatabase;
33
use cairo_lang_syntax::node::helpers::QueryAttrs;
44
use cairo_lang_syntax::node::{ast, TypedSyntaxNode};
5+
use dojo_types::naming;
56

67
use crate::constants::{DOJO_INTROSPECT_DERIVE, DOJO_PACKED_DERIVE, EXPECTED_DERIVE_ATTR_NAMES};
78
use crate::helpers::{
@@ -12,6 +13,7 @@ use crate::helpers::{
1213
pub struct DojoEvent {
1314
diagnostics: Vec<Diagnostic>,
1415
event_name: String,
16+
name_hash: String,
1517
members_values: Vec<String>,
1618
serialized_keys: Vec<String>,
1719
serialized_values: Vec<String>,
@@ -24,6 +26,7 @@ impl DojoEvent {
2426
Self {
2527
diagnostics: vec![],
2628
event_name: String::default(),
29+
name_hash: String::default(),
2730
members_values: vec![],
2831
serialized_keys: vec![],
2932
serialized_values: vec![],
@@ -46,6 +49,7 @@ impl DojoEvent {
4649
let mut event = DojoEvent::new();
4750

4851
event.event_name = struct_ast.name(db).as_syntax_node().get_text(db).trim().to_string();
52+
event.name_hash = naming::compute_bytearray_hash(&event.event_name).to_hex_string();
4953

5054
if let Some(failure) = DojoChecker::is_name_valid("event", &event.event_name) {
5155
return failure;
@@ -157,13 +161,15 @@ impl DojoEvent {
157161
fn generate_event_code(&self) -> TokenStream {
158162
let (
159163
type_name,
164+
name_hash,
160165
members_values,
161166
serialized_keys,
162167
serialized_values,
163168
event_value_derive_attr_names,
164169
unique_hash,
165170
) = (
166171
&self.event_name,
172+
&self.name_hash,
167173
self.members_values.join("\n"),
168174
self.serialized_keys.join("\n"),
169175
self.serialized_values.join("\n"),
@@ -182,6 +188,8 @@ pub struct {type_name}Value {{
182188
}}
183189
184190
pub impl {type_name}Definition of dojo::event::EventDefinition<{type_name}> {{
191+
const NAME_HASH: felt252 = {name_hash};
192+
185193
#[inline(always)]
186194
fn name() -> ByteArray {{
187195
\"{type_name}\"

crates/dojo/macros/src/attributes/model.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use cairo_lang_macro::{quote, Diagnostic, ProcMacroResult, TokenStream};
44
use cairo_lang_parser::utils::SimpleParserDatabase;
55
use cairo_lang_syntax::node::helpers::QueryAttrs;
66
use cairo_lang_syntax::node::{ast, TypedSyntaxNode};
7+
use dojo_types::naming;
78

89
use crate::constants::{
910
DOJO_INTROSPECT_DERIVE, DOJO_LEGACY_STORAGE_DERIVE, DOJO_PACKED_DERIVE,
@@ -17,6 +18,8 @@ use crate::helpers::{
1718
#[derive(Debug)]
1819
pub struct DojoModel {
1920
diagnostics: Vec<Diagnostic>,
21+
name_hash: String,
22+
2023
model_type: String,
2124
model_value_derive_attr_names: Vec<String>,
2225
members_values: Vec<String>,
@@ -37,6 +40,7 @@ impl DojoModel {
3740
Self {
3841
diagnostics: vec![],
3942
model_type: String::default(),
43+
name_hash: String::default(),
4044
model_value_derive_attr_names: vec![],
4145
members_values: vec![],
4246
key_type: String::default(),
@@ -65,6 +69,7 @@ impl DojoModel {
6569
let mut model = DojoModel::new();
6670

6771
model.model_type = struct_ast.name(db).as_syntax_node().get_text(db).trim().to_string();
72+
model.name_hash = naming::compute_bytearray_hash(&model.model_type).to_hex_string();
6873

6974
if let Some(failure) = DojoChecker::is_name_valid("model", &model.model_type) {
7075
return failure;
@@ -255,6 +260,7 @@ impl DojoModel {
255260
fn generate_model_code(&self) -> TokenStream {
256261
let (
257262
model_type,
263+
name_hash,
258264
model_value_derive_attr_names,
259265
members_values,
260266
key_type,
@@ -269,6 +275,7 @@ impl DojoModel {
269275
deserialized_modelvalue,
270276
) = (
271277
&self.model_type,
278+
&self.name_hash,
272279
format!("#[derive({})]", self.model_value_derive_attr_names.join(", ")),
273280
self.members_values.join(""),
274281
&self.key_type,
@@ -307,6 +314,8 @@ impl {model_type}ModelValueKey of dojo::model::model_value::ModelValueKey<{model
307314
pub mod m_{model_type}_definition {{
308315
use super::{model_type};
309316
pub impl {model_type}DefinitionImpl<T> of dojo::model::ModelDefinition<T>{{
317+
const NAME_HASH: felt252 = {name_hash};
318+
310319
#[inline(always)]
311320
fn name() -> ByteArray {{
312321
\"{model_type}\"

examples/benchmark/Scarb.lock

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ version = 1
33

44
[[package]]
55
name = "dojo"
6-
version = "1.6.0-alpha.0"
6+
version = "1.6.0-alpha.1"
77
dependencies = [
88
"dojo_macros",
99
]
@@ -19,20 +19,11 @@ dependencies = [
1919

2020
[[package]]
2121
name = "dojo_cairo_test"
22-
<<<<<<< HEAD
23-
version = "1.6.0-alpha.0"
24-
=======
25-
version = "1.6.0"
26-
>>>>>>> main
22+
version = "1.6.0-alpha.1"
2723
dependencies = [
2824
"dojo",
2925
]
3026

3127
[[package]]
32-
<<<<<<< HEAD
33-
name = "dojo_plugin"
34-
version = "2.10.1"
35-
=======
3628
name = "dojo_macros"
37-
version = "1.6.0"
38-
>>>>>>> main
29+
version = "1.6.0-alpha.1"

examples/benchmark/src/model.cairo

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use dojo::model::{Model, ModelStorage, ModelValueStorage};
1+
use dojo::model::{Model, ModelStorage, ModelValueStorage, ModelDefinition};
22
use dojo::world::WorldStorage;
33
use dojo_cairo_test::{NamespaceDef, TestResource, spawn_test_world};
44

@@ -234,7 +234,6 @@ fn read_sextuple_schema_large() {
234234
fn read_sextuple_member_large() {
235235
let mut world = spawn_foo_world();
236236
world.write_model(@LARGE);
237-
238237
let v0: felt252 = world.read_member(LARGE.ptr(), selector!("v0"));
239238
let v1: felt252 = world.read_member(LARGE.ptr(), selector!("v1"));
240239
let v2: felt252 = world.read_member(LARGE.ptr(), selector!("v2"));

0 commit comments

Comments
 (0)