Add missing query() to QueryableStorageEntry3

QueryableStorageEntry2 has always had a single-key-tuple query(k1, k2)
alongside entries()/keys(), but QueryableStorageEntry3 only ever grew
entries()/keys() - nothing in the codebase needed a direct 3-key point
query until BridgeMultisigRuntimeApi's Assets.Approvals lookup. Added
query(k1, k2, k3), mirroring QueryableStorageEntry2's implementation
exactly.
This commit is contained in:
2026-07-14 07:59:24 -07:00
parent 40c867b22c
commit 4b454cc884
@@ -12,6 +12,9 @@ typealias QueryableStorageBinder3<K1, K2, K3, V> = (dynamicInstance: Any, key1:
interface QueryableStorageEntry3<I1, I2, I3, T : Any> {
context(StorageQueryContext)
suspend fun query(argument1: I1, argument2: I2, argument3: I3): T?
context(StorageQueryContext)
suspend fun entries(keys: List<Triple<I1, I2, I3>>): Map<Triple<I1, I2, I3>, T>
@@ -32,6 +35,16 @@ internal class RealQueryableStorageEntry3<I1, I2, I3, T : Any>(
private val key3FromInternalConverter: QueryableStorageKeyFromInternalBinder<I3>? = null,
) : QueryableStorageEntry3<I1, I2, I3, T> {
context(StorageQueryContext)
override suspend fun query(argument1: I1, argument2: I2, argument3: I3): T? {
return storageEntry.query(
convertKey1ToInternal(argument1),
convertKey2ToInternal(argument2),
convertKey3ToInternal(argument3),
binding = { decoded -> decoded?.let { binding(it, argument1, argument2, argument3) } }
)
}
context(StorageQueryContext)
override suspend fun entries(keys: List<Triple<I1, I2, I3>>): Map<Triple<I1, I2, I3>, T> {
return storageEntry.entries(