aicra/internal/config/public.go

76 lines
1.4 KiB
Go
Raw Normal View History

2018-05-20 08:46:39 +00:00
package config
2018-05-19 13:17:21 +00:00
import (
"encoding/json"
"os"
"strings"
2018-05-19 13:17:21 +00:00
)
2018-05-20 08:46:39 +00:00
// Load builds a structured representation of the
2018-05-19 13:17:21 +00:00
// configuration file located at @path
// The struct definition checks for most format errors
2018-05-20 08:46:39 +00:00
func Load(path string) (*Controller, error) {
2018-05-19 13:17:21 +00:00
/* (1) Extract data
---------------------------------------------------------*/
/* (1) Open file */
var configFile, err = os.Open(path)
if err != nil {
return nil, err
}
defer configFile.Close()
/* (2) Init receiving dataset */
2018-05-20 08:46:39 +00:00
receiver := &Controller{}
2018-05-19 13:17:21 +00:00
/* (3) Decode JSON */
decoder := json.NewDecoder(configFile)
err = decoder.Decode(receiver)
if err != nil {
return nil, err
}
/* (4) Format result */
err = receiver.format("/")
if err != nil {
return nil, err
}
2018-05-19 13:17:21 +00:00
return receiver, nil
2018-05-20 08:46:39 +00:00
2018-05-19 13:17:21 +00:00
}
// IsMethodAvailable returns whether a given
// method is available (case insensitive)
func IsMethodAvailable(method string) bool {
for _, m := range AvailableMethods {
if strings.ToUpper(method) == m {
return true
}
}
return false
}
// HasMethod returns whether the controller has a given
// method (case insensitive)
func (c Controller) HasMethod(method string) bool {
method = strings.ToUpper(method)
switch method {
case "GET":
return c.GET != nil
case "POST":
return c.POST != nil
case "PUT":
return c.PUT != nil
case "DELETE":
return c.DELETE != nil
default:
return false
}
}