2014-04-12 05:18:18 +00:00
// Beego (http://beego.me/)
2014-07-03 15:40:21 +00:00
//
2014-04-12 05:18:18 +00:00
// @description beego is an open-source, high-performance web framework for the Go programming language.
2014-07-03 15:40:21 +00:00
//
2014-04-12 05:18:18 +00:00
// @link http://github.com/astaxie/beego for the canonical source repository
2014-07-03 15:40:21 +00:00
//
2014-04-12 05:18:18 +00:00
// @license http://github.com/astaxie/beego/blob/master/LICENSE
2014-07-03 15:40:21 +00:00
//
2014-04-12 05:18:18 +00:00
// @authors astaxie
2013-08-21 16:07:33 +00:00
package config
import (
"fmt"
)
2013-12-24 13:57:33 +00:00
// ConfigContainer defines how to get and set value from configuration raw data.
2013-08-21 16:07:33 +00:00
type ConfigContainer interface {
2014-01-15 09:19:03 +00:00
Set ( key , val string ) error // support section::key type in given key when using ini type.
String ( key string ) string // support section::key type in key string when using ini and json type; Int,Int64,Bool,Float,DIY are same.
Strings ( key string ) [ ] string //get string slice
2013-08-21 16:07:33 +00:00
Int ( key string ) ( int , error )
Int64 ( key string ) ( int64 , error )
Bool ( key string ) ( bool , error )
Float ( key string ) ( float64 , error )
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
DefaultString ( key string , defaultval string ) string // support section::key type in key string when using ini and json type; Int,Int64,Bool,Float,DIY are same.
DefaultStrings ( key string , defaultval [ ] string ) [ ] string //get string slice
DefaultInt ( key string , defaultval int ) int
DefaultInt64 ( key string , defaultval int64 ) int64
DefaultBool ( key string , defaultval bool ) bool
DefaultFloat ( key string , defaultval float64 ) float64
2013-08-21 16:07:33 +00:00
DIY ( key string ) ( interface { } , error )
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
GetSection ( section string ) ( map [ string ] string , error )
SaveConfigFile ( filename string ) error
2013-08-21 16:07:33 +00:00
}
2013-12-24 13:57:33 +00:00
// Config is the adapter interface for parsing config file to get raw data to ConfigContainer.
2013-08-21 16:07:33 +00:00
type Config interface {
Parse ( key string ) ( ConfigContainer , error )
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
ParseData ( data [ ] byte ) ( ConfigContainer , error )
2013-08-21 16:07:33 +00:00
}
var adapters = make ( map [ string ] Config )
// Register makes a config adapter available by the adapter name.
// If Register is called twice with the same name or if driver is nil,
// it panics.
func Register ( name string , adapter Config ) {
if adapter == nil {
panic ( "config: Register adapter is nil" )
}
2014-07-12 08:03:14 +00:00
if _ , ok := adapters [ name ] ; ok {
2013-08-21 16:07:33 +00:00
panic ( "config: Register called twice for adapter " + name )
}
adapters [ name ] = adapter
}
2013-12-24 13:57:33 +00:00
// adapterName is ini/json/xml/yaml.
// filename is the config file path.
2013-08-21 16:07:33 +00:00
func NewConfig ( adapterName , fileaname string ) ( ConfigContainer , error ) {
adapter , ok := adapters [ adapterName ]
if ! ok {
return nil , fmt . Errorf ( "config: unknown adaptername %q (forgotten import?)" , adapterName )
}
return adapter . Parse ( fileaname )
}
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
// adapterName is ini/json/xml/yaml.
// data is the config data.
func NewConfigData ( adapterName string , data [ ] byte ) ( ConfigContainer , error ) {
adapter , ok := adapters [ adapterName ]
if ! ok {
return nil , fmt . Errorf ( "config: unknown adaptername %q (forgotten import?)" , adapterName )
}
return adapter . ParseData ( data )
}