From bb45bfa737896c6f26ef4a816458bbfe508b8280 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Wed, 8 Feb 2017 11:50:39 +0100 Subject: feat context: Add types and loading functions --- context/context.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 context/context.go (limited to 'context/context.go') diff --git a/context/context.go b/context/context.go new file mode 100644 index 000000000000..e842feae1dc5 --- /dev/null +++ b/context/context.go @@ -0,0 +1,51 @@ +package context + +import ( + "encoding/json" + "github.com/polydawn/meep" + "io/ioutil" + "path" +) + +type ResourceSet struct { + Name string `json:"name"` + Values map[string]interface{} `json:"values"` +} + +type Context struct { + Name string `json:"context"` + Global map[string]interface{} `json:"global"` + ResourceSets []ResourceSet `json:"include"` + BaseDir string +} + +type ContextLoadingError struct { + meep.AllTraits + Filename string +} + +// Attempt to load and deserialise a Context from the specified file. +func LoadContextFromFile(filename string) (*Context, error) { + file, err := ioutil.ReadFile(filename) + + if err != nil { + return nil, meep.New( + &ContextLoadingError{Filename: filename}, + meep.Cause(err), + ) + } + + var c Context + + err = json.Unmarshal(file, &c) + if err != nil { + return nil, meep.New( + &ContextLoadingError{Filename: filename}, + meep.Cause(err), + ) + } + + c.BaseDir = path.Dir(filename) + + return &c, nil +} -- cgit 1.4.1