blob: fa12c33fdd92dbb2980cb09584932e3ea0397d13 [file] [log] [blame]
giolekva6d464592020-05-13 20:12:18 +04001package appmanager
2
3import (
4 "encoding/gob"
5 "os"
6)
7
8type App struct {
giolekvab1f19ee2020-05-16 11:31:20 +04009 Name string
giolekva6d464592020-05-13 20:12:18 +040010 Namespace string
giolekvab1f19ee2020-05-16 11:31:20 +040011 Triggers Triggers
12 Actions Actions
giolekva6d464592020-05-13 20:12:18 +040013}
14
15// TODO(giolekva): add interface
16type Manager struct {
17 Apps map[string]App
18}
19
20func NewEmptyManager() *Manager {
21 return &Manager{make(map[string]App)}
22}
23
24func LoadManagerStateFromFile(path string) (*Manager, error) {
25 f, err := os.Open(path)
26 if err != nil {
27 if os.IsNotExist(err) {
28 return NewEmptyManager(), nil
29 }
30 return nil, err
31 }
32 defer f.Close()
33 dec := gob.NewDecoder(f)
34 var m Manager
35 if err := dec.Decode(&m); err != nil {
36 return nil, err
37 }
38 return &m, nil
39}
40
41func StoreManagerStateToFile(m *Manager, path string) error {
42 f, err := os.Create(path)
43 if err != nil {
44 return err
45 }
46 defer f.Close()
47 enc := gob.NewEncoder(f)
48 if err := enc.Encode(*m); err != nil {
49 return err
50 }
51 return nil
52}