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  }