JSON config reader | error types

This commit is contained in:
Adrien Marquès 2018-05-19 15:17:21 +02:00
parent 015fe53908
commit 1aa64072b1
3 changed files with 108 additions and 0 deletions

33
config.go Normal file
View File

@ -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
}

48
errors.go Normal file
View File

@ -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)
}

27
types.go Normal file
View File

@ -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:"/"`
}