// CreateRequestMessage creates the request json message using the given input. // Note, the input *MUST* be a pointer to a valid backend type that this // client recognises. func (cs *ClientServerImpl) CreateRequestMessage(input interface{}) ([]byte, error) { msg := &RequestMessage{} recognizedTypes := cs.GetRecognizedTypes() for typeStr, typeVal := range recognizedTypes { if reflect.TypeOf(input) == reflect.PtrTo(typeVal) { msg.Type = typeStr break } } if msg.Type == "" { return nil, &UnrecognizedWSRequestType{reflect.TypeOf(input).String()} } messageData, err := jsonutil.BuildJSON(input) if err != nil { return nil, &NotMarshallableWSRequest{msg.Type, err} } msg.Message = json.RawMessage(messageData) send, err := json.Marshal(msg) if err != nil { return nil, &NotMarshallableWSRequest{msg.Type, err} } return send, nil }
func BenchmarkBuildJSON(b *testing.B) { for i := 0; i < b.N; i++ { for _, test := range jsonTests { jsonutil.BuildJSON(test.in) } } }
// Build builds a JSON payload for a JSON RPC request. func Build(req *aws.Request) { var buf []byte var err error if req.ParamsFilled() { buf, err = jsonutil.BuildJSON(req.Params) if err != nil { req.Error = apierr.New("Marshal", "failed encoding JSON RPC request", err) return } } else { buf = emptyJSON } if req.Service.TargetPrefix != "" || string(buf) != "{}" { req.SetBufferBody(buf) } if req.Service.TargetPrefix != "" { target := req.Service.TargetPrefix + "." + req.Operation.Name req.HTTPRequest.Header.Add("X-Amz-Target", target) } if req.Service.JSONVersion != "" { jsonVersion := req.Service.JSONVersion req.HTTPRequest.Header.Add("Content-Type", "application/x-amz-json-"+jsonVersion) } }
func TestBuildJSON(t *testing.T) { for _, test := range jsonTests { out, err := jsonutil.BuildJSON(test.in) if test.err != "" { assert.Error(t, err) assert.Contains(t, err.Error(), test.err) } else { assert.NoError(t, err) assert.Equal(t, string(out), test.out) } } }
func TaskFromACS(acsTask *ecsacs.Task, envelope *ecsacs.PayloadMessage) (*Task, error) { data, err := jsonutil.BuildJSON(acsTask) if err != nil { return nil, err } task := &Task{} err = json.Unmarshal(data, task) if err != nil { return nil, err } if task.DesiredStatus == TaskRunning && envelope.SeqNum != nil { task.StartSequenceNumber = *envelope.SeqNum } else if task.DesiredStatus == TaskStopped && envelope.SeqNum != nil { task.StopSequenceNumber = *envelope.SeqNum } return task, nil }