Skip to content

Commit

Permalink
Add register
Browse files Browse the repository at this point in the history
  • Loading branch information
Villaquiranm committed Apr 9, 2024
1 parent f12da74 commit f103cb7
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@ import (
"std"
"gno.land/p/demo/avl"
"gno.land/p/demo/ufmt"
"gno.land/r/demo/teritori/registry"
)

var profiles avl.Tree

func init() {
registry.Register("profiles_get", Get)
registry.Register("profiles_types", SupportedTypes)
}

func myCallback(a, b string) { /* ... */ }

func Get(dataName string, addr std.Address) string {
if dataName != "profile"{
panic("invalid dataname")
Expand Down
27 changes: 27 additions & 0 deletions examples/gno.land/r/demo/teritori/registry/registry.gno
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package registry

import (
"gno.land/p/demo/avl"
"std"
)

var callbacks avl.Tree
type functionCB func(args ...interface{}) []interface{}

func Register(id string, callback functionCB){
_,exists:=callbacks.Get(id)
if exists{
panic("A callback already exists for the id")
}

callbacks.Set(id, callback)
}

func Exec(id string, args ...interface{}){
cb, ok:= callbacks.Get(id)
if !ok{
panic("Callback not found")
}
function := cb.(functionCB)
function(args)
}
22 changes: 22 additions & 0 deletions examples/gno.land/r/demo/teritori/registry/registry_test.gno
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package registry

import (
"std"
"testing"

"gno.land/p/demo/avl"
"gno.land/p/demo/testutils"
"strings"
)

func TestGetProfile(t *testing.T) {
user1 := testutils.TestAddress("user1")
std.TestSetOrigCaller(user1)
functionID:="SOMEID"
var cb functionCB = func(args ...interface{})[]interface{}{
//t.Errorf("dataType",dataType)
return nil
}
Register(functionID, cb)
Exec(functionID)
}
20 changes: 15 additions & 5 deletions examples/gno.land/r/demo/teritori/worx_aggregator/worx.gno
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package worx_aggregator

import(
"gno.land/p/demo/avl"
"gno.land/r/demo/teritori/registry"
"std"
)

//interface WorxDataProvider {
Expand All @@ -20,18 +22,21 @@ func Get(dataType string, addr std.Address) []any {
if len(dataProviders) == 0 {
panic("there is not dataprovider configured for that datatype")
}
for d := range dataProviders {
all = append(all, d.Get(dataType, addr)...)
for registerID := range dataProviders {
all = append(all, getFromRealm(registerID,dataType, addr)...)
}
return all
}


func RegisterDataProvider(dp WorxDataProvider) {
func RegisterDataProvider(registerRootID string) {
assertAdmin()
for supp := range dp.SupportedTypes() {
listRegisterID := registerRootID + "_types"
supportedTypes := registry.Exec(listRegisterID)
for supp := range supportedTypes {
suppStr:= supp.(string)
providers := dataTypeToDataProvider.Get(supp)
providers = append(providers, dp)
providers = append(providers, registerRootID)
dataTypeToDataProvider.set(supp, providers)
}
}
Expand All @@ -40,4 +45,9 @@ func assertAdmin(){
if (std.PrevRealm().Addr() != admin) {
panic("unathorized")
}
}

func getFromRealm(registerRootID string,dataType string, address std.Address) []any {
getRegisterID := registerRootID + "_get"
return registry.Exec(getRegisterID, dataType, address)
}

0 comments on commit f103cb7

Please sign in to comment.