1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00
wtf/modules/digitalocean/droplet.go
Chris Cummer 07f4d3f524 WTF-986 Read DigitalOcean column configuration from settings
Signed-off-by: Chris Cummer <chriscummer@me.com>
2020-10-13 13:12:06 -07:00

105 lines
1.9 KiB
Go

package digitalocean
import (
"fmt"
"reflect"
"strings"
"github.com/digitalocean/godo"
)
const invalidColumn = "???"
// Droplet represents WTF's view of a DigitalOcean droplet
type Droplet struct {
godo.Droplet
Image Image
Region Region
}
// Image represents WTF's view of a DigitalOcean droplet image
type Image struct {
godo.Image
}
// Region represents WTF's view of a DigitalOcean region
type Region struct {
godo.Region
}
// NewDroplet creates and returns an instance of Droplet
func NewDroplet(doDroplet godo.Droplet) *Droplet {
droplet := &Droplet{
doDroplet,
Image{
*doDroplet.Image,
},
Region{
*doDroplet.Region,
},
}
return droplet
}
/* -------------------- Exported Functions -------------------- */
// ValueForColumn returns a string value for the given column
func (drop *Droplet) ValueForColumn(colName string) string {
r := reflect.ValueOf(drop)
f := reflect.Indirect(r).FieldByName(colName)
var strVal string
// Figure out if we should forward this property to a sub-object
// Lets us support "Region.Name" column definitions
split := strings.Split(colName, ".")
switch split[0] {
case "Image":
strVal = drop.Image.ValueForColumn(split[1])
case "Region":
strVal = drop.Region.ValueForColumn(split[1])
default:
if !f.IsValid() {
strVal = invalidColumn
} else {
strVal = fmt.Sprintf("%v", f)
}
}
return strVal
}
// ValueForColumn returns a string value for the given column
func (reg *Image) ValueForColumn(colName string) string {
r := reflect.ValueOf(reg)
f := reflect.Indirect(r).FieldByName(colName)
if !f.IsValid() {
return invalidColumn
}
strVal := fmt.Sprintf("%v", f)
return strVal
}
// ValueForColumn returns a string value for the given column
func (reg *Region) ValueForColumn(colName string) string {
r := reflect.ValueOf(reg)
f := reflect.Indirect(r).FieldByName(colName)
if !f.IsValid() {
return invalidColumn
}
strVal := fmt.Sprintf("%v", f)
return strVal
}