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 }