This is an automated email from the ASF dual-hosted git repository. ccollins pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-newtmgr.git
The following commit(s) were added to refs/heads/master by this push: new a6d89ab res: `-j` option to specify payload as JSON a6d89ab is described below commit a6d89abeb97759484d823ddd23640e1afe14b8c8 Author: Christopher Collins <ccoll...@apache.org> AuthorDate: Wed May 29 17:23:10 2019 -0700 res: `-j` option to specify payload as JSON Before this commit, the `res` command accepted a payload in the form of `k=v` pairs, e.g., newtmgr res put /my/res a=start dur=1 This commit adds a new option to the `res` command: `-j`. When this option is specified, the CoAP message body is expressed as a JSON string, e.g., newtmgr res -j put /my/res '{"a":"start","dur":1}' This allows for more complex payloads, and it removes ambiguity about what data types are used. --- newtmgr/cli/res.go | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/newtmgr/cli/res.go b/newtmgr/cli/res.go index 1a95bb7..9131fcd 100644 --- a/newtmgr/cli/res.go +++ b/newtmgr/cli/res.go @@ -36,6 +36,7 @@ import ( ) var details bool +var resJson bool func indent(s string, numSpaces int) string { b := make([]byte, numSpaces) @@ -220,7 +221,7 @@ func resGetCmd(cmd *cobra.Command, args []string) { } } -func parsePutPostMap(args []string) ([]byte, error) { +func parsePayloadMap(args []string) ([]byte, error) { if len(args) == 0 { return nil, nil } @@ -238,6 +239,33 @@ func parsePutPostMap(args []string) ([]byte, error) { return b, nil } +func parsePayloadJson(args []string) ([]byte, error) { + if len(args) == 0 { + return nil, nil + } + + var obj interface{} + + if err := json.Unmarshal([]byte(args[0]), &obj); err != nil { + return nil, util.ChildNewtError(err) + } + + b, err := nmxutil.EncodeCbor(obj) + if err != nil { + return nil, util.ChildNewtError(err) + } + + return b, nil +} + +func parsePayload(args []string) ([]byte, error) { + if resJson { + return parsePayloadJson(args) + } else { + return parsePayloadMap(args) + } +} + func resPutCmd(cmd *cobra.Command, args []string) { if len(args) == 0 { nmUsage(cmd, nil) @@ -248,7 +276,7 @@ func resPutCmd(cmd *cobra.Command, args []string) { nmUsage(nil, err) } - m, err := parsePutPostMap(args[1:]) + m, err := parsePayload(args[1:]) if err != nil { nmUsage(cmd, err) } @@ -289,7 +317,7 @@ func resPostCmd(cmd *cobra.Command, args []string) { nmUsage(nil, err) } - m, err := parsePutPostMap(args[1:]) + m, err := parsePayload(args[1:]) if err != nil { nmUsage(cmd, err) } @@ -378,6 +406,9 @@ func resCmd() *cobra.Command { }, } + resCmd.PersistentFlags().BoolVarP(&resJson, "json", "j", false, + "Accept a JSON string for the CoAP message body (not `k=v` pairs)") + resCmd.AddCommand(&cobra.Command{ Use: "get <path>", Short: "Send a CoAP GET request",