diff --git a/src/book_manager.cairo b/src/book_manager.cairo index c939565..d304bf2 100644 --- a/src/book_manager.cairo +++ b/src/book_manager.cairo @@ -359,7 +359,7 @@ pub mod BookManager { unit_size: key.unit_size, maker_policy: key.maker_policy, taker_policy: key.taker_policy, - hooks: key.hooks.address + hooks: key.hooks.into() } ); diff --git a/src/libraries/book_key.cairo b/src/libraries/book_key.cairo index f477599..e0b7269 100644 --- a/src/libraries/book_key.cairo +++ b/src/libraries/book_key.cairo @@ -30,7 +30,7 @@ impl BookKeyStorePacking of StorePacking { let packed: u128 = value.unit_size.into() + TWO_POW_64 * value.maker_policy.encode().into() + TWO_POW_96 * value.taker_policy.encode().into(); - [value.base.into(), value.quote.into(), value.hooks.address.into(), packed.into()] + [value.base.into(), value.quote.into(), value.hooks.into(), packed.into()] } fn unpack(value: [felt252; 4]) -> BookKey { @@ -47,7 +47,7 @@ impl BookKeyStorePacking of StorePacking { BookKey { base: (*v[0]).try_into().unwrap(), quote: (*v[1]).try_into().unwrap(), - hooks: Hooks { address: (*v[2]).try_into().unwrap() }, + hooks: (*v[2]).try_into().unwrap(), unit_size: unit_size.try_into().unwrap(), maker_policy, taker_policy, diff --git a/src/libraries/hooks.cairo b/src/libraries/hooks.cairo index fd30842..77ec44a 100644 --- a/src/libraries/hooks.cairo +++ b/src/libraries/hooks.cairo @@ -2,7 +2,7 @@ use starknet::ContractAddress; #[derive(Copy, Drop, Hash, Serde, starknet::Store)] pub struct Hooks { - pub address: ContractAddress, + address: ContractAddress, } pub struct Permissions { @@ -31,6 +31,30 @@ pub mod Permission { pub const AFTER_CLAIM: u256 = 0x200; // 1 << 9 } +impl HooksIntoContractAddress of Into { + fn into(self: Hooks) -> ContractAddress { + self.address + } +} + +impl ContractAddressIntoHooks of Into { + fn into(self: ContractAddress) -> Hooks { + Hooks { address: self } + } +} + +impl HooksIntoFelt252 of Into { + fn into(self: Hooks) -> felt252 { + self.address.into() + } +} + +impl Felt252TryIntoHooks of TryInto { + fn try_into(self: felt252) -> Option { + Option::Some(Hooks { address: self.try_into()? }) + } +} + #[generate_trait] pub impl HooksImpl of HooksTrait { fn has_permission(self: @Hooks, flag: u256) -> bool { diff --git a/src/libraries/hooks_caller.cairo b/src/libraries/hooks_caller.cairo index 2dfd108..0e83927 100644 --- a/src/libraries/hooks_caller.cairo +++ b/src/libraries/hooks_caller.cairo @@ -8,7 +8,7 @@ use clober_cairo::interfaces::params::{MakeParams, TakeParams, CancelParams}; #[derive(Copy, Drop, starknet::Store)] pub struct HooksCaller { - pub hooks_list: StorageArray, + hooks_list: StorageArray, } #[generate_trait] @@ -18,12 +18,12 @@ pub impl HooksCallerImpl of HooksCallerTrait { if length == 0 { ZERO_ADDRESS() } else { - self.hooks_list.read_at(length - 1).address + self.hooks_list.read_at(length - 1).into() } } fn get_hook(self: @HooksCaller, i: u32) -> ContractAddress { - self.hooks_list.read_at(i).address + self.hooks_list.read_at(i).into() } fn call_hook( @@ -32,7 +32,7 @@ pub impl HooksCallerImpl of HooksCallerTrait { // @dev Set current hook here self.hooks_list.append(*hooks); - let mut res = syscalls::call_contract_syscall(*hooks.address, expected_selector, hook_data) + let mut res = syscalls::call_contract_syscall((*hooks).into(), expected_selector, hook_data) .unwrap_syscall(); let selector = Serde::::deserialize(ref res).unwrap();