6958 lines
157 KiB
Go
6958 lines
157 KiB
Go
// Code generated by ogen, DO NOT EDIT.
|
|
|
|
package rest
|
|
|
|
import (
|
|
"math/bits"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/go-faster/errors"
|
|
"github.com/go-faster/jx"
|
|
"github.com/ogen-go/ogen/json"
|
|
"github.com/ogen-go/ogen/validate"
|
|
)
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *ConstraintSpec) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *ConstraintSpec) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("type")
|
|
s.Type.Encode(e)
|
|
}
|
|
{
|
|
if s.Op.Set {
|
|
e.FieldStart("op")
|
|
s.Op.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Limit.Set {
|
|
e.FieldStart("limit")
|
|
s.Limit.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Action.Set {
|
|
e.FieldStart("action")
|
|
s.Action.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Mode.Set {
|
|
e.FieldStart("mode")
|
|
s.Mode.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Label.Set {
|
|
e.FieldStart("label")
|
|
s.Label.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Vertices != nil {
|
|
e.FieldStart("vertices")
|
|
e.ArrStart()
|
|
for _, elem := range s.Vertices {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfConstraintSpec = [7]string{
|
|
0: "type",
|
|
1: "op",
|
|
2: "limit",
|
|
3: "action",
|
|
4: "mode",
|
|
5: "label",
|
|
6: "vertices",
|
|
}
|
|
|
|
// Decode decodes ConstraintSpec from json.
|
|
func (s *ConstraintSpec) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ConstraintSpec to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
s.setDefaults()
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "type":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
if err := s.Type.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"type\"")
|
|
}
|
|
case "op":
|
|
if err := func() error {
|
|
s.Op.Reset()
|
|
if err := s.Op.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"op\"")
|
|
}
|
|
case "limit":
|
|
if err := func() error {
|
|
s.Limit.Reset()
|
|
if err := s.Limit.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"limit\"")
|
|
}
|
|
case "action":
|
|
if err := func() error {
|
|
s.Action.Reset()
|
|
if err := s.Action.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"action\"")
|
|
}
|
|
case "mode":
|
|
if err := func() error {
|
|
s.Mode.Reset()
|
|
if err := s.Mode.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"mode\"")
|
|
}
|
|
case "label":
|
|
if err := func() error {
|
|
s.Label.Reset()
|
|
if err := s.Label.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"label\"")
|
|
}
|
|
case "vertices":
|
|
if err := func() error {
|
|
s.Vertices = make([]PolygonVertex, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem PolygonVertex
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Vertices = append(s.Vertices, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"vertices\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode ConstraintSpec")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000001,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfConstraintSpec) {
|
|
name = jsonFieldsNameOfConstraintSpec[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *ConstraintSpec) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ConstraintSpec) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ConstraintSpecAction as json.
|
|
func (s ConstraintSpecAction) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes ConstraintSpecAction from json.
|
|
func (s *ConstraintSpecAction) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ConstraintSpecAction to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch ConstraintSpecAction(v) {
|
|
case ConstraintSpecActionStop:
|
|
*s = ConstraintSpecActionStop
|
|
case ConstraintSpecActionFallback:
|
|
*s = ConstraintSpecActionFallback
|
|
case ConstraintSpecActionClip:
|
|
*s = ConstraintSpecActionClip
|
|
default:
|
|
*s = ConstraintSpecAction(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s ConstraintSpecAction) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ConstraintSpecAction) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ConstraintSpecMode as json.
|
|
func (s ConstraintSpecMode) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes ConstraintSpecMode from json.
|
|
func (s *ConstraintSpecMode) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ConstraintSpecMode to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch ConstraintSpecMode(v) {
|
|
case ConstraintSpecModeInside:
|
|
*s = ConstraintSpecModeInside
|
|
case ConstraintSpecModeOutside:
|
|
*s = ConstraintSpecModeOutside
|
|
default:
|
|
*s = ConstraintSpecMode(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s ConstraintSpecMode) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ConstraintSpecMode) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ConstraintSpecOp as json.
|
|
func (s ConstraintSpecOp) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes ConstraintSpecOp from json.
|
|
func (s *ConstraintSpecOp) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ConstraintSpecOp to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch ConstraintSpecOp(v) {
|
|
case ConstraintSpecOpLess:
|
|
*s = ConstraintSpecOpLess
|
|
case ConstraintSpecOpLessEq:
|
|
*s = ConstraintSpecOpLessEq
|
|
case ConstraintSpecOpGreater:
|
|
*s = ConstraintSpecOpGreater
|
|
case ConstraintSpecOpGreaterEq:
|
|
*s = ConstraintSpecOpGreaterEq
|
|
case ConstraintSpecOpEqEq:
|
|
*s = ConstraintSpecOpEqEq
|
|
default:
|
|
*s = ConstraintSpecOp(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s ConstraintSpecOp) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ConstraintSpecOp) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ConstraintSpecType as json.
|
|
func (s ConstraintSpecType) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes ConstraintSpecType from json.
|
|
func (s *ConstraintSpecType) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ConstraintSpecType to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch ConstraintSpecType(v) {
|
|
case ConstraintSpecTypeAltitude:
|
|
*s = ConstraintSpecTypeAltitude
|
|
case ConstraintSpecTypeTime:
|
|
*s = ConstraintSpecTypeTime
|
|
case ConstraintSpecTypeTerrainContact:
|
|
*s = ConstraintSpecTypeTerrainContact
|
|
case ConstraintSpecTypePolygon:
|
|
*s = ConstraintSpecTypePolygon
|
|
default:
|
|
*s = ConstraintSpecType(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s ConstraintSpecType) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ConstraintSpecType) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *Coverage) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *Coverage) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("region")
|
|
s.Region.Encode(e)
|
|
}
|
|
{
|
|
e.FieldStart("start_time")
|
|
json.EncodeDateTime(e, s.StartTime)
|
|
}
|
|
{
|
|
e.FieldStart("end_time")
|
|
json.EncodeDateTime(e, s.EndTime)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfCoverage = [3]string{
|
|
0: "region",
|
|
1: "start_time",
|
|
2: "end_time",
|
|
}
|
|
|
|
// Decode decodes Coverage from json.
|
|
func (s *Coverage) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode Coverage to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "region":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
if err := s.Region.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"region\"")
|
|
}
|
|
case "start_time":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.StartTime = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"start_time\"")
|
|
}
|
|
case "end_time":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.EndTime = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"end_time\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode Coverage")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfCoverage) {
|
|
name = jsonFieldsNameOfCoverage[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *Coverage) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *Coverage) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *DatasetEntry) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *DatasetEntry) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("filename")
|
|
e.Str(s.Filename)
|
|
}
|
|
{
|
|
e.FieldStart("epoch")
|
|
json.EncodeDateTime(e, s.Epoch)
|
|
}
|
|
{
|
|
if s.Subset.Set {
|
|
e.FieldStart("subset")
|
|
s.Subset.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Coverage.Set {
|
|
e.FieldStart("coverage")
|
|
s.Coverage.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
e.FieldStart("loaded")
|
|
e.Bool(s.Loaded)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfDatasetEntry = [5]string{
|
|
0: "filename",
|
|
1: "epoch",
|
|
2: "subset",
|
|
3: "coverage",
|
|
4: "loaded",
|
|
}
|
|
|
|
// Decode decodes DatasetEntry from json.
|
|
func (s *DatasetEntry) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode DatasetEntry to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "filename":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Filename = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"filename\"")
|
|
}
|
|
case "epoch":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.Epoch = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"epoch\"")
|
|
}
|
|
case "subset":
|
|
if err := func() error {
|
|
s.Subset.Reset()
|
|
if err := s.Subset.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"subset\"")
|
|
}
|
|
case "coverage":
|
|
if err := func() error {
|
|
s.Coverage.Reset()
|
|
if err := s.Coverage.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"coverage\"")
|
|
}
|
|
case "loaded":
|
|
requiredBitSet[0] |= 1 << 4
|
|
if err := func() error {
|
|
v, err := d.Bool()
|
|
s.Loaded = bool(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"loaded\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode DatasetEntry")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00010011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfDatasetEntry) {
|
|
name = jsonFieldsNameOfDatasetEntry[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *DatasetEntry) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *DatasetEntry) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *DatasetInfo) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *DatasetInfo) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("source")
|
|
e.Str(s.Source)
|
|
}
|
|
{
|
|
e.FieldStart("epoch")
|
|
json.EncodeDateTime(e, s.Epoch)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfDatasetInfo = [2]string{
|
|
0: "source",
|
|
1: "epoch",
|
|
}
|
|
|
|
// Decode decodes DatasetInfo from json.
|
|
func (s *DatasetInfo) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode DatasetInfo to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "source":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Source = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"source\"")
|
|
}
|
|
case "epoch":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.Epoch = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"epoch\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode DatasetInfo")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfDatasetInfo) {
|
|
name = jsonFieldsNameOfDatasetInfo[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *DatasetInfo) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *DatasetInfo) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *DatasetList) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *DatasetList) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("source")
|
|
e.Str(s.Source)
|
|
}
|
|
{
|
|
e.FieldStart("datasets")
|
|
e.ArrStart()
|
|
for _, elem := range s.Datasets {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfDatasetList = [2]string{
|
|
0: "source",
|
|
1: "datasets",
|
|
}
|
|
|
|
// Decode decodes DatasetList from json.
|
|
func (s *DatasetList) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode DatasetList to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "source":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Source = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"source\"")
|
|
}
|
|
case "datasets":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
s.Datasets = make([]DatasetEntry, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem DatasetEntry
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Datasets = append(s.Datasets, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"datasets\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode DatasetList")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfDatasetList) {
|
|
name = jsonFieldsNameOfDatasetList[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *DatasetList) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *DatasetList) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *DownloadAccepted) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *DownloadAccepted) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("job_id")
|
|
e.Str(s.JobID)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfDownloadAccepted = [1]string{
|
|
0: "job_id",
|
|
}
|
|
|
|
// Decode decodes DownloadAccepted from json.
|
|
func (s *DownloadAccepted) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode DownloadAccepted to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "job_id":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.JobID = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"job_id\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode DownloadAccepted")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000001,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfDownloadAccepted) {
|
|
name = jsonFieldsNameOfDownloadAccepted[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *DownloadAccepted) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *DownloadAccepted) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *DownloadJob) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *DownloadJob) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("id")
|
|
e.Str(s.ID)
|
|
}
|
|
{
|
|
e.FieldStart("source")
|
|
e.Str(s.Source)
|
|
}
|
|
{
|
|
e.FieldStart("dataset")
|
|
e.Str(s.Dataset)
|
|
}
|
|
{
|
|
e.FieldStart("epoch")
|
|
json.EncodeDateTime(e, s.Epoch)
|
|
}
|
|
{
|
|
e.FieldStart("status")
|
|
s.Status.Encode(e)
|
|
}
|
|
{
|
|
e.FieldStart("started_at")
|
|
json.EncodeDateTime(e, s.StartedAt)
|
|
}
|
|
{
|
|
if s.EndedAt.Set {
|
|
e.FieldStart("ended_at")
|
|
s.EndedAt.Encode(e, json.EncodeDateTime)
|
|
}
|
|
}
|
|
{
|
|
if s.Error.Set {
|
|
e.FieldStart("error")
|
|
s.Error.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
e.FieldStart("total_units")
|
|
e.Int(s.TotalUnits)
|
|
}
|
|
{
|
|
e.FieldStart("done_units")
|
|
e.Int(s.DoneUnits)
|
|
}
|
|
{
|
|
e.FieldStart("bytes")
|
|
e.Int64(s.Bytes)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfDownloadJob = [11]string{
|
|
0: "id",
|
|
1: "source",
|
|
2: "dataset",
|
|
3: "epoch",
|
|
4: "status",
|
|
5: "started_at",
|
|
6: "ended_at",
|
|
7: "error",
|
|
8: "total_units",
|
|
9: "done_units",
|
|
10: "bytes",
|
|
}
|
|
|
|
// Decode decodes DownloadJob from json.
|
|
func (s *DownloadJob) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode DownloadJob to nil")
|
|
}
|
|
var requiredBitSet [2]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "id":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.ID = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"id\"")
|
|
}
|
|
case "source":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Source = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"source\"")
|
|
}
|
|
case "dataset":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Dataset = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"dataset\"")
|
|
}
|
|
case "epoch":
|
|
requiredBitSet[0] |= 1 << 3
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.Epoch = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"epoch\"")
|
|
}
|
|
case "status":
|
|
requiredBitSet[0] |= 1 << 4
|
|
if err := func() error {
|
|
if err := s.Status.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"status\"")
|
|
}
|
|
case "started_at":
|
|
requiredBitSet[0] |= 1 << 5
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.StartedAt = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"started_at\"")
|
|
}
|
|
case "ended_at":
|
|
if err := func() error {
|
|
s.EndedAt.Reset()
|
|
if err := s.EndedAt.Decode(d, json.DecodeDateTime); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"ended_at\"")
|
|
}
|
|
case "error":
|
|
if err := func() error {
|
|
s.Error.Reset()
|
|
if err := s.Error.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"error\"")
|
|
}
|
|
case "total_units":
|
|
requiredBitSet[1] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.TotalUnits = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"total_units\"")
|
|
}
|
|
case "done_units":
|
|
requiredBitSet[1] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.DoneUnits = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"done_units\"")
|
|
}
|
|
case "bytes":
|
|
requiredBitSet[1] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Int64()
|
|
s.Bytes = int64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"bytes\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode DownloadJob")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [2]uint8{
|
|
0b00111111,
|
|
0b00000111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfDownloadJob) {
|
|
name = jsonFieldsNameOfDownloadJob[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *DownloadJob) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *DownloadJob) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes DownloadJobStatus as json.
|
|
func (s DownloadJobStatus) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes DownloadJobStatus from json.
|
|
func (s *DownloadJobStatus) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode DownloadJobStatus to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch DownloadJobStatus(v) {
|
|
case DownloadJobStatusPending:
|
|
*s = DownloadJobStatusPending
|
|
case DownloadJobStatusRunning:
|
|
*s = DownloadJobStatusRunning
|
|
case DownloadJobStatusComplete:
|
|
*s = DownloadJobStatusComplete
|
|
case DownloadJobStatusFailed:
|
|
*s = DownloadJobStatusFailed
|
|
case DownloadJobStatusCancelled:
|
|
*s = DownloadJobStatusCancelled
|
|
default:
|
|
*s = DownloadJobStatus(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s DownloadJobStatus) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *DownloadJobStatus) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *DownloadRequest) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *DownloadRequest) encodeFields(e *jx.Encoder) {
|
|
{
|
|
if s.Epoch.Set {
|
|
e.FieldStart("epoch")
|
|
s.Epoch.Encode(e, json.EncodeDateTime)
|
|
}
|
|
}
|
|
{
|
|
if s.Latest.Set {
|
|
e.FieldStart("latest")
|
|
s.Latest.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Subset.Set {
|
|
e.FieldStart("subset")
|
|
s.Subset.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfDownloadRequest = [3]string{
|
|
0: "epoch",
|
|
1: "latest",
|
|
2: "subset",
|
|
}
|
|
|
|
// Decode decodes DownloadRequest from json.
|
|
func (s *DownloadRequest) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode DownloadRequest to nil")
|
|
}
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "epoch":
|
|
if err := func() error {
|
|
s.Epoch.Reset()
|
|
if err := s.Epoch.Decode(d, json.DecodeDateTime); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"epoch\"")
|
|
}
|
|
case "latest":
|
|
if err := func() error {
|
|
s.Latest.Reset()
|
|
if err := s.Latest.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"latest\"")
|
|
}
|
|
case "subset":
|
|
if err := func() error {
|
|
s.Subset.Reset()
|
|
if err := s.Subset.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"subset\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode DownloadRequest")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *DownloadRequest) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *DownloadRequest) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *Error) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *Error) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("error")
|
|
s.Error.Encode(e)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfError = [1]string{
|
|
0: "error",
|
|
}
|
|
|
|
// Decode decodes Error from json.
|
|
func (s *Error) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode Error to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "error":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
if err := s.Error.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"error\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode Error")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000001,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfError) {
|
|
name = jsonFieldsNameOfError[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *Error) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *Error) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *ErrorError) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *ErrorError) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("type")
|
|
e.Str(s.Type)
|
|
}
|
|
{
|
|
e.FieldStart("description")
|
|
e.Str(s.Description)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfErrorError = [2]string{
|
|
0: "type",
|
|
1: "description",
|
|
}
|
|
|
|
// Decode decodes ErrorError from json.
|
|
func (s *ErrorError) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ErrorError to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "type":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Type = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"type\"")
|
|
}
|
|
case "description":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Description = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"description\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode ErrorError")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfErrorError) {
|
|
name = jsonFieldsNameOfErrorError[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *ErrorError) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ErrorError) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *EventSummary) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *EventSummary) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("type")
|
|
e.Str(s.Type)
|
|
}
|
|
{
|
|
e.FieldStart("count")
|
|
e.Int64(s.Count)
|
|
}
|
|
{
|
|
if s.FirstTime.Set {
|
|
e.FieldStart("first_time")
|
|
s.FirstTime.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.LastTime.Set {
|
|
e.FieldStart("last_time")
|
|
s.LastTime.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.FirstState.Set {
|
|
e.FieldStart("first_state")
|
|
s.FirstState.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.LastState.Set {
|
|
e.FieldStart("last_state")
|
|
s.LastState.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Message.Set {
|
|
e.FieldStart("message")
|
|
s.Message.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfEventSummary = [7]string{
|
|
0: "type",
|
|
1: "count",
|
|
2: "first_time",
|
|
3: "last_time",
|
|
4: "first_state",
|
|
5: "last_state",
|
|
6: "message",
|
|
}
|
|
|
|
// Decode decodes EventSummary from json.
|
|
func (s *EventSummary) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode EventSummary to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "type":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Type = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"type\"")
|
|
}
|
|
case "count":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Int64()
|
|
s.Count = int64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"count\"")
|
|
}
|
|
case "first_time":
|
|
if err := func() error {
|
|
s.FirstTime.Reset()
|
|
if err := s.FirstTime.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"first_time\"")
|
|
}
|
|
case "last_time":
|
|
if err := func() error {
|
|
s.LastTime.Reset()
|
|
if err := s.LastTime.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"last_time\"")
|
|
}
|
|
case "first_state":
|
|
if err := func() error {
|
|
s.FirstState.Reset()
|
|
if err := s.FirstState.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"first_state\"")
|
|
}
|
|
case "last_state":
|
|
if err := func() error {
|
|
s.LastState.Reset()
|
|
if err := s.LastState.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"last_state\"")
|
|
}
|
|
case "message":
|
|
if err := func() error {
|
|
s.Message.Reset()
|
|
if err := s.Message.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"message\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode EventSummary")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfEventSummary) {
|
|
name = jsonFieldsNameOfEventSummary[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *EventSummary) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *EventSummary) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *GeoState) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *GeoState) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("lat")
|
|
e.Float64(s.Lat)
|
|
}
|
|
{
|
|
e.FieldStart("lng")
|
|
e.Float64(s.Lng)
|
|
}
|
|
{
|
|
e.FieldStart("altitude")
|
|
e.Float64(s.Altitude)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfGeoState = [3]string{
|
|
0: "lat",
|
|
1: "lng",
|
|
2: "altitude",
|
|
}
|
|
|
|
// Decode decodes GeoState from json.
|
|
func (s *GeoState) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode GeoState to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "lat":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Lat = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"lat\"")
|
|
}
|
|
case "lng":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Lng = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"lng\"")
|
|
}
|
|
case "altitude":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Altitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"altitude\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode GeoState")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfGeoState) {
|
|
name = jsonFieldsNameOfGeoState[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *GeoState) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *GeoState) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *HourRange) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *HourRange) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("min_hour")
|
|
e.Int(s.MinHour)
|
|
}
|
|
{
|
|
e.FieldStart("max_hour")
|
|
e.Int(s.MaxHour)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfHourRange = [2]string{
|
|
0: "min_hour",
|
|
1: "max_hour",
|
|
}
|
|
|
|
// Decode decodes HourRange from json.
|
|
func (s *HourRange) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode HourRange to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "min_hour":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.MinHour = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"min_hour\"")
|
|
}
|
|
case "max_hour":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.MaxHour = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"max_hour\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode HourRange")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfHourRange) {
|
|
name = jsonFieldsNameOfHourRange[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *HourRange) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *HourRange) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *Launch) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *Launch) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("time")
|
|
json.EncodeDateTime(e, s.Time)
|
|
}
|
|
{
|
|
e.FieldStart("latitude")
|
|
e.Float64(s.Latitude)
|
|
}
|
|
{
|
|
e.FieldStart("longitude")
|
|
e.Float64(s.Longitude)
|
|
}
|
|
{
|
|
if s.Altitude.Set {
|
|
e.FieldStart("altitude")
|
|
s.Altitude.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfLaunch = [4]string{
|
|
0: "time",
|
|
1: "latitude",
|
|
2: "longitude",
|
|
3: "altitude",
|
|
}
|
|
|
|
// Decode decodes Launch from json.
|
|
func (s *Launch) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode Launch to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "time":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.Time = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"time\"")
|
|
}
|
|
case "latitude":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Latitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"latitude\"")
|
|
}
|
|
case "longitude":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Longitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"longitude\"")
|
|
}
|
|
case "altitude":
|
|
if err := func() error {
|
|
s.Altitude.Reset()
|
|
if err := s.Altitude.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"altitude\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode Launch")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfLaunch) {
|
|
name = jsonFieldsNameOfLaunch[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *Launch) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *Launch) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *ModelSpec) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *ModelSpec) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("type")
|
|
s.Type.Encode(e)
|
|
}
|
|
{
|
|
if s.Rate.Set {
|
|
e.FieldStart("rate")
|
|
s.Rate.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.SeaLevelRate.Set {
|
|
e.FieldStart("sea_level_rate")
|
|
s.SeaLevelRate.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.IncludeWind.Set {
|
|
e.FieldStart("include_wind")
|
|
s.IncludeWind.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Segments != nil {
|
|
e.FieldStart("segments")
|
|
e.ArrStart()
|
|
for _, elem := range s.Segments {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfModelSpec = [5]string{
|
|
0: "type",
|
|
1: "rate",
|
|
2: "sea_level_rate",
|
|
3: "include_wind",
|
|
4: "segments",
|
|
}
|
|
|
|
// Decode decodes ModelSpec from json.
|
|
func (s *ModelSpec) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ModelSpec to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "type":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
if err := s.Type.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"type\"")
|
|
}
|
|
case "rate":
|
|
if err := func() error {
|
|
s.Rate.Reset()
|
|
if err := s.Rate.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"rate\"")
|
|
}
|
|
case "sea_level_rate":
|
|
if err := func() error {
|
|
s.SeaLevelRate.Reset()
|
|
if err := s.SeaLevelRate.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"sea_level_rate\"")
|
|
}
|
|
case "include_wind":
|
|
if err := func() error {
|
|
s.IncludeWind.Reset()
|
|
if err := s.IncludeWind.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"include_wind\"")
|
|
}
|
|
case "segments":
|
|
if err := func() error {
|
|
s.Segments = make([]PiecewiseSegment, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem PiecewiseSegment
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Segments = append(s.Segments, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"segments\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode ModelSpec")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000001,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfModelSpec) {
|
|
name = jsonFieldsNameOfModelSpec[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *ModelSpec) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ModelSpec) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ModelSpecType as json.
|
|
func (s ModelSpecType) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes ModelSpecType from json.
|
|
func (s *ModelSpecType) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ModelSpecType to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch ModelSpecType(v) {
|
|
case ModelSpecTypeConstantRate:
|
|
*s = ModelSpecTypeConstantRate
|
|
case ModelSpecTypeParachuteDescent:
|
|
*s = ModelSpecTypeParachuteDescent
|
|
case ModelSpecTypePiecewise:
|
|
*s = ModelSpecTypePiecewise
|
|
case ModelSpecTypeWind:
|
|
*s = ModelSpecTypeWind
|
|
default:
|
|
*s = ModelSpecType(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s ModelSpecType) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ModelSpecType) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes bool as json.
|
|
func (o OptBool) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Bool(bool(o.Value))
|
|
}
|
|
|
|
// Decode decodes bool from json.
|
|
func (o *OptBool) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptBool to nil")
|
|
}
|
|
o.Set = true
|
|
v, err := d.Bool()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
o.Value = bool(v)
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptBool) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptBool) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ConstraintSpecAction as json.
|
|
func (o OptConstraintSpecAction) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Str(string(o.Value))
|
|
}
|
|
|
|
// Decode decodes ConstraintSpecAction from json.
|
|
func (o *OptConstraintSpecAction) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptConstraintSpecAction to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptConstraintSpecAction) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptConstraintSpecAction) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ConstraintSpecMode as json.
|
|
func (o OptConstraintSpecMode) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Str(string(o.Value))
|
|
}
|
|
|
|
// Decode decodes ConstraintSpecMode from json.
|
|
func (o *OptConstraintSpecMode) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptConstraintSpecMode to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptConstraintSpecMode) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptConstraintSpecMode) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ConstraintSpecOp as json.
|
|
func (o OptConstraintSpecOp) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Str(string(o.Value))
|
|
}
|
|
|
|
// Decode decodes ConstraintSpecOp from json.
|
|
func (o *OptConstraintSpecOp) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptConstraintSpecOp to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptConstraintSpecOp) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptConstraintSpecOp) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes Coverage as json.
|
|
func (o OptCoverage) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes Coverage from json.
|
|
func (o *OptCoverage) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptCoverage to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptCoverage) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptCoverage) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes time.Time as json.
|
|
func (o OptDateTime) Encode(e *jx.Encoder, format func(*jx.Encoder, time.Time)) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
format(e, o.Value)
|
|
}
|
|
|
|
// Decode decodes time.Time from json.
|
|
func (o *OptDateTime) Decode(d *jx.Decoder, format func(*jx.Decoder) (time.Time, error)) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptDateTime to nil")
|
|
}
|
|
o.Set = true
|
|
v, err := format(d)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
o.Value = v
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptDateTime) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e, json.EncodeDateTime)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptDateTime) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d, json.DecodeDateTime)
|
|
}
|
|
|
|
// Encode encodes float64 as json.
|
|
func (o OptFloat64) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Float64(float64(o.Value))
|
|
}
|
|
|
|
// Decode decodes float64 from json.
|
|
func (o *OptFloat64) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptFloat64 to nil")
|
|
}
|
|
o.Set = true
|
|
v, err := d.Float64()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
o.Value = float64(v)
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptFloat64) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptFloat64) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes GeoState as json.
|
|
func (o OptGeoState) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes GeoState from json.
|
|
func (o *OptGeoState) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptGeoState to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptGeoState) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptGeoState) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes HourRange as json.
|
|
func (o OptHourRange) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes HourRange from json.
|
|
func (o *OptHourRange) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptHourRange to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptHourRange) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptHourRange) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes int as json.
|
|
func (o OptInt) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Int(int(o.Value))
|
|
}
|
|
|
|
// Decode decodes int from json.
|
|
func (o *OptInt) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptInt to nil")
|
|
}
|
|
o.Set = true
|
|
v, err := d.Int()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
o.Value = int(v)
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptInt) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptInt) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes Options as json.
|
|
func (o OptOptions) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes Options from json.
|
|
func (o *OptOptions) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptOptions to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptOptions) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptOptions) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PiecewiseSegmentReference as json.
|
|
func (o OptPiecewiseSegmentReference) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Str(string(o.Value))
|
|
}
|
|
|
|
// Decode decodes PiecewiseSegmentReference from json.
|
|
func (o *OptPiecewiseSegmentReference) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptPiecewiseSegmentReference to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptPiecewiseSegmentReference) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptPiecewiseSegmentReference) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PredictionResponseRequest as json.
|
|
func (o OptPredictionResponseRequest) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes PredictionResponseRequest from json.
|
|
func (o *OptPredictionResponseRequest) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptPredictionResponseRequest to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptPredictionResponseRequest) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptPredictionResponseRequest) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PredictionResponseWarnings as json.
|
|
func (o OptPredictionResponseWarnings) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes PredictionResponseWarnings from json.
|
|
func (o *OptPredictionResponseWarnings) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptPredictionResponseWarnings to nil")
|
|
}
|
|
o.Set = true
|
|
o.Value = make(PredictionResponseWarnings)
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptPredictionResponseWarnings) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptPredictionResponseWarnings) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PredictionV2RequestDirection as json.
|
|
func (o OptPredictionV2RequestDirection) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Str(string(o.Value))
|
|
}
|
|
|
|
// Decode decodes PredictionV2RequestDirection from json.
|
|
func (o *OptPredictionV2RequestDirection) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptPredictionV2RequestDirection to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptPredictionV2RequestDirection) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptPredictionV2RequestDirection) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PredictionV2Response as json.
|
|
func (o OptPredictionV2Response) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes PredictionV2Response from json.
|
|
func (o *OptPredictionV2Response) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptPredictionV2Response to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptPredictionV2Response) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptPredictionV2Response) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes Region as json.
|
|
func (o OptRegion) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes Region from json.
|
|
func (o *OptRegion) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptRegion to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptRegion) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptRegion) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes string as json.
|
|
func (o OptString) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
e.Str(string(o.Value))
|
|
}
|
|
|
|
// Decode decodes string from json.
|
|
func (o *OptString) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptString to nil")
|
|
}
|
|
o.Set = true
|
|
v, err := d.Str()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
o.Value = string(v)
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptString) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptString) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes SubsetSpec as json.
|
|
func (o OptSubsetSpec) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes SubsetSpec from json.
|
|
func (o *OptSubsetSpec) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptSubsetSpec to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptSubsetSpec) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptSubsetSpec) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes TerminationInfo as json.
|
|
func (o OptTerminationInfo) Encode(e *jx.Encoder) {
|
|
if !o.Set {
|
|
return
|
|
}
|
|
o.Value.Encode(e)
|
|
}
|
|
|
|
// Decode decodes TerminationInfo from json.
|
|
func (o *OptTerminationInfo) Decode(d *jx.Decoder) error {
|
|
if o == nil {
|
|
return errors.New("invalid: unable to decode OptTerminationInfo to nil")
|
|
}
|
|
o.Set = true
|
|
if err := o.Value.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s OptTerminationInfo) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *OptTerminationInfo) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *Options) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *Options) encodeFields(e *jx.Encoder) {
|
|
{
|
|
if s.StepSeconds.Set {
|
|
e.FieldStart("step_seconds")
|
|
s.StepSeconds.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Tolerance.Set {
|
|
e.FieldStart("tolerance")
|
|
s.Tolerance.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfOptions = [2]string{
|
|
0: "step_seconds",
|
|
1: "tolerance",
|
|
}
|
|
|
|
// Decode decodes Options from json.
|
|
func (s *Options) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode Options to nil")
|
|
}
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "step_seconds":
|
|
if err := func() error {
|
|
s.StepSeconds.Reset()
|
|
if err := s.StepSeconds.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"step_seconds\"")
|
|
}
|
|
case "tolerance":
|
|
if err := func() error {
|
|
s.Tolerance.Reset()
|
|
if err := s.Tolerance.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"tolerance\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode Options")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *Options) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *Options) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PiecewiseSegment) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PiecewiseSegment) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("until")
|
|
e.Float64(s.Until)
|
|
}
|
|
{
|
|
e.FieldStart("rate")
|
|
e.Float64(s.Rate)
|
|
}
|
|
{
|
|
if s.Reference.Set {
|
|
e.FieldStart("reference")
|
|
s.Reference.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPiecewiseSegment = [3]string{
|
|
0: "until",
|
|
1: "rate",
|
|
2: "reference",
|
|
}
|
|
|
|
// Decode decodes PiecewiseSegment from json.
|
|
func (s *PiecewiseSegment) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PiecewiseSegment to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
s.setDefaults()
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "until":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Until = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"until\"")
|
|
}
|
|
case "rate":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Rate = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"rate\"")
|
|
}
|
|
case "reference":
|
|
if err := func() error {
|
|
s.Reference.Reset()
|
|
if err := s.Reference.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"reference\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PiecewiseSegment")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfPiecewiseSegment) {
|
|
name = jsonFieldsNameOfPiecewiseSegment[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PiecewiseSegment) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PiecewiseSegment) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PiecewiseSegmentReference as json.
|
|
func (s PiecewiseSegmentReference) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes PiecewiseSegmentReference from json.
|
|
func (s *PiecewiseSegmentReference) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PiecewiseSegmentReference to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch PiecewiseSegmentReference(v) {
|
|
case PiecewiseSegmentReferenceAbsolute:
|
|
*s = PiecewiseSegmentReferenceAbsolute
|
|
case PiecewiseSegmentReferenceProfileStart:
|
|
*s = PiecewiseSegmentReferenceProfileStart
|
|
case PiecewiseSegmentReferencePropagatorStart:
|
|
*s = PiecewiseSegmentReferencePropagatorStart
|
|
default:
|
|
*s = PiecewiseSegmentReference(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s PiecewiseSegmentReference) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PiecewiseSegmentReference) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PolygonVertex) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PolygonVertex) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("lat")
|
|
e.Float64(s.Lat)
|
|
}
|
|
{
|
|
e.FieldStart("lng")
|
|
e.Float64(s.Lng)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPolygonVertex = [2]string{
|
|
0: "lat",
|
|
1: "lng",
|
|
}
|
|
|
|
// Decode decodes PolygonVertex from json.
|
|
func (s *PolygonVertex) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PolygonVertex to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "lat":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Lat = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"lat\"")
|
|
}
|
|
case "lng":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Lng = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"lng\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PolygonVertex")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfPolygonVertex) {
|
|
name = jsonFieldsNameOfPolygonVertex[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PolygonVertex) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PolygonVertex) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PredictionJob) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PredictionJob) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("id")
|
|
e.Str(s.ID)
|
|
}
|
|
{
|
|
e.FieldStart("status")
|
|
s.Status.Encode(e)
|
|
}
|
|
{
|
|
e.FieldStart("created_at")
|
|
json.EncodeDateTime(e, s.CreatedAt)
|
|
}
|
|
{
|
|
if s.StartedAt.Set {
|
|
e.FieldStart("started_at")
|
|
s.StartedAt.Encode(e, json.EncodeDateTime)
|
|
}
|
|
}
|
|
{
|
|
if s.CompletedAt.Set {
|
|
e.FieldStart("completed_at")
|
|
s.CompletedAt.Encode(e, json.EncodeDateTime)
|
|
}
|
|
}
|
|
{
|
|
if s.Error.Set {
|
|
e.FieldStart("error")
|
|
s.Error.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Result.Set {
|
|
e.FieldStart("result")
|
|
s.Result.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPredictionJob = [7]string{
|
|
0: "id",
|
|
1: "status",
|
|
2: "created_at",
|
|
3: "started_at",
|
|
4: "completed_at",
|
|
5: "error",
|
|
6: "result",
|
|
}
|
|
|
|
// Decode decodes PredictionJob from json.
|
|
func (s *PredictionJob) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionJob to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "id":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.ID = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"id\"")
|
|
}
|
|
case "status":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
if err := s.Status.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"status\"")
|
|
}
|
|
case "created_at":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.CreatedAt = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"created_at\"")
|
|
}
|
|
case "started_at":
|
|
if err := func() error {
|
|
s.StartedAt.Reset()
|
|
if err := s.StartedAt.Decode(d, json.DecodeDateTime); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"started_at\"")
|
|
}
|
|
case "completed_at":
|
|
if err := func() error {
|
|
s.CompletedAt.Reset()
|
|
if err := s.CompletedAt.Decode(d, json.DecodeDateTime); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"completed_at\"")
|
|
}
|
|
case "error":
|
|
if err := func() error {
|
|
s.Error.Reset()
|
|
if err := s.Error.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"error\"")
|
|
}
|
|
case "result":
|
|
if err := func() error {
|
|
s.Result.Reset()
|
|
if err := s.Result.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"result\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PredictionJob")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfPredictionJob) {
|
|
name = jsonFieldsNameOfPredictionJob[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PredictionJob) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionJob) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PredictionJobStatus as json.
|
|
func (s PredictionJobStatus) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes PredictionJobStatus from json.
|
|
func (s *PredictionJobStatus) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionJobStatus to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch PredictionJobStatus(v) {
|
|
case PredictionJobStatusPending:
|
|
*s = PredictionJobStatusPending
|
|
case PredictionJobStatusRunning:
|
|
*s = PredictionJobStatusRunning
|
|
case PredictionJobStatusComplete:
|
|
*s = PredictionJobStatusComplete
|
|
case PredictionJobStatusFailed:
|
|
*s = PredictionJobStatusFailed
|
|
case PredictionJobStatusCancelled:
|
|
*s = PredictionJobStatusCancelled
|
|
default:
|
|
*s = PredictionJobStatus(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s PredictionJobStatus) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionJobStatus) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PredictionResponse) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PredictionResponse) encodeFields(e *jx.Encoder) {
|
|
{
|
|
if s.Request.Set {
|
|
e.FieldStart("request")
|
|
s.Request.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
e.FieldStart("prediction")
|
|
e.ArrStart()
|
|
for _, elem := range s.Prediction {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
{
|
|
e.FieldStart("metadata")
|
|
s.Metadata.Encode(e)
|
|
}
|
|
{
|
|
if s.Warnings.Set {
|
|
e.FieldStart("warnings")
|
|
s.Warnings.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPredictionResponse = [4]string{
|
|
0: "request",
|
|
1: "prediction",
|
|
2: "metadata",
|
|
3: "warnings",
|
|
}
|
|
|
|
// Decode decodes PredictionResponse from json.
|
|
func (s *PredictionResponse) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionResponse to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "request":
|
|
if err := func() error {
|
|
s.Request.Reset()
|
|
if err := s.Request.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"request\"")
|
|
}
|
|
case "prediction":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
s.Prediction = make([]PredictionResponsePredictionItem, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem PredictionResponsePredictionItem
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Prediction = append(s.Prediction, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"prediction\"")
|
|
}
|
|
case "metadata":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
if err := s.Metadata.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"metadata\"")
|
|
}
|
|
case "warnings":
|
|
if err := func() error {
|
|
s.Warnings.Reset()
|
|
if err := s.Warnings.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"warnings\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PredictionResponse")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000110,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfPredictionResponse) {
|
|
name = jsonFieldsNameOfPredictionResponse[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PredictionResponse) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionResponse) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PredictionResponseMetadata) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PredictionResponseMetadata) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("start_datetime")
|
|
json.EncodeDateTime(e, s.StartDatetime)
|
|
}
|
|
{
|
|
e.FieldStart("complete_datetime")
|
|
json.EncodeDateTime(e, s.CompleteDatetime)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPredictionResponseMetadata = [2]string{
|
|
0: "start_datetime",
|
|
1: "complete_datetime",
|
|
}
|
|
|
|
// Decode decodes PredictionResponseMetadata from json.
|
|
func (s *PredictionResponseMetadata) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionResponseMetadata to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "start_datetime":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.StartDatetime = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"start_datetime\"")
|
|
}
|
|
case "complete_datetime":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.CompleteDatetime = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"complete_datetime\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PredictionResponseMetadata")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfPredictionResponseMetadata) {
|
|
name = jsonFieldsNameOfPredictionResponseMetadata[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PredictionResponseMetadata) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionResponseMetadata) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PredictionResponsePredictionItem) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PredictionResponsePredictionItem) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("stage")
|
|
s.Stage.Encode(e)
|
|
}
|
|
{
|
|
e.FieldStart("trajectory")
|
|
e.ArrStart()
|
|
for _, elem := range s.Trajectory {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPredictionResponsePredictionItem = [2]string{
|
|
0: "stage",
|
|
1: "trajectory",
|
|
}
|
|
|
|
// Decode decodes PredictionResponsePredictionItem from json.
|
|
func (s *PredictionResponsePredictionItem) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionResponsePredictionItem to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "stage":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
if err := s.Stage.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"stage\"")
|
|
}
|
|
case "trajectory":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
s.Trajectory = make([]TawhiriPoint, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem TawhiriPoint
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Trajectory = append(s.Trajectory, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"trajectory\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PredictionResponsePredictionItem")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfPredictionResponsePredictionItem) {
|
|
name = jsonFieldsNameOfPredictionResponsePredictionItem[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PredictionResponsePredictionItem) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionResponsePredictionItem) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PredictionResponsePredictionItemStage as json.
|
|
func (s PredictionResponsePredictionItemStage) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes PredictionResponsePredictionItemStage from json.
|
|
func (s *PredictionResponsePredictionItemStage) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionResponsePredictionItemStage to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch PredictionResponsePredictionItemStage(v) {
|
|
case PredictionResponsePredictionItemStageAscent:
|
|
*s = PredictionResponsePredictionItemStageAscent
|
|
case PredictionResponsePredictionItemStageDescent:
|
|
*s = PredictionResponsePredictionItemStageDescent
|
|
case PredictionResponsePredictionItemStageFloat:
|
|
*s = PredictionResponsePredictionItemStageFloat
|
|
default:
|
|
*s = PredictionResponsePredictionItemStage(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s PredictionResponsePredictionItemStage) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionResponsePredictionItemStage) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PredictionResponseRequest) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PredictionResponseRequest) encodeFields(e *jx.Encoder) {
|
|
{
|
|
if s.Dataset.Set {
|
|
e.FieldStart("dataset")
|
|
s.Dataset.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.LaunchLatitude.Set {
|
|
e.FieldStart("launch_latitude")
|
|
s.LaunchLatitude.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.LaunchLongitude.Set {
|
|
e.FieldStart("launch_longitude")
|
|
s.LaunchLongitude.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.LaunchDatetime.Set {
|
|
e.FieldStart("launch_datetime")
|
|
s.LaunchDatetime.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.LaunchAltitude.Set {
|
|
e.FieldStart("launch_altitude")
|
|
s.LaunchAltitude.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Profile.Set {
|
|
e.FieldStart("profile")
|
|
s.Profile.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.AscentRate.Set {
|
|
e.FieldStart("ascent_rate")
|
|
s.AscentRate.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.BurstAltitude.Set {
|
|
e.FieldStart("burst_altitude")
|
|
s.BurstAltitude.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.DescentRate.Set {
|
|
e.FieldStart("descent_rate")
|
|
s.DescentRate.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPredictionResponseRequest = [9]string{
|
|
0: "dataset",
|
|
1: "launch_latitude",
|
|
2: "launch_longitude",
|
|
3: "launch_datetime",
|
|
4: "launch_altitude",
|
|
5: "profile",
|
|
6: "ascent_rate",
|
|
7: "burst_altitude",
|
|
8: "descent_rate",
|
|
}
|
|
|
|
// Decode decodes PredictionResponseRequest from json.
|
|
func (s *PredictionResponseRequest) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionResponseRequest to nil")
|
|
}
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "dataset":
|
|
if err := func() error {
|
|
s.Dataset.Reset()
|
|
if err := s.Dataset.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"dataset\"")
|
|
}
|
|
case "launch_latitude":
|
|
if err := func() error {
|
|
s.LaunchLatitude.Reset()
|
|
if err := s.LaunchLatitude.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"launch_latitude\"")
|
|
}
|
|
case "launch_longitude":
|
|
if err := func() error {
|
|
s.LaunchLongitude.Reset()
|
|
if err := s.LaunchLongitude.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"launch_longitude\"")
|
|
}
|
|
case "launch_datetime":
|
|
if err := func() error {
|
|
s.LaunchDatetime.Reset()
|
|
if err := s.LaunchDatetime.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"launch_datetime\"")
|
|
}
|
|
case "launch_altitude":
|
|
if err := func() error {
|
|
s.LaunchAltitude.Reset()
|
|
if err := s.LaunchAltitude.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"launch_altitude\"")
|
|
}
|
|
case "profile":
|
|
if err := func() error {
|
|
s.Profile.Reset()
|
|
if err := s.Profile.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"profile\"")
|
|
}
|
|
case "ascent_rate":
|
|
if err := func() error {
|
|
s.AscentRate.Reset()
|
|
if err := s.AscentRate.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"ascent_rate\"")
|
|
}
|
|
case "burst_altitude":
|
|
if err := func() error {
|
|
s.BurstAltitude.Reset()
|
|
if err := s.BurstAltitude.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"burst_altitude\"")
|
|
}
|
|
case "descent_rate":
|
|
if err := func() error {
|
|
s.DescentRate.Reset()
|
|
if err := s.DescentRate.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"descent_rate\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PredictionResponseRequest")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PredictionResponseRequest) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionResponseRequest) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s PredictionResponseWarnings) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields implements json.Marshaler.
|
|
func (s PredictionResponseWarnings) encodeFields(e *jx.Encoder) {
|
|
for k, elem := range s {
|
|
e.FieldStart(k)
|
|
|
|
if len(elem) != 0 {
|
|
e.Raw(elem)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Decode decodes PredictionResponseWarnings from json.
|
|
func (s *PredictionResponseWarnings) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionResponseWarnings to nil")
|
|
}
|
|
m := s.init()
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
var elem jx.Raw
|
|
if err := func() error {
|
|
v, err := d.RawAppend(nil)
|
|
elem = jx.Raw(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrapf(err, "decode field %q", k)
|
|
}
|
|
m[string(k)] = elem
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PredictionResponseWarnings")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s PredictionResponseWarnings) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionResponseWarnings) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PredictionV2Request) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PredictionV2Request) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("launch")
|
|
s.Launch.Encode(e)
|
|
}
|
|
{
|
|
if s.Direction.Set {
|
|
e.FieldStart("direction")
|
|
s.Direction.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
e.FieldStart("profile")
|
|
e.ArrStart()
|
|
for _, elem := range s.Profile {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
{
|
|
if s.Globals != nil {
|
|
e.FieldStart("globals")
|
|
e.ArrStart()
|
|
for _, elem := range s.Globals {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
{
|
|
if s.Options.Set {
|
|
e.FieldStart("options")
|
|
s.Options.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPredictionV2Request = [5]string{
|
|
0: "launch",
|
|
1: "direction",
|
|
2: "profile",
|
|
3: "globals",
|
|
4: "options",
|
|
}
|
|
|
|
// Decode decodes PredictionV2Request from json.
|
|
func (s *PredictionV2Request) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionV2Request to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
s.setDefaults()
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "launch":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
if err := s.Launch.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"launch\"")
|
|
}
|
|
case "direction":
|
|
if err := func() error {
|
|
s.Direction.Reset()
|
|
if err := s.Direction.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"direction\"")
|
|
}
|
|
case "profile":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
s.Profile = make([]StageSpec, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem StageSpec
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Profile = append(s.Profile, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"profile\"")
|
|
}
|
|
case "globals":
|
|
if err := func() error {
|
|
s.Globals = make([]ConstraintSpec, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem ConstraintSpec
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Globals = append(s.Globals, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"globals\"")
|
|
}
|
|
case "options":
|
|
if err := func() error {
|
|
s.Options.Reset()
|
|
if err := s.Options.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"options\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PredictionV2Request")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000101,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfPredictionV2Request) {
|
|
name = jsonFieldsNameOfPredictionV2Request[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PredictionV2Request) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionV2Request) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes PredictionV2RequestDirection as json.
|
|
func (s PredictionV2RequestDirection) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes PredictionV2RequestDirection from json.
|
|
func (s *PredictionV2RequestDirection) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionV2RequestDirection to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch PredictionV2RequestDirection(v) {
|
|
case PredictionV2RequestDirectionForward:
|
|
*s = PredictionV2RequestDirectionForward
|
|
case PredictionV2RequestDirectionReverse:
|
|
*s = PredictionV2RequestDirectionReverse
|
|
default:
|
|
*s = PredictionV2RequestDirection(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s PredictionV2RequestDirection) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionV2RequestDirection) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *PredictionV2Response) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *PredictionV2Response) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("stages")
|
|
e.ArrStart()
|
|
for _, elem := range s.Stages {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
{
|
|
if s.Events != nil {
|
|
e.FieldStart("events")
|
|
e.ArrStart()
|
|
for _, elem := range s.Events {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
{
|
|
e.FieldStart("dataset")
|
|
s.Dataset.Encode(e)
|
|
}
|
|
{
|
|
e.FieldStart("started_at")
|
|
json.EncodeDateTime(e, s.StartedAt)
|
|
}
|
|
{
|
|
e.FieldStart("completed_at")
|
|
json.EncodeDateTime(e, s.CompletedAt)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfPredictionV2Response = [5]string{
|
|
0: "stages",
|
|
1: "events",
|
|
2: "dataset",
|
|
3: "started_at",
|
|
4: "completed_at",
|
|
}
|
|
|
|
// Decode decodes PredictionV2Response from json.
|
|
func (s *PredictionV2Response) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode PredictionV2Response to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "stages":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
s.Stages = make([]StageResult, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem StageResult
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Stages = append(s.Stages, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"stages\"")
|
|
}
|
|
case "events":
|
|
if err := func() error {
|
|
s.Events = make([]EventSummary, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem EventSummary
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Events = append(s.Events, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"events\"")
|
|
}
|
|
case "dataset":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
if err := s.Dataset.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"dataset\"")
|
|
}
|
|
case "started_at":
|
|
requiredBitSet[0] |= 1 << 3
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.StartedAt = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"started_at\"")
|
|
}
|
|
case "completed_at":
|
|
requiredBitSet[0] |= 1 << 4
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.CompletedAt = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"completed_at\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode PredictionV2Response")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00011101,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfPredictionV2Response) {
|
|
name = jsonFieldsNameOfPredictionV2Response[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *PredictionV2Response) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *PredictionV2Response) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *ReadinessResponse) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *ReadinessResponse) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("status")
|
|
s.Status.Encode(e)
|
|
}
|
|
{
|
|
if s.DatasetTime.Set {
|
|
e.FieldStart("dataset_time")
|
|
s.DatasetTime.Encode(e, json.EncodeDateTime)
|
|
}
|
|
}
|
|
{
|
|
if s.ErrorMessage.Set {
|
|
e.FieldStart("error_message")
|
|
s.ErrorMessage.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfReadinessResponse = [3]string{
|
|
0: "status",
|
|
1: "dataset_time",
|
|
2: "error_message",
|
|
}
|
|
|
|
// Decode decodes ReadinessResponse from json.
|
|
func (s *ReadinessResponse) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ReadinessResponse to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "status":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
if err := s.Status.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"status\"")
|
|
}
|
|
case "dataset_time":
|
|
if err := func() error {
|
|
s.DatasetTime.Reset()
|
|
if err := s.DatasetTime.Decode(d, json.DecodeDateTime); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"dataset_time\"")
|
|
}
|
|
case "error_message":
|
|
if err := func() error {
|
|
s.ErrorMessage.Reset()
|
|
if err := s.ErrorMessage.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"error_message\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode ReadinessResponse")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000001,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfReadinessResponse) {
|
|
name = jsonFieldsNameOfReadinessResponse[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *ReadinessResponse) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ReadinessResponse) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes ReadinessResponseStatus as json.
|
|
func (s ReadinessResponseStatus) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes ReadinessResponseStatus from json.
|
|
func (s *ReadinessResponseStatus) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode ReadinessResponseStatus to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch ReadinessResponseStatus(v) {
|
|
case ReadinessResponseStatusOk:
|
|
*s = ReadinessResponseStatusOk
|
|
case ReadinessResponseStatusNotReady:
|
|
*s = ReadinessResponseStatusNotReady
|
|
case ReadinessResponseStatusError:
|
|
*s = ReadinessResponseStatusError
|
|
default:
|
|
*s = ReadinessResponseStatus(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s ReadinessResponseStatus) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *ReadinessResponseStatus) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *Region) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *Region) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("min_lat")
|
|
e.Float64(s.MinLat)
|
|
}
|
|
{
|
|
e.FieldStart("max_lat")
|
|
e.Float64(s.MaxLat)
|
|
}
|
|
{
|
|
e.FieldStart("min_lng")
|
|
e.Float64(s.MinLng)
|
|
}
|
|
{
|
|
e.FieldStart("max_lng")
|
|
e.Float64(s.MaxLng)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfRegion = [4]string{
|
|
0: "min_lat",
|
|
1: "max_lat",
|
|
2: "min_lng",
|
|
3: "max_lng",
|
|
}
|
|
|
|
// Decode decodes Region from json.
|
|
func (s *Region) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode Region to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "min_lat":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.MinLat = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"min_lat\"")
|
|
}
|
|
case "max_lat":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.MaxLat = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"max_lat\"")
|
|
}
|
|
case "min_lng":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.MinLng = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"min_lng\"")
|
|
}
|
|
case "max_lng":
|
|
requiredBitSet[0] |= 1 << 3
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.MaxLng = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"max_lng\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode Region")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00001111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfRegion) {
|
|
name = jsonFieldsNameOfRegion[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *Region) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *Region) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *StageResult) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *StageResult) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("name")
|
|
e.Str(s.Name)
|
|
}
|
|
{
|
|
e.FieldStart("outcome")
|
|
s.Outcome.Encode(e)
|
|
}
|
|
{
|
|
if s.Constraint.Set {
|
|
e.FieldStart("constraint")
|
|
s.Constraint.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Termination.Set {
|
|
e.FieldStart("termination")
|
|
s.Termination.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Events != nil {
|
|
e.FieldStart("events")
|
|
e.ArrStart()
|
|
for _, elem := range s.Events {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
{
|
|
e.FieldStart("trajectory")
|
|
e.ArrStart()
|
|
for _, elem := range s.Trajectory {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfStageResult = [6]string{
|
|
0: "name",
|
|
1: "outcome",
|
|
2: "constraint",
|
|
3: "termination",
|
|
4: "events",
|
|
5: "trajectory",
|
|
}
|
|
|
|
// Decode decodes StageResult from json.
|
|
func (s *StageResult) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode StageResult to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "name":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Name = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"name\"")
|
|
}
|
|
case "outcome":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
if err := s.Outcome.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"outcome\"")
|
|
}
|
|
case "constraint":
|
|
if err := func() error {
|
|
s.Constraint.Reset()
|
|
if err := s.Constraint.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"constraint\"")
|
|
}
|
|
case "termination":
|
|
if err := func() error {
|
|
s.Termination.Reset()
|
|
if err := s.Termination.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"termination\"")
|
|
}
|
|
case "events":
|
|
if err := func() error {
|
|
s.Events = make([]EventSummary, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem EventSummary
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Events = append(s.Events, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"events\"")
|
|
}
|
|
case "trajectory":
|
|
requiredBitSet[0] |= 1 << 5
|
|
if err := func() error {
|
|
s.Trajectory = make([]TrajectoryPoint, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem TrajectoryPoint
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Trajectory = append(s.Trajectory, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"trajectory\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode StageResult")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00100011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfStageResult) {
|
|
name = jsonFieldsNameOfStageResult[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *StageResult) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *StageResult) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode encodes StageResultOutcome as json.
|
|
func (s StageResultOutcome) Encode(e *jx.Encoder) {
|
|
e.Str(string(s))
|
|
}
|
|
|
|
// Decode decodes StageResultOutcome from json.
|
|
func (s *StageResultOutcome) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode StageResultOutcome to nil")
|
|
}
|
|
v, err := d.StrBytes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// Try to use constant string.
|
|
switch StageResultOutcome(v) {
|
|
case StageResultOutcomeStopped:
|
|
*s = StageResultOutcomeStopped
|
|
case StageResultOutcomeFallback:
|
|
*s = StageResultOutcomeFallback
|
|
case StageResultOutcomeContinued:
|
|
*s = StageResultOutcomeContinued
|
|
default:
|
|
*s = StageResultOutcome(v)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s StageResultOutcome) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *StageResultOutcome) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *StageSpec) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *StageSpec) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("name")
|
|
e.Str(s.Name)
|
|
}
|
|
{
|
|
e.FieldStart("model")
|
|
s.Model.Encode(e)
|
|
}
|
|
{
|
|
if s.Constraints != nil {
|
|
e.FieldStart("constraints")
|
|
e.ArrStart()
|
|
for _, elem := range s.Constraints {
|
|
elem.Encode(e)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
{
|
|
if s.FallbackIndex.Set {
|
|
e.FieldStart("fallback_index")
|
|
s.FallbackIndex.Encode(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfStageSpec = [4]string{
|
|
0: "name",
|
|
1: "model",
|
|
2: "constraints",
|
|
3: "fallback_index",
|
|
}
|
|
|
|
// Decode decodes StageSpec from json.
|
|
func (s *StageSpec) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode StageSpec to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "name":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Name = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"name\"")
|
|
}
|
|
case "model":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
if err := s.Model.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"model\"")
|
|
}
|
|
case "constraints":
|
|
if err := func() error {
|
|
s.Constraints = make([]ConstraintSpec, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem ConstraintSpec
|
|
if err := elem.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
s.Constraints = append(s.Constraints, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"constraints\"")
|
|
}
|
|
case "fallback_index":
|
|
if err := func() error {
|
|
s.FallbackIndex.Reset()
|
|
if err := s.FallbackIndex.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"fallback_index\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode StageSpec")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfStageSpec) {
|
|
name = jsonFieldsNameOfStageSpec[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *StageSpec) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *StageSpec) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *StatusResponse) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *StatusResponse) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("source")
|
|
e.Str(s.Source)
|
|
}
|
|
{
|
|
e.FieldStart("uptime")
|
|
e.Str(s.Uptime)
|
|
}
|
|
{
|
|
e.FieldStart("goroutines")
|
|
e.Int(s.Goroutines)
|
|
}
|
|
{
|
|
e.FieldStart("memory_mb")
|
|
e.Int64(s.MemoryMB)
|
|
}
|
|
{
|
|
e.FieldStart("jobs_by_status")
|
|
s.JobsByStatus.Encode(e)
|
|
}
|
|
{
|
|
e.FieldStart("stored_datasets")
|
|
e.Int(s.StoredDatasets)
|
|
}
|
|
{
|
|
e.FieldStart("loaded_datasets")
|
|
e.Int(s.LoadedDatasets)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfStatusResponse = [7]string{
|
|
0: "source",
|
|
1: "uptime",
|
|
2: "goroutines",
|
|
3: "memory_mb",
|
|
4: "jobs_by_status",
|
|
5: "stored_datasets",
|
|
6: "loaded_datasets",
|
|
}
|
|
|
|
// Decode decodes StatusResponse from json.
|
|
func (s *StatusResponse) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode StatusResponse to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "source":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Source = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"source\"")
|
|
}
|
|
case "uptime":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Uptime = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"uptime\"")
|
|
}
|
|
case "goroutines":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.Goroutines = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"goroutines\"")
|
|
}
|
|
case "memory_mb":
|
|
requiredBitSet[0] |= 1 << 3
|
|
if err := func() error {
|
|
v, err := d.Int64()
|
|
s.MemoryMB = int64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"memory_mb\"")
|
|
}
|
|
case "jobs_by_status":
|
|
requiredBitSet[0] |= 1 << 4
|
|
if err := func() error {
|
|
if err := s.JobsByStatus.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"jobs_by_status\"")
|
|
}
|
|
case "stored_datasets":
|
|
requiredBitSet[0] |= 1 << 5
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.StoredDatasets = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"stored_datasets\"")
|
|
}
|
|
case "loaded_datasets":
|
|
requiredBitSet[0] |= 1 << 6
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.LoadedDatasets = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"loaded_datasets\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode StatusResponse")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b01111111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfStatusResponse) {
|
|
name = jsonFieldsNameOfStatusResponse[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *StatusResponse) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *StatusResponse) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s StatusResponseJobsByStatus) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields implements json.Marshaler.
|
|
func (s StatusResponseJobsByStatus) encodeFields(e *jx.Encoder) {
|
|
for k, elem := range s {
|
|
e.FieldStart(k)
|
|
|
|
e.Int(elem)
|
|
}
|
|
}
|
|
|
|
// Decode decodes StatusResponseJobsByStatus from json.
|
|
func (s *StatusResponseJobsByStatus) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode StatusResponseJobsByStatus to nil")
|
|
}
|
|
m := s.init()
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
var elem int
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
elem = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrapf(err, "decode field %q", k)
|
|
}
|
|
m[string(k)] = elem
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode StatusResponseJobsByStatus")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s StatusResponseJobsByStatus) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *StatusResponseJobsByStatus) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *SubsetSpec) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *SubsetSpec) encodeFields(e *jx.Encoder) {
|
|
{
|
|
if s.Region.Set {
|
|
e.FieldStart("region")
|
|
s.Region.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.HourRange.Set {
|
|
e.FieldStart("hour_range")
|
|
s.HourRange.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.Members != nil {
|
|
e.FieldStart("members")
|
|
e.ArrStart()
|
|
for _, elem := range s.Members {
|
|
e.Int(elem)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfSubsetSpec = [3]string{
|
|
0: "region",
|
|
1: "hour_range",
|
|
2: "members",
|
|
}
|
|
|
|
// Decode decodes SubsetSpec from json.
|
|
func (s *SubsetSpec) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode SubsetSpec to nil")
|
|
}
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "region":
|
|
if err := func() error {
|
|
s.Region.Reset()
|
|
if err := s.Region.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"region\"")
|
|
}
|
|
case "hour_range":
|
|
if err := func() error {
|
|
s.HourRange.Reset()
|
|
if err := s.HourRange.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"hour_range\"")
|
|
}
|
|
case "members":
|
|
if err := func() error {
|
|
s.Members = make([]int, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem int
|
|
v, err := d.Int()
|
|
elem = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
s.Members = append(s.Members, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"members\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode SubsetSpec")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *SubsetSpec) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *SubsetSpec) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *TawhiriPoint) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *TawhiriPoint) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("datetime")
|
|
json.EncodeDateTime(e, s.Datetime)
|
|
}
|
|
{
|
|
e.FieldStart("latitude")
|
|
e.Float64(s.Latitude)
|
|
}
|
|
{
|
|
e.FieldStart("longitude")
|
|
e.Float64(s.Longitude)
|
|
}
|
|
{
|
|
e.FieldStart("altitude")
|
|
e.Float64(s.Altitude)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfTawhiriPoint = [4]string{
|
|
0: "datetime",
|
|
1: "latitude",
|
|
2: "longitude",
|
|
3: "altitude",
|
|
}
|
|
|
|
// Decode decodes TawhiriPoint from json.
|
|
func (s *TawhiriPoint) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode TawhiriPoint to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "datetime":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.Datetime = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"datetime\"")
|
|
}
|
|
case "latitude":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Latitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"latitude\"")
|
|
}
|
|
case "longitude":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Longitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"longitude\"")
|
|
}
|
|
case "altitude":
|
|
requiredBitSet[0] |= 1 << 3
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Altitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"altitude\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode TawhiriPoint")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00001111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfTawhiriPoint) {
|
|
name = jsonFieldsNameOfTawhiriPoint[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *TawhiriPoint) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *TawhiriPoint) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *TerminationInfo) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *TerminationInfo) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("violation_time")
|
|
json.EncodeDateTime(e, s.ViolationTime)
|
|
}
|
|
{
|
|
e.FieldStart("violation_state")
|
|
s.ViolationState.Encode(e)
|
|
}
|
|
{
|
|
e.FieldStart("refined_time")
|
|
json.EncodeDateTime(e, s.RefinedTime)
|
|
}
|
|
{
|
|
e.FieldStart("refined_state")
|
|
s.RefinedState.Encode(e)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfTerminationInfo = [4]string{
|
|
0: "violation_time",
|
|
1: "violation_state",
|
|
2: "refined_time",
|
|
3: "refined_state",
|
|
}
|
|
|
|
// Decode decodes TerminationInfo from json.
|
|
func (s *TerminationInfo) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode TerminationInfo to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "violation_time":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.ViolationTime = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"violation_time\"")
|
|
}
|
|
case "violation_state":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
if err := s.ViolationState.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"violation_state\"")
|
|
}
|
|
case "refined_time":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.RefinedTime = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"refined_time\"")
|
|
}
|
|
case "refined_state":
|
|
requiredBitSet[0] |= 1 << 3
|
|
if err := func() error {
|
|
if err := s.RefinedState.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"refined_state\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode TerminationInfo")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00001111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfTerminationInfo) {
|
|
name = jsonFieldsNameOfTerminationInfo[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *TerminationInfo) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *TerminationInfo) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *TrajectoryPoint) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *TrajectoryPoint) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("time")
|
|
json.EncodeDateTime(e, s.Time)
|
|
}
|
|
{
|
|
e.FieldStart("latitude")
|
|
e.Float64(s.Latitude)
|
|
}
|
|
{
|
|
e.FieldStart("longitude")
|
|
e.Float64(s.Longitude)
|
|
}
|
|
{
|
|
e.FieldStart("altitude")
|
|
e.Float64(s.Altitude)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfTrajectoryPoint = [4]string{
|
|
0: "time",
|
|
1: "latitude",
|
|
2: "longitude",
|
|
3: "altitude",
|
|
}
|
|
|
|
// Decode decodes TrajectoryPoint from json.
|
|
func (s *TrajectoryPoint) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode TrajectoryPoint to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "time":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.Time = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"time\"")
|
|
}
|
|
case "latitude":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Latitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"latitude\"")
|
|
}
|
|
case "longitude":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Longitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"longitude\"")
|
|
}
|
|
case "altitude":
|
|
requiredBitSet[0] |= 1 << 3
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Altitude = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"altitude\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode TrajectoryPoint")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00001111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfTrajectoryPoint) {
|
|
name = jsonFieldsNameOfTrajectoryPoint[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *TrajectoryPoint) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *TrajectoryPoint) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *WindComponent) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *WindComponent) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("header")
|
|
s.Header.Encode(e)
|
|
}
|
|
{
|
|
e.FieldStart("data")
|
|
e.ArrStart()
|
|
for _, elem := range s.Data {
|
|
e.Float64(elem)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfWindComponent = [2]string{
|
|
0: "header",
|
|
1: "data",
|
|
}
|
|
|
|
// Decode decodes WindComponent from json.
|
|
func (s *WindComponent) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode WindComponent to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "header":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
if err := s.Header.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"header\"")
|
|
}
|
|
case "data":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
s.Data = make([]float64, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem float64
|
|
v, err := d.Float64()
|
|
elem = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
s.Data = append(s.Data, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"data\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode WindComponent")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00000011,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfWindComponent) {
|
|
name = jsonFieldsNameOfWindComponent[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *WindComponent) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *WindComponent) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *WindHeader) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *WindHeader) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("parameterCategory")
|
|
e.Int(s.ParameterCategory)
|
|
}
|
|
{
|
|
e.FieldStart("parameterNumber")
|
|
e.Int(s.ParameterNumber)
|
|
}
|
|
{
|
|
if s.ParameterNumberName.Set {
|
|
e.FieldStart("parameterNumberName")
|
|
s.ParameterNumberName.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
if s.ParameterUnit.Set {
|
|
e.FieldStart("parameterUnit")
|
|
s.ParameterUnit.Encode(e)
|
|
}
|
|
}
|
|
{
|
|
e.FieldStart("nx")
|
|
e.Int(s.Nx)
|
|
}
|
|
{
|
|
e.FieldStart("ny")
|
|
e.Int(s.Ny)
|
|
}
|
|
{
|
|
e.FieldStart("lo1")
|
|
e.Float64(s.Lo1)
|
|
}
|
|
{
|
|
e.FieldStart("la1")
|
|
e.Float64(s.La1)
|
|
}
|
|
{
|
|
e.FieldStart("lo2")
|
|
e.Float64(s.Lo2)
|
|
}
|
|
{
|
|
e.FieldStart("la2")
|
|
e.Float64(s.La2)
|
|
}
|
|
{
|
|
e.FieldStart("dx")
|
|
e.Float64(s.Dx)
|
|
}
|
|
{
|
|
e.FieldStart("dy")
|
|
e.Float64(s.Dy)
|
|
}
|
|
{
|
|
e.FieldStart("refTime")
|
|
e.Str(s.RefTime)
|
|
}
|
|
{
|
|
e.FieldStart("forecastTime")
|
|
e.Int(s.ForecastTime)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfWindHeader = [14]string{
|
|
0: "parameterCategory",
|
|
1: "parameterNumber",
|
|
2: "parameterNumberName",
|
|
3: "parameterUnit",
|
|
4: "nx",
|
|
5: "ny",
|
|
6: "lo1",
|
|
7: "la1",
|
|
8: "lo2",
|
|
9: "la2",
|
|
10: "dx",
|
|
11: "dy",
|
|
12: "refTime",
|
|
13: "forecastTime",
|
|
}
|
|
|
|
// Decode decodes WindHeader from json.
|
|
func (s *WindHeader) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode WindHeader to nil")
|
|
}
|
|
var requiredBitSet [2]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "parameterCategory":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.ParameterCategory = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"parameterCategory\"")
|
|
}
|
|
case "parameterNumber":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.ParameterNumber = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"parameterNumber\"")
|
|
}
|
|
case "parameterNumberName":
|
|
if err := func() error {
|
|
s.ParameterNumberName.Reset()
|
|
if err := s.ParameterNumberName.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"parameterNumberName\"")
|
|
}
|
|
case "parameterUnit":
|
|
if err := func() error {
|
|
s.ParameterUnit.Reset()
|
|
if err := s.ParameterUnit.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"parameterUnit\"")
|
|
}
|
|
case "nx":
|
|
requiredBitSet[0] |= 1 << 4
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.Nx = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"nx\"")
|
|
}
|
|
case "ny":
|
|
requiredBitSet[0] |= 1 << 5
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.Ny = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"ny\"")
|
|
}
|
|
case "lo1":
|
|
requiredBitSet[0] |= 1 << 6
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Lo1 = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"lo1\"")
|
|
}
|
|
case "la1":
|
|
requiredBitSet[0] |= 1 << 7
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.La1 = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"la1\"")
|
|
}
|
|
case "lo2":
|
|
requiredBitSet[1] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Lo2 = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"lo2\"")
|
|
}
|
|
case "la2":
|
|
requiredBitSet[1] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.La2 = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"la2\"")
|
|
}
|
|
case "dx":
|
|
requiredBitSet[1] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Dx = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"dx\"")
|
|
}
|
|
case "dy":
|
|
requiredBitSet[1] |= 1 << 3
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.Dy = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"dy\"")
|
|
}
|
|
case "refTime":
|
|
requiredBitSet[1] |= 1 << 4
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.RefTime = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"refTime\"")
|
|
}
|
|
case "forecastTime":
|
|
requiredBitSet[1] |= 1 << 5
|
|
if err := func() error {
|
|
v, err := d.Int()
|
|
s.ForecastTime = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"forecastTime\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode WindHeader")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [2]uint8{
|
|
0b11110011,
|
|
0b00111111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfWindHeader) {
|
|
name = jsonFieldsNameOfWindHeader[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *WindHeader) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *WindHeader) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|
|
|
|
// Encode implements json.Marshaler.
|
|
func (s *WindMeta) Encode(e *jx.Encoder) {
|
|
e.ObjStart()
|
|
s.encodeFields(e)
|
|
e.ObjEnd()
|
|
}
|
|
|
|
// encodeFields encodes fields.
|
|
func (s *WindMeta) encodeFields(e *jx.Encoder) {
|
|
{
|
|
e.FieldStart("source")
|
|
e.Str(s.Source)
|
|
}
|
|
{
|
|
e.FieldStart("epoch")
|
|
json.EncodeDateTime(e, s.Epoch)
|
|
}
|
|
{
|
|
e.FieldStart("default_step")
|
|
e.Float64(s.DefaultStep)
|
|
}
|
|
{
|
|
e.FieldStart("min_step")
|
|
e.Float64(s.MinStep)
|
|
}
|
|
{
|
|
e.FieldStart("suggested_altitudes")
|
|
e.ArrStart()
|
|
for _, elem := range s.SuggestedAltitudes {
|
|
e.Int(elem)
|
|
}
|
|
e.ArrEnd()
|
|
}
|
|
{
|
|
e.FieldStart("bbox")
|
|
s.Bbox.Encode(e)
|
|
}
|
|
}
|
|
|
|
var jsonFieldsNameOfWindMeta = [6]string{
|
|
0: "source",
|
|
1: "epoch",
|
|
2: "default_step",
|
|
3: "min_step",
|
|
4: "suggested_altitudes",
|
|
5: "bbox",
|
|
}
|
|
|
|
// Decode decodes WindMeta from json.
|
|
func (s *WindMeta) Decode(d *jx.Decoder) error {
|
|
if s == nil {
|
|
return errors.New("invalid: unable to decode WindMeta to nil")
|
|
}
|
|
var requiredBitSet [1]uint8
|
|
|
|
if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
|
|
switch string(k) {
|
|
case "source":
|
|
requiredBitSet[0] |= 1 << 0
|
|
if err := func() error {
|
|
v, err := d.Str()
|
|
s.Source = string(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"source\"")
|
|
}
|
|
case "epoch":
|
|
requiredBitSet[0] |= 1 << 1
|
|
if err := func() error {
|
|
v, err := json.DecodeDateTime(d)
|
|
s.Epoch = v
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"epoch\"")
|
|
}
|
|
case "default_step":
|
|
requiredBitSet[0] |= 1 << 2
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.DefaultStep = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"default_step\"")
|
|
}
|
|
case "min_step":
|
|
requiredBitSet[0] |= 1 << 3
|
|
if err := func() error {
|
|
v, err := d.Float64()
|
|
s.MinStep = float64(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"min_step\"")
|
|
}
|
|
case "suggested_altitudes":
|
|
requiredBitSet[0] |= 1 << 4
|
|
if err := func() error {
|
|
s.SuggestedAltitudes = make([]int, 0)
|
|
if err := d.Arr(func(d *jx.Decoder) error {
|
|
var elem int
|
|
v, err := d.Int()
|
|
elem = int(v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
s.SuggestedAltitudes = append(s.SuggestedAltitudes, elem)
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"suggested_altitudes\"")
|
|
}
|
|
case "bbox":
|
|
requiredBitSet[0] |= 1 << 5
|
|
if err := func() error {
|
|
if err := s.Bbox.Decode(d); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}(); err != nil {
|
|
return errors.Wrap(err, "decode field \"bbox\"")
|
|
}
|
|
default:
|
|
return d.Skip()
|
|
}
|
|
return nil
|
|
}); err != nil {
|
|
return errors.Wrap(err, "decode WindMeta")
|
|
}
|
|
// Validate required fields.
|
|
var failures []validate.FieldError
|
|
for i, mask := range [1]uint8{
|
|
0b00111111,
|
|
} {
|
|
if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
|
|
// Mask only required fields and check equality to mask using XOR.
|
|
//
|
|
// If XOR result is not zero, result is not equal to expected, so some fields are missed.
|
|
// Bits of fields which would be set are actually bits of missed fields.
|
|
missed := bits.OnesCount8(result)
|
|
for bitN := 0; bitN < missed; bitN++ {
|
|
bitIdx := bits.TrailingZeros8(result)
|
|
fieldIdx := i*8 + bitIdx
|
|
var name string
|
|
if fieldIdx < len(jsonFieldsNameOfWindMeta) {
|
|
name = jsonFieldsNameOfWindMeta[fieldIdx]
|
|
} else {
|
|
name = strconv.Itoa(fieldIdx)
|
|
}
|
|
failures = append(failures, validate.FieldError{
|
|
Name: name,
|
|
Error: validate.ErrFieldRequired,
|
|
})
|
|
// Reset bit.
|
|
result &^= 1 << bitIdx
|
|
}
|
|
}
|
|
}
|
|
if len(failures) > 0 {
|
|
return &validate.Error{Fields: failures}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON implements stdjson.Marshaler.
|
|
func (s *WindMeta) MarshalJSON() ([]byte, error) {
|
|
e := jx.Encoder{}
|
|
s.Encode(&e)
|
|
return e.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalJSON implements stdjson.Unmarshaler.
|
|
func (s *WindMeta) UnmarshalJSON(data []byte) error {
|
|
d := jx.DecodeBytes(data)
|
|
return s.Decode(d)
|
|
}
|