JSON config reader | error types
This commit is contained in:
parent
015fe53908
commit
1aa64072b1
|
@ -0,0 +1,33 @@
|
||||||
|
package gfw
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Load builds a struct representation of the
|
||||||
|
// configuration file located at @path
|
||||||
|
// The structure checks for most format errors
|
||||||
|
func Load(path string) (*controller, error) {
|
||||||
|
|
||||||
|
/* (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 */
|
||||||
|
var receiver *controller
|
||||||
|
|
||||||
|
/* (3) Decode JSON */
|
||||||
|
decoder := json.NewDecoder(configFile)
|
||||||
|
err = decoder.Decode(receiver)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return receiver, nil
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package gfw
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Err struct {
|
||||||
|
Code int
|
||||||
|
Reason string
|
||||||
|
Arguments []interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
/* Base */
|
||||||
|
Success = &Err{0, "all right", nil}
|
||||||
|
Failure = &Err{1, "it failed", nil}
|
||||||
|
Unknown = &Err{-1, "", nil}
|
||||||
|
|
||||||
|
NoMatchFound = &Err{2, "no resource found", nil}
|
||||||
|
AlreadyExists = &Err{3, "resource already exists", nil}
|
||||||
|
|
||||||
|
Config = &Err{4, "configuration error", nil}
|
||||||
|
|
||||||
|
/* I/O */
|
||||||
|
UploadError = &Err{100, "upload failed", nil}
|
||||||
|
DownloadError = &Err{101, "download failed", nil}
|
||||||
|
MissingDownloadHeaders = &Err{102, "download headers are missing", nil}
|
||||||
|
MissingDownloadBody = &Err{103, "download body is missing", nil}
|
||||||
|
|
||||||
|
/* Controllers */
|
||||||
|
UnknownController = &Err{200, "unknown controller", nil}
|
||||||
|
UnknownMethod = &Err{201, "unknown method", nil}
|
||||||
|
UncallableController = &Err{202, "uncallable controller", nil}
|
||||||
|
UncallableMethod = &Err{203, "uncallable method", nil}
|
||||||
|
|
||||||
|
/* Permissions */
|
||||||
|
Permission = &Err{300, "permission error", nil}
|
||||||
|
Token = &Err{301, "token error", nil}
|
||||||
|
|
||||||
|
/* Check */
|
||||||
|
MissingParam = &Err{400, "missing parameter", nil}
|
||||||
|
InvalidParam = &Err{401, "invalid parameter", nil}
|
||||||
|
InvalidDefaultParam = &Err{402, "invalid default param", nil}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (e Err) Error() string {
|
||||||
|
return fmt.Sprintf("[%d] %s", e.Code, e.Reason)
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package gfw
|
||||||
|
|
||||||
|
/* (1) Configuration
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
|
||||||
|
type methodParameter struct {
|
||||||
|
Description string `json:"des"`
|
||||||
|
Type string `json:"typ"`
|
||||||
|
Rename *string `json:"ren"`
|
||||||
|
Optional *bool `json:"opt"`
|
||||||
|
Default *interface{} `json:"def"`
|
||||||
|
}
|
||||||
|
type method struct {
|
||||||
|
Description string `json:"des"`
|
||||||
|
Permission [][]string `json:"per"`
|
||||||
|
Parameters *map[string]methodParameter `json:"par"`
|
||||||
|
Options *map[string]interface{} `json:"opt"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type controller struct {
|
||||||
|
GET *method `json:"GET"`
|
||||||
|
POST *method `json:"POST"`
|
||||||
|
PUT *method `json:"PUT"`
|
||||||
|
DELETE *method `json:"DELETE"`
|
||||||
|
|
||||||
|
Children map[string]controller `json:"/"`
|
||||||
|
}
|
Loading…
Reference in New Issue