TopLevelStorage dependency injection #120
Open
+126
−31
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
High Level
#[borrow]
attributes tottaly (currently borrow attributes left for compatibility reason).TopLevelStorage
.Low Level
TopLevelStorage
got two additional functions to retrieve inner laying type of contract by generic param<S>
.StorageLevel
exposes two similar functions that just returns optional reference to the type<S>
.StorageLevel
implemented by every type that can exist in contract storage same asStorageType
. Simple storage types implementation returns justNone
since we're not expecting them to store inherited contract.StorageLevel
withinsolidity_storage
macro. Implementation checks that type of self isT
if so reference will be returned (unsafe reference cast). Since every storage type implementsStorageLevel
trait then we can call same functions in every field recursively.BorrowMut
constraint from the router trait and use our newly created functions to retrieve references to inner contracts. This example with inheritance of three is working now.#[borrow]
attributes will generateBorrow
andBorrowMut
bindings still but basically there is no need in them.Compatibility
'static
lifetime. (example)Checklist