2014-08-18 08:41:43 +00:00
// Copyright 2014 beego Author. All Rights Reserved.
2014-07-03 15:40:21 +00:00
//
2014-08-18 08:41:43 +00:00
// Licensed 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
2014-07-03 15:40:21 +00:00
//
2014-08-18 08:41:43 +00:00
// http://www.apache.org/licenses/LICENSE-2.0
2014-07-03 15:40:21 +00:00
//
2014-08-18 08:41:43 +00:00
// 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.
// Usage:
// import(
// "github.com/astaxie/beego/config"
// )
//
// cnf, err := config.NewConfig("ini", "config.conf")
//
// cnf APIS:
//
// cnf.Set(key, val string) error
// cnf.String(key string) string
// cnf.Strings(key string) []string
// cnf.Int(key string) (int, error)
// cnf.Int64(key string) (int64, error)
// cnf.Bool(key string) (bool, error)
// cnf.Float(key string) (float64, error)
// cnf.DefaultString(key string, defaultval string) string
// cnf.DefaultStrings(key string, defaultval []string) []string
// cnf.DefaultInt(key string, defaultval int) int
// cnf.DefaultInt64(key string, defaultval int64) int64
// cnf.DefaultBool(key string, defaultval bool) bool
// cnf.DefaultFloat(key string, defaultval float64) float64
// cnf.DIY(key string) (interface{}, error)
// cnf.GetSection(section string) (map[string]string, error)
// cnf.SaveConfigFile(filename string) error
2014-07-03 15:40:21 +00:00
//
2014-08-18 08:41:43 +00:00
// more docs http://beego.me/docs/module/config.md
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.
2015-08-26 08:57:28 +00:00
func NewConfig ( adapterName , filename string ) ( ConfigContainer , error ) {
2013-08-21 16:07:33 +00:00
adapter , ok := adapters [ adapterName ]
if ! ok {
return nil , fmt . Errorf ( "config: unknown adaptername %q (forgotten import?)" , adapterName )
}
2015-08-26 08:57:28 +00:00
return adapter . Parse ( filename )
2013-08-21 16:07:33 +00:00
}
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 )
}