github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_strfmt.go (about)

     1  // Unless explicitly stated otherwise all files in this repository are licensed
     2  // under the MIT License.
     3  // This product includes software developed at Guance Cloud (https://www.guance.com/).
     4  // Copyright 2021-present Guance, Inc.
     5  
     6  package funcs
     7  
     8  import (
     9  	"fmt"
    10  
    11  	"github.com/GuanceCloud/cliutils/pipeline/ptinput"
    12  	"github.com/GuanceCloud/platypus/pkg/ast"
    13  	"github.com/GuanceCloud/platypus/pkg/engine/runtime"
    14  	"github.com/GuanceCloud/platypus/pkg/errchain"
    15  )
    16  
    17  func StrfmtChecking(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError {
    18  	if len(funcExpr.Param) < 2 {
    19  		return runtime.NewRunError(ctx, fmt.Sprintf(
    20  			"func `%s' expects more than 2 args", funcExpr.Name), funcExpr.NamePos)
    21  	}
    22  	if _, err := getKeyName(funcExpr.Param[0]); err != nil {
    23  		return runtime.NewRunError(ctx, err.Error(), funcExpr.Param[0].StartPos())
    24  	}
    25  	switch funcExpr.Param[1].NodeType { //nolint:exhaustive
    26  	case ast.TypeStringLiteral:
    27  	default:
    28  		return runtime.NewRunError(ctx, fmt.Sprintf("param fmt expects StringLiteral, got `%s'",
    29  			funcExpr.Param[1].NodeType), funcExpr.Param[1].StartPos())
    30  	}
    31  	return nil
    32  }
    33  
    34  func Strfmt(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError {
    35  	outdata := make([]interface{}, 0)
    36  
    37  	if len(funcExpr.Param) < 2 {
    38  		return runtime.NewRunError(ctx, fmt.Sprintf(
    39  			"func `%s' expected more than 2 args", funcExpr.Name), funcExpr.NamePos)
    40  	}
    41  
    42  	key, err := getKeyName(funcExpr.Param[0])
    43  	if err != nil {
    44  		return runtime.NewRunError(ctx, err.Error(), funcExpr.Param[0].StartPos())
    45  	}
    46  
    47  	var fmts string
    48  
    49  	switch funcExpr.Param[1].NodeType { //nolint:exhaustive
    50  	case ast.TypeStringLiteral:
    51  		fmts = funcExpr.Param[1].StringLiteral().Val
    52  	default:
    53  		return runtime.NewRunError(ctx, fmt.Sprintf(
    54  			"param fmt expect StringLiteral, got `%s'",
    55  			funcExpr.Param[1].NodeType), funcExpr.Param[1].StartPos())
    56  	}
    57  
    58  	for i := 2; i < len(funcExpr.Param); i++ {
    59  		v, _, _ := runtime.RunStmt(ctx, funcExpr.Param[i])
    60  		outdata = append(outdata, v)
    61  	}
    62  
    63  	strfmt := fmt.Sprintf(fmts, outdata...)
    64  	_ = addKey2PtWithVal(ctx.InData(), key, strfmt, ast.String, ptinput.KindPtDefault)
    65  
    66  	return nil
    67  }