blob: e09dd76db15ee0ffb538468f014ea1235daf8bdb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package config
import (
"strings"
"time"
"github.com/astaxie/beego"
"github.com/go-chassis/go-archaius"
"github.com/iancoleman/strcase"
)
func newOptions(key string, opts []Option) *Options {
options := NewOptions(opts...)
key = strings.ReplaceAll(key, ".", "_")
if options.ENV == "" {
options.ENV = strcase.ToScreamingSnake(key)
}
if options.Standby == "" {
options.Standby = strcase.ToSnake(key)
}
return options
}
// GetString return the string type value by specified key
func GetString(key, def string, opts ...Option) string {
options := newOptions(key, opts)
if archaius.Exist(options.ENV) {
return strings.TrimSpace(archaius.GetString(options.ENV, def))
}
if archaius.Exist(key) {
return strings.TrimSpace(archaius.GetString(key, def))
}
return strings.TrimSpace(beego.AppConfig.DefaultString(options.Standby, def))
}
// GetBool return the boolean type value by specified key
func GetBool(key string, def bool, opts ...Option) bool {
options := newOptions(key, opts)
if archaius.Exist(options.ENV) {
return archaius.GetBool(options.ENV, def)
}
if archaius.Exist(key) {
return archaius.GetBool(key, def)
}
return beego.AppConfig.DefaultBool(options.Standby, def)
}
// GetInt return the int type value by specified key
func GetInt(key string, def int, opts ...Option) int {
options := newOptions(key, opts)
if archaius.Exist(options.ENV) {
return archaius.GetInt(options.ENV, def)
}
if archaius.Exist(key) {
return archaius.GetInt(key, def)
}
if archaius.Exist(options.Standby) {
return archaius.GetInt(options.Standby, def)
}
return beego.AppConfig.DefaultInt(options.Standby, def)
}
// GetInt64 return the int64 type value by specified key
func GetInt64(key string, def int64, opts ...Option) int64 {
options := newOptions(key, opts)
if archaius.Exist(options.ENV) {
return archaius.GetInt64(options.ENV, def)
}
if archaius.Exist(key) {
return archaius.GetInt64(key, def)
}
return beego.AppConfig.DefaultInt64(options.Standby, def)
}
// GetDuration return the time.Duration type value by specified key
func GetDuration(key string, def time.Duration, opts ...Option) time.Duration {
str := strings.TrimSpace(GetString(key, "", opts...))
if str == "" {
return def
}
d, err := time.ParseDuration(str)
if err != nil {
return def
}
return d
}