diff --git a/context/context.go b/context/context.go new file mode 100644 index 000000000..e842feae1 --- /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 +}