summaryrefslogtreecommitdiff
path: root/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'config.go')
-rw-r--r--config.go131
1 files changed, 131 insertions, 0 deletions
diff --git a/config.go b/config.go
new file mode 100644
index 0000000..192d60d
--- /dev/null
+++ b/config.go
@@ -0,0 +1,131 @@
+package virtbuf
+
+// functions to import and export the protobuf
+// data to and from config files
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+
+ "google.golang.org/protobuf/encoding/protojson"
+ "google.golang.org/protobuf/encoding/prototext"
+)
+
+func WriteConfig(d *Droplets, h *Hypervisors, e *Events) {
+ d.WriteConfigJSON()
+ d.WriteConfigTEXT()
+
+ e.WriteConfigJSON()
+ e.WriteConfigTEXT()
+}
+
+// export as json
+func (e *Events) WriteConfigJSON() {
+ fullname := filepath.Join(os.Getenv("VIRTIGO_HOME"), "events.json")
+ cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE, 0666)
+ defer cfgfile.Close()
+ if err != nil {
+ fmt.Println("open config file :", err)
+ return
+ }
+ text := e.FormatJSON()
+ fmt.Fprintln(cfgfile, text)
+ fmt.Println("Write:", fullname, "OK")
+}
+
+// export as prototext
+func (e *Events) WriteConfigTEXT() {
+ fullname := filepath.Join(os.Getenv("VIRTIGO_HOME"), "events.text")
+ cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE, 0666)
+ defer cfgfile.Close()
+ if err != nil {
+ fmt.Println("open config file :", err)
+ return
+ }
+ text := e.FormatTEXT()
+ fmt.Fprintln(cfgfile, text)
+ fmt.Println("Write:", fullname, "OK")
+}
+
+// export as json
+func (d *Droplets) WriteConfigJSON() {
+ fullname := filepath.Join(os.Getenv("VIRTIGO_HOME"), "droplets.json")
+ cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE, 0666)
+ defer cfgfile.Close()
+ if err != nil {
+ fmt.Println("open config file :", err)
+ return
+ }
+ text := d.FormatJSON()
+ fmt.Fprintln(cfgfile, text)
+ fmt.Println("Write:", fullname, "OK")
+}
+
+// export as prototext
+func (d *Droplets) WriteConfigTEXT() {
+ fullname := filepath.Join(os.Getenv("VIRTIGO_HOME"), "droplets.text")
+ cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE, 0666)
+ defer cfgfile.Close()
+ if err != nil {
+ fmt.Println("open config file :", err)
+ return
+ }
+ text := d.FormatTEXT()
+ fmt.Fprintln(cfgfile, text)
+ fmt.Println("Write:", fullname, "OK")
+}
+
+// human readable JSON
+func (c *Cluster) FormatJSON() string {
+ return protojson.Format(c)
+}
+
+func (d *Droplets) FormatJSON() string {
+ return protojson.Format(d)
+}
+
+func (e *Events) FormatJSON() string {
+ return protojson.Format(e)
+}
+
+// apparently this isn't supposed to be used?
+// https://protobuf.dev/reference/go/faq/#unstable-text
+// this is a shame because this is much nicer output than JSON Format()
+func (c *Cluster) FormatTEXT() string {
+ return prototext.Format(c)
+}
+
+func (d *Droplets) FormatTEXT() string {
+ return prototext.Format(d)
+}
+
+func (e *Events) FormatTEXT() string {
+ return prototext.Format(e)
+}
+
+// marshal
+func (c *Cluster) MarshalJSON() ([]byte, error) {
+ return protojson.Marshal(c)
+}
+
+func (d *Droplets) MarshalJSON() ([]byte, error) {
+ return protojson.Marshal(d)
+}
+
+func (e *Events) MarshalJSON() ([]byte, error) {
+ return protojson.Marshal(e)
+}
+
+// unmarshal
+func (c *Cluster) UnmarshalJSON(data []byte) error {
+ return protojson.Unmarshal(data, c)
+}
+
+func (d *Droplets) UnmarshalJSON(data []byte) error {
+ return protojson.Unmarshal(data, d)
+}
+
+func (e *Events) UnmarshalJSON(data []byte) error {
+ return protojson.Unmarshal(data, e)
+}