github.com/jfrog/jfrog-cli-platform-services@v1.2.0/commands/cmd_input_reader.go (about)

     1  package commands
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"fmt"
     7  	"os"
     8  	"strings"
     9  
    10  	"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
    11  )
    12  
    13  type cmdInputReader struct {
    14  	ctx *components.Context
    15  }
    16  
    17  func (c *cmdInputReader) readData() (map[string]any, error) {
    18  	if len(c.ctx.Arguments) == 0 {
    19  		return nil, fmt.Errorf("missing json payload argument")
    20  	}
    21  
    22  	// The input should always be the last argument
    23  	jsonPayload := c.ctx.Arguments[len(c.ctx.Arguments)-1]
    24  
    25  	if jsonPayload == "-" {
    26  		return c.readDataFromStdin()
    27  	}
    28  
    29  	if strings.HasPrefix(jsonPayload, "@") {
    30  		return c.readDataFromFile(jsonPayload[1:])
    31  	}
    32  
    33  	return c.unmarshalData([]byte(jsonPayload))
    34  }
    35  
    36  func (c *cmdInputReader) readDataFromStdin() (map[string]any, error) {
    37  	data := map[string]any{}
    38  
    39  	decoder := json.NewDecoder(cliIn)
    40  
    41  	err := decoder.Decode(&data)
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  
    46  	return data, err
    47  }
    48  
    49  func (c *cmdInputReader) readDataFromFile(filePath string) (map[string]any, error) {
    50  	if filePath == "" {
    51  		return nil, errors.New("missing file path")
    52  	}
    53  
    54  	dataBytes, err := os.ReadFile(filePath)
    55  	if err != nil {
    56  		return nil, err
    57  	}
    58  
    59  	return c.unmarshalData(dataBytes)
    60  }
    61  
    62  func (c *cmdInputReader) unmarshalData(dataBytes []byte) (map[string]any, error) {
    63  	data := map[string]any{}
    64  
    65  	err := json.Unmarshal(dataBytes, &data)
    66  	if err != nil {
    67  		return nil, fmt.Errorf("invalid json payload: %+v", err)
    68  	}
    69  
    70  	return data, nil
    71  }