able to get product
This commit is contained in:
63
internal/common/config/ydb.go
Normal file
63
internal/common/config/ydb.go
Normal file
@ -0,0 +1,63 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
"git.loyso.art/frx/kurious/internal/common/errors"
|
||||
)
|
||||
|
||||
type YCAuth interface {
|
||||
isYCAuth()
|
||||
}
|
||||
|
||||
type YCAuthCAKeysFile struct{ Path string }
|
||||
|
||||
func (YCAuthCAKeysFile) isYCAuth() {}
|
||||
|
||||
type YCAuthIAMToken struct{ Token string }
|
||||
|
||||
func (YCAuthIAMToken) isYCAuth() {}
|
||||
|
||||
type YCAuthNone struct{}
|
||||
|
||||
func (YCAuthNone) isYCAuth() {}
|
||||
|
||||
type YDB struct {
|
||||
DSN string
|
||||
Auth YCAuth
|
||||
ShutdownDuration time.Duration
|
||||
}
|
||||
|
||||
func (ydb *YDB) UnmarshalJSON(data []byte) error {
|
||||
type ydbConfig struct {
|
||||
DSN string `json:"dsn"`
|
||||
CAKeysFile *string `json:"ca_keys_file_path"`
|
||||
StaticIAMToken *string `json:"static_iam_token"`
|
||||
ShutdownDuration Duration `json:"duration"`
|
||||
}
|
||||
|
||||
var imcfg ydbConfig
|
||||
err := json.Unmarshal(data, &imcfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ydb.DSN = imcfg.DSN
|
||||
ydb.ShutdownDuration = imcfg.ShutdownDuration.Std()
|
||||
if imcfg.CAKeysFile != nil && imcfg.StaticIAMToken != nil {
|
||||
return errors.NewValidationError("ca_keys_file_path", "could not be set together with static_iam_token field")
|
||||
} else if imcfg.CAKeysFile != nil {
|
||||
ydb.Auth = YCAuthCAKeysFile{
|
||||
Path: *imcfg.CAKeysFile,
|
||||
}
|
||||
} else if imcfg.StaticIAMToken != nil {
|
||||
ydb.Auth = YCAuthIAMToken{
|
||||
Token: *imcfg.StaticIAMToken,
|
||||
}
|
||||
} else {
|
||||
ydb.Auth = YCAuthNone{}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user