tpgtools/ignored_handwritten/state_setters.go (48 lines of code) (raw):
package google
import (
"fmt"
"time"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/id"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
// setStateForCollapsedObject sets nested fields as top-level state values for an object that should be collapsed.
// It takes in the flattened value of the object (i.e. converted from *obj.FooBar to []interface{}{map[string]interface{}}).
// Example Usage:
// err := setStateForFieldsInFlattenedObject(d, flattenMyTopLevelNestedObject(obj.MyTopLevelNestedObject))
func setStateForCollapsedObject(d *schema.ResourceData, v interface{}) error {
if v == nil {
return nil
}
ls, ok := v.([]interface{})
if !ok {
return fmt.Errorf("expected nested object value to be flattened to []interface{}")
}
if len(ls) == 0 {
return nil
}
nestedObj := ls[0].(map[string]interface{})
for k, kv := range nestedObj {
if err := d.Set(k, kv); err != nil {
return fmt.Errorf("error setting %s in state: %s", k, err)
}
}
return nil
}
func setStateForTime(d *schema.ResourceData, v time.Time, name string) error {
if !v.IsZero() {
return d.Set(name, fmt.Sprintf(v.Format(time.RFC3339)))
} else {
return d.Set(name, nil)
}
}
func generateIfNotSet(d *schema.ResourceData, field, prefix string) (string, error) {
if _, ok := d.GetOkExists(field); !ok {
if prefix == "" {
prefix = "tf-generated-"
}
v := id.PrefixedUniqueId(prefix)
if len(v) > 30 {
v = v[:30]
}
if err := d.Set(field, v); err != nil {
return "", err
}
}
return d.Get(field).(string), nil
}