The entire interface to sub-storage depends on client and at. alternatively, sub-storage could create its own internal client. The user would have to call into sub_storage::init_client(URI).await once and henceforth it would be used.
I am not yet sure if this is a correct api design as well, but it is indeed easier.
This would allow us to macro-ify the crate as well, such as:
let a: Type = sub_storage::value!("ModuleName", "StorageName").await;
let b: Type = sub_storage::map!("ModuleName", "StorageName", key).await;
// optionally
let b: Type = sub_storage::map_at!("ModuleName", "StorageName", key, hash).await;
Which is not really pretty now given that we have to pass in a client inwards as well.
The entire interface to sub-storage depends on
client
andat
. alternatively, sub-storage could create its own internal client. The user would have to call intosub_storage::init_client(URI).await
once and henceforth it would be used.I am not yet sure if this is a correct api design as well, but it is indeed easier.
This would allow us to macro-ify the crate as well, such as:
Which is not really pretty now given that we have to pass in a client inwards as well.