github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_parse_int.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  	"strconv"
    10  
    11  	"github.com/GuanceCloud/platypus/pkg/ast"
    12  	"github.com/GuanceCloud/platypus/pkg/engine/runtime"
    13  	"github.com/GuanceCloud/platypus/pkg/errchain"
    14  )
    15  
    16  func ParseIntChecking(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError {
    17  	if err := normalizeFuncArgsDeprecated(funcExpr, []string{
    18  		"val", "base",
    19  	}, 2); err != nil {
    20  		return runtime.NewRunError(ctx, err.Error(), funcExpr.NamePos)
    21  	}
    22  
    23  	return nil
    24  }
    25  
    26  func ParseInt(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError {
    27  	val, _, err := runtime.RunStmt(ctx, funcExpr.Param[0])
    28  	if err != nil {
    29  		return err
    30  	}
    31  
    32  	if val == nil {
    33  		ctx.Regs.ReturnAppend(int64(0), ast.Int)
    34  		return nil
    35  	}
    36  
    37  	valStr, ok := val.(string)
    38  	if !ok {
    39  		ctx.Regs.ReturnAppend(int64(0), ast.Int)
    40  		return nil
    41  	}
    42  
    43  	base, _, err := runtime.RunStmt(ctx, funcExpr.Param[1])
    44  	if err != nil {
    45  		return err
    46  	}
    47  
    48  	if base == nil {
    49  		ctx.Regs.ReturnAppend(int64(0), ast.Int)
    50  		return nil
    51  	}
    52  
    53  	baseInt, ok := base.(int64)
    54  	if !ok {
    55  		ctx.Regs.ReturnAppend(int64(0), ast.Int)
    56  		return nil
    57  	}
    58  
    59  	v, _ := strconv.ParseInt(valStr, int(baseInt), 64)
    60  	ctx.Regs.ReturnAppend(v, ast.Int)
    61  	return nil
    62  }
    63  
    64  func FormatIntChecking(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError {
    65  	if err := normalizeFuncArgsDeprecated(funcExpr, []string{
    66  		"val", "base",
    67  	}, 2); err != nil {
    68  		return runtime.NewRunError(ctx, err.Error(), funcExpr.NamePos)
    69  	}
    70  
    71  	return nil
    72  }
    73  
    74  func FormatInt(ctx *runtime.Task, funcExpr *ast.CallExpr) *errchain.PlError {
    75  	val, _, err := runtime.RunStmt(ctx, funcExpr.Param[0])
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	if val == nil {
    81  		ctx.Regs.ReturnAppend("", ast.Int)
    82  		return nil
    83  	}
    84  
    85  	valStr, ok := val.(int64)
    86  	if !ok {
    87  		ctx.Regs.ReturnAppend("", ast.Int)
    88  		return nil
    89  	}
    90  
    91  	base, _, err := runtime.RunStmt(ctx, funcExpr.Param[1])
    92  	if err != nil {
    93  		return err
    94  	}
    95  
    96  	if base == nil {
    97  		ctx.Regs.ReturnAppend("", ast.Int)
    98  		return nil
    99  	}
   100  
   101  	baseInt, ok := base.(int64)
   102  	if !ok {
   103  		ctx.Regs.ReturnAppend("", ast.Int)
   104  		return nil
   105  	}
   106  
   107  	v := strconv.FormatInt(valStr, int(baseInt))
   108  	ctx.Regs.ReturnAppend(v, ast.String)
   109  	return nil
   110  }