Skip to content

Commit

Permalink
storage mapper from addr - impl trait for all mappers and auto impl s…
Browse files Browse the repository at this point in the history
…torage
  • Loading branch information
BiancaIalangi committed Jun 14, 2024
1 parent 8ea2637 commit d88cc71
Show file tree
Hide file tree
Showing 18 changed files with 235 additions and 665 deletions.
621 changes: 0 additions & 621 deletions contracts/examples/adder/file.rs

This file was deleted.

5 changes: 4 additions & 1 deletion contracts/examples/adder/src/adder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ pub trait Adder {
fn sum(&self) -> SingleValueMapper<BigUint>;

#[storage_mapper_from_address("sum")]
fn sum_with_address(&self, address: &ManagedAddress) -> SingleValueMapper<BigUint>;
fn sum_with_address(
&self,
address: &ManagedAddress,
) -> SingleValueMapper<BigUint, ManagedAddress>;

#[init]
fn init(&self, initial_value: BigUint) {
Expand Down
4 changes: 2 additions & 2 deletions framework/base/src/storage/mappers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ mod bi_di_mapper;
mod linked_list_mapper;
mod map_mapper;
mod map_storage_mapper;
pub mod mapper;
mod mapper;
mod ordered_binary_tree_mapper;
mod queue_mapper;
mod set_mapper;
Expand All @@ -20,7 +20,7 @@ pub use bi_di_mapper::BiDiMapper;
pub use linked_list_mapper::{LinkedListMapper, LinkedListNode};
pub use map_mapper::MapMapper;
pub use map_storage_mapper::MapStorageMapper;
pub use mapper::{StorageClearable, StorageMapper};
pub use mapper::{StorageClearable, StorageMapper, StorageMapperFromAddress};
pub use ordered_binary_tree_mapper::{
NodeId, OrderedBinaryTreeMapper, OrderedBinaryTreeNode, NULL_NODE_ID,
};
Expand Down
19 changes: 16 additions & 3 deletions framework/base/src/storage/mappers/address_to_id_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use core::marker::PhantomData;

use super::{
set_mapper::{CurrentStorage, StorageAddress},
StorageMapper,
StorageMapper, StorageMapperFromAddress,
};
use crate::{
api::{ErrorApiImpl, StorageMapperApi},
Expand Down Expand Up @@ -42,11 +42,24 @@ where
}
}

impl<SA> AddressToIdMapper<SA, ManagedAddress<SA>>
impl<SA> StorageMapper<SA> for AddressToIdMapper<SA, ManagedAddress<SA>>
where
SA: StorageMapperApi,
{
pub fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
fn new(base_key: StorageKey<SA>) -> Self {
AddressToIdMapper {
_phantom_api: PhantomData,
address: ManagedAddress::default(),
base_key,
}
}
}

impl<SA> StorageMapperFromAddress<SA> for AddressToIdMapper<SA, ManagedAddress<SA>>
where
SA: StorageMapperApi,
{
fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
AddressToIdMapper {
_phantom_api: PhantomData,
address,
Expand Down
28 changes: 25 additions & 3 deletions framework/base/src/storage/mappers/bi_di_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use crate::{

use super::{
set_mapper::{CurrentStorage, StorageAddress},
unordered_set_mapper, StorageMapper, UnorderedSetMapper,
unordered_set_mapper, StorageMapper, StorageMapperFromAddress, UnorderedSetMapper,
};
use crate::{
abi::{TypeAbi, TypeDescriptionContainer, TypeName},
Expand Down Expand Up @@ -66,13 +66,35 @@ where
}
}

impl<SA, K, V> BiDiMapper<SA, K, V, ManagedAddress<SA>>
impl<SA, K, V> StorageMapper<SA> for BiDiMapper<SA, K, V, ManagedAddress<SA>>
where
SA: StorageMapperApi,
K: TopEncode + TopDecode + NestedEncode + NestedDecode + 'static + Default + PartialEq,
V: TopEncode + TopDecode + NestedEncode + NestedDecode + 'static + Default + PartialEq,
{
pub fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
fn new(base_key: StorageKey<SA>) -> Self {
let mut id_key = base_key.clone();
id_key.append_bytes(ID_SUFIX);

let mut value_key = base_key.clone();
value_key.append_bytes(VALUE_SUFIX);
BiDiMapper {
_phantom_api: PhantomData,
address: ManagedAddress::default(),
id_set_mapper: UnorderedSetMapper::<SA, K, ManagedAddress<SA>>::new(id_key),
value_set_mapper: UnorderedSetMapper::<SA, V, ManagedAddress<SA>>::new(value_key),
base_key,
}
}
}

impl<SA, K, V> StorageMapperFromAddress<SA> for BiDiMapper<SA, K, V, ManagedAddress<SA>>
where
SA: StorageMapperApi,
K: TopEncode + TopDecode + NestedEncode + NestedDecode + 'static + Default + PartialEq,
V: TopEncode + TopDecode + NestedEncode + NestedDecode + 'static + Default + PartialEq,
{
fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
let mut id_key = base_key.clone();
id_key.append_bytes(ID_SUFIX);

Expand Down
21 changes: 18 additions & 3 deletions framework/base/src/storage/mappers/linked_list_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use core::marker::PhantomData;

use super::{
set_mapper::{CurrentStorage, StorageAddress},
StorageClearable, StorageMapper,
StorageClearable, StorageMapper, StorageMapperFromAddress,
};
use crate::{
abi::{TypeAbi, TypeAbiFrom, TypeDescriptionContainer, TypeName},
Expand Down Expand Up @@ -118,12 +118,27 @@ where
}
}

impl<SA, T> LinkedListMapper<SA, T, ManagedAddress<SA>>
impl<SA, T> StorageMapper<SA> for LinkedListMapper<SA, T, ManagedAddress<SA>>
where
SA: StorageMapperApi,
T: TopEncode + TopDecode + NestedEncode + NestedDecode + Clone,
{
pub fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
fn new(base_key: StorageKey<SA>) -> Self {
LinkedListMapper {
_phantom_api: PhantomData,
address: ManagedAddress::default(),
base_key,
_phantom_item: PhantomData,
}
}
}

impl<SA, T> StorageMapperFromAddress<SA> for LinkedListMapper<SA, T, ManagedAddress<SA>>
where
SA: StorageMapperApi,
T: TopEncode + TopDecode + NestedEncode + NestedDecode + Clone,
{
fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
LinkedListMapper {
_phantom_api: PhantomData,
address,
Expand Down
23 changes: 20 additions & 3 deletions framework/base/src/storage/mappers/map_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use core::marker::PhantomData;

use super::{
set_mapper::{self, CurrentStorage, StorageAddress},
SetMapper, StorageClearable, StorageMapper,
SetMapper, StorageClearable, StorageMapper, StorageMapperFromAddress,
};
use crate::{
abi::{TypeAbi, TypeAbiFrom, TypeDescriptionContainer, TypeName},
Expand Down Expand Up @@ -49,6 +49,23 @@ where
}
}

impl<SA, K, V> StorageMapper<SA> for MapMapper<SA, K, V, ManagedAddress<SA>>
where
SA: StorageMapperApi,
K: TopEncode + TopDecode + NestedEncode + NestedDecode,
V: TopEncode + TopDecode,
{
fn new(base_key: StorageKey<SA>) -> Self {
MapMapper {
_phantom_api: PhantomData,
address: ManagedAddress::default(),
base_key: base_key.clone(),
keys_set: SetMapper::new(base_key),
_phantom_value: PhantomData,
}
}
}

impl<SA, K, V> StorageClearable for MapMapper<SA, K, V, CurrentStorage>
where
SA: StorageMapperApi,
Expand Down Expand Up @@ -99,13 +116,13 @@ where
}
}

impl<SA, K, V> MapMapper<SA, K, V, ManagedAddress<SA>>
impl<SA, K, V> StorageMapperFromAddress<SA> for MapMapper<SA, K, V, ManagedAddress<SA>>
where
SA: StorageMapperApi,
K: TopEncode + TopDecode + NestedEncode + NestedDecode,
V: TopEncode + TopDecode,
{
pub fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
MapMapper {
_phantom_api: PhantomData,
address: address.clone(),
Expand Down
22 changes: 19 additions & 3 deletions framework/base/src/storage/mappers/map_storage_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use core::marker::PhantomData;

use super::{
set_mapper::{self, CurrentStorage, StorageAddress},
SetMapper, StorageClearable, StorageMapper,
SetMapper, StorageClearable, StorageMapper, StorageMapperFromAddress,
};
use crate::{
api::StorageMapperApi,
Expand Down Expand Up @@ -44,6 +44,22 @@ where
}
}

impl<SA, K, V> StorageMapper<SA> for MapStorageMapper<SA, K, V, ManagedAddress<SA>>
where
SA: StorageMapperApi,
K: TopEncode + TopDecode + NestedEncode + NestedDecode,
V: StorageMapper<SA> + StorageClearable,
{
fn new(base_key: StorageKey<SA>) -> Self {
Self {
_phantom_api: PhantomData,
base_key: base_key.clone(),
keys_set: SetMapper::new(base_key),
_phantom_value: PhantomData,
}
}
}

impl<SA, K, V> StorageClearable for MapStorageMapper<SA, K, V, CurrentStorage>
where
SA: StorageMapperApi,
Expand Down Expand Up @@ -87,13 +103,13 @@ where
}
}

impl<SA, K, V> MapStorageMapper<SA, K, V, ManagedAddress<SA>>
impl<SA, K, V> StorageMapperFromAddress<SA> for MapStorageMapper<SA, K, V, ManagedAddress<SA>>
where
SA: StorageMapperApi,
K: TopEncode + TopDecode + NestedEncode + NestedDecode,
V: StorageMapper<SA> + StorageClearable,
{
pub fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
MapStorageMapper {
_phantom_api: PhantomData,
base_key: base_key.clone(),
Expand Down
20 changes: 17 additions & 3 deletions framework/base/src/storage/mappers/queue_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use core::marker::PhantomData;

use super::{
set_mapper::{CurrentStorage, StorageAddress},
StorageClearable, StorageMapper,
StorageClearable, StorageMapper, StorageMapperFromAddress,
};
use crate::{
abi::{TypeAbi, TypeAbiFrom, TypeDescriptionContainer, TypeName},
Expand Down Expand Up @@ -91,6 +91,20 @@ where
}
}
}
impl<SA, T> StorageMapper<SA> for QueueMapper<SA, T, ManagedAddress<SA>>
where
SA: StorageMapperApi,
T: TopEncode + TopDecode,
{
fn new(base_key: StorageKey<SA>) -> Self {
QueueMapper {
_phantom_api: PhantomData,
address: ManagedAddress::default(),
base_key,
_phantom_item: PhantomData,
}
}
}

impl<SA, T> StorageClearable for QueueMapper<SA, T, CurrentStorage>
where
Expand Down Expand Up @@ -271,12 +285,12 @@ where
}
}

impl<SA, T> QueueMapper<SA, T, ManagedAddress<SA>>
impl<SA, T> StorageMapperFromAddress<SA> for QueueMapper<SA, T, ManagedAddress<SA>>
where
SA: StorageMapperApi,
T: TopEncode + TopDecode,
{
pub fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
QueueMapper {
_phantom_api: PhantomData::<SA>,
address,
Expand Down
21 changes: 18 additions & 3 deletions framework/base/src/storage/mappers/set_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use core::marker::PhantomData;
use storage_get_from_address::storage_get_len_from_address;

pub use super::queue_mapper::Iter;
use super::{QueueMapper, StorageClearable, StorageMapper};
use super::{QueueMapper, StorageClearable, StorageMapper, StorageMapperFromAddress};
use crate::{
abi::{TypeAbi, TypeAbiFrom, TypeDescriptionContainer, TypeName},
api::StorageMapperApi,
Expand Down Expand Up @@ -82,6 +82,21 @@ where
}
}

impl<SA, T> StorageMapper<SA> for SetMapper<SA, T, ManagedAddress<SA>>
where
SA: StorageMapperApi,
T: TopEncode + TopDecode + NestedEncode + NestedDecode,
{
fn new(base_key: StorageKey<SA>) -> Self {
SetMapper {
_phantom_api: PhantomData,
address: ManagedAddress::default(),
base_key: base_key.clone(),
queue_mapper: QueueMapper::new(base_key),
}
}
}

impl<SA, T> StorageClearable for SetMapper<SA, T, CurrentStorage>
where
SA: StorageMapperApi,
Expand All @@ -95,12 +110,12 @@ where
}
}

impl<SA, T> SetMapper<SA, T, ManagedAddress<SA>>
impl<SA, T> StorageMapperFromAddress<SA> for SetMapper<SA, T, ManagedAddress<SA>>
where
SA: StorageMapperApi,
T: TopEncode + TopDecode + NestedEncode + NestedDecode,
{
pub fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
SetMapper {
_phantom_api: PhantomData,
address: address.clone(),
Expand Down
22 changes: 19 additions & 3 deletions framework/base/src/storage/mappers/single_value_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use core::{borrow::Borrow, marker::PhantomData};

use super::{
set_mapper::{CurrentStorage, StorageAddress},
StorageMapper,
StorageMapper, StorageMapperFromAddress,
};
use crate::{
abi::{TypeAbi, TypeAbiFrom, TypeDescriptionContainer, TypeName},
Expand Down Expand Up @@ -44,13 +44,29 @@ where
}
}

impl<SA, T> SingleValueMapper<SA, T, ManagedAddress<SA>>
impl<SA, T> StorageMapper<SA> for SingleValueMapper<SA, T, ManagedAddress<SA>>
where
SA: StorageMapperApi,
T: TopEncode + TopDecode,
{
#[inline]
pub fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
fn new(base_key: StorageKey<SA>) -> Self {
SingleValueMapper {
address: ManagedAddress::default(),
key: base_key,
_phantom_api: PhantomData,
_phantom_item: PhantomData,
}
}
}

impl<SA, T> StorageMapperFromAddress<SA> for SingleValueMapper<SA, T, ManagedAddress<SA>>
where
SA: StorageMapperApi,
T: TopEncode + TopDecode,
{
#[inline]
fn new_from_address(address: ManagedAddress<SA>, base_key: StorageKey<SA>) -> Self {
SingleValueMapper {
address,
key: base_key,
Expand Down
Loading

0 comments on commit d88cc71

Please sign in to comment.