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 }