github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/command/jsonformat/computed/renderers/string.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package renderers 5 6 import ( 7 "encoding/json" 8 "fmt" 9 "strings" 10 11 "github.com/terramate-io/tf/command/jsonformat/computed" 12 ) 13 14 type evaluatedString struct { 15 String string 16 Json interface{} 17 18 IsMultiline bool 19 IsNull bool 20 } 21 22 func evaluatePrimitiveString(value interface{}, opts computed.RenderHumanOpts) evaluatedString { 23 if value == nil { 24 return evaluatedString{ 25 String: opts.Colorize.Color("[dark_gray]null[reset]"), 26 IsNull: true, 27 } 28 } 29 30 str := value.(string) 31 32 if strings.HasPrefix(str, "{") || strings.HasPrefix(str, "[") { 33 var jv interface{} 34 if err := json.Unmarshal([]byte(str), &jv); err == nil { 35 return evaluatedString{ 36 String: str, 37 Json: jv, 38 } 39 } 40 } 41 42 if strings.Contains(str, "\n") { 43 return evaluatedString{ 44 String: strings.TrimSpace(str), 45 IsMultiline: true, 46 } 47 } 48 49 return evaluatedString{ 50 String: str, 51 } 52 } 53 54 func (e evaluatedString) RenderSimple() string { 55 if e.IsNull { 56 return e.String 57 } 58 return fmt.Sprintf("%q", e.String) 59 }