Skip to content

Commit

Permalink
address comments
Browse files Browse the repository at this point in the history
  • Loading branch information
nbayindirli committed Jan 31, 2025
1 parent 2c66b6b commit 2fa81e7
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 152 deletions.
2 changes: 1 addition & 1 deletion packages/stellar-axelar-std-derive/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ proc-macro = true
[features]

[dependencies]
goldie = { workspace = true }
heck = "0.5"
itertools = "0.14"
prettyplease = "0.2"
Expand All @@ -21,6 +20,7 @@ quote = { version = "1.0", default-features = false }
syn = { version = "2.0", features = ["full", "extra-traits"] }

[dev-dependencies]
goldie = { workspace = true }

[lints]
workspace = true
12 changes: 7 additions & 5 deletions packages/stellar-axelar-std-derive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,13 +277,15 @@ pub fn derive_its_executable(input: TokenStream) -> TokenStream {
/// token_id: u32,
/// name: String,
/// ) {
/// // Generates: DataKey::set_token_name(env, token_id, &name);
/// DataKey::set_token_name(env, token_id, &name);
/// storage::set_token_name(env, token_id, &name);
/// }
///
/// pub fn token_name(env: &Env, token_id: u32) -> Option<String> {
/// // Generates: DataKey::get_token_name(env, token_id)
/// DataKey::get_token_name(env, token_id)
/// pub fn foo(env: &Env, token_id: u32) -> Option<String> {
/// storage::token_name(env, token_id);
/// }
///
/// pub fn bar(env: &Env, token_id: u32) -> Option<String> {
/// storage::remove_token_name(env, token_id)
/// }
/// }
/// # }
Expand Down
214 changes: 68 additions & 146 deletions packages/stellar-axelar-std-derive/src/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -207,99 +207,59 @@ fn storage_fns(
};

match &storage_attrs.value {
Value::Status => status_impl(
&key,
&getter_name,
&setter_name,
&remover_name,
&param_list,
&storage_method,
),
Value::Type(value_type) => value_impl(
&key,
value_type,
&getter_name,
&setter_name,
&remover_name,
&param_list,
&storage_method,
&ttl_fn,
),
}
}

fn status_impl(
key: &TokenStream,
getter_name: &Ident,
setter_name: &Ident,
remover_name: &Ident,
param_list: &TokenStream,
storage_method: &TokenStream,
) -> TokenStream {
quote! {
pub fn #getter_name(#param_list) -> bool {
let key = #key;
env.storage()
.#storage_method()
.has(&key)
}

pub fn #setter_name(#param_list) {
let key = #key;
env.storage()
.#storage_method()
.set(&key, &());
}

pub fn #remover_name(#param_list) {
let key = #key;
env.storage()
.#storage_method()
.remove(&key);
}
}
}
Value::Status => quote! {
pub fn #getter_name(#param_list) -> bool {
let key = #key;
env.storage()
.#storage_method()
.has(&key)
}

fn value_impl(
key: &TokenStream,
value_type: &Type,
getter_name: &Ident,
setter_name: &Ident,
remover_name: &Ident,
param_list: &TokenStream,
storage_method: &TokenStream,
ttl_fn: &TokenStream,
) -> TokenStream {
quote! {
pub fn #getter_name(#param_list) -> Option<#value_type> {
let key = #key;
let value = env.storage()
.#storage_method()
.get::<_, #value_type>(&key);

if value.is_some() {
#ttl_fn
pub fn #setter_name(#param_list) {
let key = #key;
env.storage()
.#storage_method()
.set(&key, &());
}

value
}
pub fn #remover_name(#param_list) {
let key = #key;
env.storage()
.#storage_method()
.remove(&key);
}
},
Value::Type(value_type) => quote! {
pub fn #getter_name(#param_list) -> Option<#value_type> {
let key = #key;
let value = env.storage()
.#storage_method()
.get::<_, #value_type>(&key);

if value.is_some() {
#ttl_fn
}

value
}

pub fn #setter_name(#param_list, value: &#value_type) {
let key = #key;
pub fn #setter_name(#param_list, value: &#value_type) {
let key = #key;

env.storage()
.#storage_method()
.set(&key, value);
env.storage()
.#storage_method()
.set(&key, value);

#ttl_fn
}
#ttl_fn
}

pub fn #remover_name(#param_list) {
let key = #key;
env.storage()
.#storage_method()
.remove(&key);
}
pub fn #remover_name(#param_list) {
let key = #key;
env.storage()
.#storage_method()
.remove(&key);
}
},
}
}

Expand All @@ -326,70 +286,32 @@ fn public_storage_fns(
};

match &storage_attrs.value {
Value::Status => public_status_impl(
enum_name,
&getter_name,
&setter_name,
&remover_name,
&param_list,
&fn_args,
),
Value::Type(value_type) => public_value_impl(
enum_name,
value_type,
&getter_name,
&setter_name,
&remover_name,
&param_list,
&fn_args,
),
}
}

fn public_status_impl(
enum_name: &Ident,
getter_name: &Ident,
setter_name: &Ident,
remover_name: &Ident,
param_list: &TokenStream,
fn_args: &TokenStream,
) -> TokenStream {
quote! {
pub fn #getter_name(#param_list) -> bool {
#enum_name::#getter_name(#fn_args)
}

pub fn #setter_name(#param_list) {
#enum_name::#setter_name(#fn_args)
}
Value::Status => quote! {
pub fn #getter_name(#param_list) -> bool {
#enum_name::#getter_name(#fn_args)
}

pub fn #remover_name(#param_list) {
#enum_name::#remover_name(#fn_args)
}
}
}
pub fn #setter_name(#param_list) {
#enum_name::#setter_name(#fn_args)
}

fn public_value_impl(
enum_name: &Ident,
value_type: &Type,
getter_name: &Ident,
setter_name: &Ident,
remover_name: &Ident,
param_list: &TokenStream,
fn_args: &TokenStream,
) -> TokenStream {
quote! {
pub fn #getter_name(#param_list) -> Option<#value_type> {
#enum_name::#getter_name(#fn_args)
}
pub fn #remover_name(#param_list) {
#enum_name::#remover_name(#fn_args)
}
},
Value::Type(value_type) => quote! {
pub fn #getter_name(#param_list) -> Option<#value_type> {
#enum_name::#getter_name(#fn_args)
}

pub fn #setter_name(#param_list, value: &#value_type) {
#enum_name::#setter_name(#fn_args, value)
}
pub fn #setter_name(#param_list, value: &#value_type) {
#enum_name::#setter_name(#fn_args, value)
}

pub fn #remover_name(#param_list) {
#enum_name::#remover_name(#fn_args)
}
pub fn #remover_name(#param_list) {
#enum_name::#remover_name(#fn_args)
}
},
}
}

Expand Down

0 comments on commit 2fa81e7

Please sign in to comment.