mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-06 12:19:37 -06:00
Bumps [github.com/gookit/config/v2](https://github.com/gookit/config) from 2.1.8 to 2.2.2. - [Release notes](https://github.com/gookit/config/releases) - [Commits](https://github.com/gookit/config/compare/v2.1.8...v2.2.2) --- updated-dependencies: - dependency-name: github.com/gookit/config/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
163 lines
3.8 KiB
Go
163 lines
3.8 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/gookit/goutil/jsonutil"
|
|
)
|
|
|
|
// Driver interface.
|
|
// TODO refactor: rename GetDecoder() to Decode(), rename GetEncoder() to Encode()
|
|
type Driver interface {
|
|
Name() string
|
|
Aliases() []string // alias format names, use for resolve format name
|
|
GetDecoder() Decoder
|
|
GetEncoder() Encoder
|
|
}
|
|
|
|
// DriverV2 interface.
|
|
type DriverV2 interface {
|
|
Name() string // driver name, also is format name.
|
|
Aliases() []string // alias format names, use for resolve format name
|
|
Decode(blob []byte, v any) (err error)
|
|
Encode(v any) (out []byte, err error)
|
|
}
|
|
|
|
// Decoder for decode yml,json,toml format content
|
|
type Decoder func(blob []byte, v any) (err error)
|
|
|
|
// Encoder for decode yml,json,toml format content
|
|
type Encoder func(v any) (out []byte, err error)
|
|
|
|
// StdDriver struct
|
|
type StdDriver struct {
|
|
name string
|
|
aliases []string
|
|
decoder Decoder
|
|
encoder Encoder
|
|
}
|
|
|
|
// NewDriver new std driver instance.
|
|
func NewDriver(name string, dec Decoder, enc Encoder) *StdDriver {
|
|
return &StdDriver{name: name, decoder: dec, encoder: enc}
|
|
}
|
|
|
|
// WithAliases set aliases for driver
|
|
func (d *StdDriver) WithAliases(aliases ...string) *StdDriver {
|
|
d.aliases = aliases
|
|
return d
|
|
}
|
|
|
|
// WithAlias add alias for driver
|
|
func (d *StdDriver) WithAlias(alias string) *StdDriver {
|
|
d.aliases = append(d.aliases, alias)
|
|
return d
|
|
}
|
|
|
|
// Name of driver
|
|
func (d *StdDriver) Name() string { return d.name }
|
|
|
|
// Aliases format name of driver
|
|
func (d *StdDriver) Aliases() []string {
|
|
return d.aliases
|
|
}
|
|
|
|
// Decode of driver
|
|
func (d *StdDriver) Decode(blob []byte, v any) (err error) {
|
|
return d.decoder(blob, v)
|
|
}
|
|
|
|
// Encode of driver
|
|
func (d *StdDriver) Encode(v any) ([]byte, error) {
|
|
return d.encoder(v)
|
|
}
|
|
|
|
// GetDecoder of driver
|
|
func (d *StdDriver) GetDecoder() Decoder {
|
|
return d.decoder
|
|
}
|
|
|
|
// GetEncoder of driver
|
|
func (d *StdDriver) GetEncoder() Encoder {
|
|
return d.encoder
|
|
}
|
|
|
|
/*************************************************************
|
|
* JSON driver
|
|
*************************************************************/
|
|
|
|
var (
|
|
// JSONAllowComments support write comments on json file.
|
|
JSONAllowComments = true
|
|
|
|
// JSONMarshalIndent if not empty, will use json.MarshalIndent for encode data.
|
|
//
|
|
// Deprecated: please use JSONDriver.MarshalIndent
|
|
JSONMarshalIndent string
|
|
)
|
|
|
|
// JSONDecoder for json decode
|
|
var JSONDecoder Decoder = func(data []byte, v any) (err error) {
|
|
JSONDriver.ClearComments = JSONAllowComments
|
|
return JSONDriver.Decode(data, v)
|
|
}
|
|
|
|
// JSONEncoder for json encode
|
|
var JSONEncoder Encoder = func(v any) (out []byte, err error) {
|
|
JSONDriver.MarshalIndent = JSONMarshalIndent
|
|
return JSONDriver.Encode(v)
|
|
}
|
|
|
|
// JSONDriver instance fot json
|
|
var JSONDriver = &jsonDriver{
|
|
driverName: JSON,
|
|
ClearComments: JSONAllowComments,
|
|
MarshalIndent: JSONMarshalIndent,
|
|
}
|
|
|
|
// jsonDriver for json format content
|
|
type jsonDriver struct {
|
|
driverName string
|
|
// ClearComments before parse JSON string.
|
|
ClearComments bool
|
|
// MarshalIndent if not empty, will use json.MarshalIndent for encode data.
|
|
MarshalIndent string
|
|
}
|
|
|
|
// Name of the driver
|
|
func (d *jsonDriver) Name() string {
|
|
return d.driverName
|
|
}
|
|
|
|
// Aliases of the driver
|
|
func (d *jsonDriver) Aliases() []string {
|
|
return nil
|
|
}
|
|
|
|
// Decode for the driver
|
|
func (d *jsonDriver) Decode(data []byte, v any) error {
|
|
if d.ClearComments {
|
|
str := jsonutil.StripComments(string(data))
|
|
return json.Unmarshal([]byte(str), v)
|
|
}
|
|
return json.Unmarshal(data, v)
|
|
}
|
|
|
|
// GetDecoder for the driver
|
|
func (d *jsonDriver) GetDecoder() Decoder {
|
|
return d.Decode
|
|
}
|
|
|
|
// Encode for the driver
|
|
func (d *jsonDriver) Encode(v any) (out []byte, err error) {
|
|
if len(d.MarshalIndent) > 0 {
|
|
return json.MarshalIndent(v, "", d.MarshalIndent)
|
|
}
|
|
return json.Marshal(v)
|
|
}
|
|
|
|
// GetEncoder for the driver
|
|
func (d *jsonDriver) GetEncoder() Encoder {
|
|
return d.Encode
|
|
}
|