app-manager: support triggers
diff --git a/appmanager/manager.go b/appmanager/manager.go
new file mode 100644
index 0000000..e54e8e1
--- /dev/null
+++ b/appmanager/manager.go
@@ -0,0 +1,50 @@
+package appmanager
+
+import (
+ "encoding/gob"
+ "os"
+)
+
+type App struct {
+ Namespace string
+ Triggers *Triggers
+}
+
+// TODO(giolekva): add interface
+type Manager struct {
+ Apps map[string]App
+}
+
+func NewEmptyManager() *Manager {
+ return &Manager{make(map[string]App)}
+}
+
+func LoadManagerStateFromFile(path string) (*Manager, error) {
+ f, err := os.Open(path)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return NewEmptyManager(), nil
+ }
+ return nil, err
+ }
+ defer f.Close()
+ dec := gob.NewDecoder(f)
+ var m Manager
+ if err := dec.Decode(&m); err != nil {
+ return nil, err
+ }
+ return &m, nil
+}
+
+func StoreManagerStateToFile(m *Manager, path string) error {
+ f, err := os.Create(path)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
+ enc := gob.NewEncoder(f)
+ if err := enc.Encode(*m); err != nil {
+ return err
+ }
+ return nil
+}