services/omnirpc/config/config.go
package config
import (
"fmt"
"github.com/davecgh/go-spew/spew"
"github.com/jftuga/ellipsis"
"gopkg.in/yaml.v3"
)
// Config holds the config for the chain.
type Config struct {
// chainID -> chainConfig
Chains map[uint32]ChainConfig `yaml:"chains"`
// Port is the port
Port uint16 `yaml:"port,omitempty"`
// RefreshInterval is the refresh interval of rpc latency
// expressed in seconds
RefreshInterval int `yaml:"refresh_interval,omitempty"`
// ClientType is the client type to use
ClientType string `yaml:"client_type,omitempty"`
}
// ChainConfig is the config for a single chain.
type ChainConfig struct {
// RPCS is a list of rpcs to use
RPCs []string `yaml:"rpcs"`
// Checks is how many rpcs must return the same result for it to be used. This does not apply to height/status based methods
Checks uint16 `yaml:"confirmations,omitempty"`
}
// UnmarshallConfig unmarshalls a config.
func UnmarshallConfig(input []byte) (cfg Config, err error) {
err = yaml.Unmarshal(input, &cfg)
if err != nil {
return Config{}, fmt.Errorf("could not unmarshall config %s: %w", ellipsis.Shorten(string(input), 30), err)
}
return cfg, nil
}
// Marshall a config to yaml.
func (c Config) Marshall() ([]byte, error) {
output, err := yaml.Marshal(c)
if err != nil {
return nil, fmt.Errorf("could not unmarshall config %s: %w", ellipsis.Shorten(spew.Sdump(c), 20), err)
}
return output, nil
}