package main import "encoding/json" import "github.com/joeshaw/iso8601" // TODO(sneak) //func (r *SteemOpInBlock) UnmarshalJSON() ([]byte, error) { //} type OperationObject struct { TransactionID string `json:"trx_id"` BlockNumber uint64 `json:"block"` TransactionInBlock uint64 `json:"trx_in_block"` OpInTx int `json:"op_in_trx"` VirtualOperation int `json:"virtual_op"` Timestamp iso8601.Time `json:"timestamp"` Operation []json.RawMessage `json:"op"` } /* type operationTuple struct { Type OpType Data Operation } func (op *operationTuple) MarshalJSON() ([]byte, error) { return json.Marshal([]interface{}{ op.Type, op.Data, }) } func (op *operationTuple) UnmarshalJSON(data []byte) error { // The operation object is [opType, opBody]. raw := make([]*json.RawMessage, 2) if err := json.Unmarshal(data, &raw); err != nil { return errors.Wrapf(err, "failed to unmarshal operation object: %v", string(data)) } if len(raw) != 2 { return errors.Errorf("invalid operation object: %v", string(data)) } // Unmarshal the type. var opType OpType if err := json.Unmarshal(*raw[0], &opType); err != nil { return errors.Wrapf(err, "failed to unmarshal Operation.Type: %v", string(*raw[0])) } // Unmarshal the data. var opData Operation template, ok := dataObjects[opType] if ok { opData = reflect.New( reflect.Indirect(reflect.ValueOf(template)).Type(), ).Interface().(Operation) if err := json.Unmarshal(*raw[1], opData); err != nil { return errors.Wrapf(err, "failed to unmarshal Operation.Data: %v", string(*raw[1])) } } else { opData = &UnknownOperation{opType, raw[1]} } // Update fields. op.Type = opType op.Data = opData return nil } */ type GetOpsInBlockRequestParams struct { BlockNum int VirtualOps bool } type GetOpsInBlockResponse []OperationObject func (r *GetOpsInBlockRequestParams) MarshalJSON() ([]byte, error) { arr := []interface{}{r.BlockNum, r.VirtualOps} return json.Marshal(arr) }