Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

state.gno

1.17 Kb · 62 lines
 1package router
 2
 3import (
 4	"chain"
 5	"errors"
 6
 7	"gno.land/p/gnoswap/store/v1"
 8	"gno.land/p/gnoswap/version_manager/v1"
 9)
10
11const domainPath = "gno.land/r/gnoswap/router"
12
13var (
14	currentAddress = chain.PackageAddress(domainPath)
15
16	kvStore store.KVStore
17
18	versionManager version_manager.VersionManager
19	implementation IRouter
20)
21
22func init() {
23	// Create a new KV store instance for this domain
24	kvStore = store.NewKVStore(currentAddress)
25
26	// Initialize the initializers map to store implementation registration functions
27	versionManager = version_manager.NewVersionManager(
28		domainPath,
29		kvStore,
30		initializeDomainStore,
31	)
32
33	implementation = nil
34}
35
36func initializeDomainStore(_ int, rlm realm, kvStore store.KVStore) any {
37	return NewRouterStore(kvStore)
38}
39
40func getImplementation() IRouter {
41	if implementation == nil {
42		panic("implementation is not initialized")
43	}
44
45	return implementation
46}
47
48func updateImplementation() error {
49	result := versionManager.GetCurrentImplementation()
50	if result == nil {
51		return errors.New("implementation is not initialized")
52	}
53
54	impl, ok := result.(IRouter)
55	if !ok {
56		return errors.New("impl is not an IRouter")
57	}
58
59	implementation = impl
60
61	return nil
62}