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