Flatbuffers: логическое значение таблицы устанавливается с byte вместо bool

Моя таблица, скомпилированная для go, в конечном итоге использует GetByte и PrependByteSlot вместо альтернативы Bool (GetBool, PrependBoolSlot).

Могу ли я что-нибудь сделать, чтобы изменить это? Если нет, то где найти подтверждение того, что байт будет равен 0 или 1 (false/true)?

Вот таблица, показывающая это точное поведение:

table BooleanContent {
  value:bool = false;
}

Вот сгенерированный файл:

// Code generated by the FlatBuffers compiler. DO NOT EDIT.

package GatewayProtocol

import (
    flatbuffers "github.com/google/flatbuffers/go"
)

type BooleanContent struct {
    _tab flatbuffers.Table
}

func GetRootAsBooleanContent(buf []byte, offset flatbuffers.UOffsetT) *BooleanContent {
    n := flatbuffers.GetUOffsetT(buf[offset:])
    x := &BooleanContent{}
    x.Init(buf, n+offset)
    return x
}

func (rcv *BooleanContent) Init(buf []byte, i flatbuffers.UOffsetT) {
    rcv._tab.Bytes = buf
    rcv._tab.Pos = i
}

func (rcv *BooleanContent) Table() flatbuffers.Table {
    return rcv._tab
}

func (rcv *BooleanContent) Value() byte {
    o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
    if o != 0 {
        return rcv._tab.GetByte(o + rcv._tab.Pos)
    }
    return 0
}

func (rcv *BooleanContent) MutateValue(n byte) bool {
    return rcv._tab.MutateByteSlot(4, n)
}

func BooleanContentStart(builder *flatbuffers.Builder) {
    builder.StartObject(1)
}
func BooleanContentAddValue(builder *flatbuffers.Builder, value byte) {
    builder.PrependByteSlot(0, value, 0)
}
func BooleanContentEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
    return builder.EndObject()
}


person Sebastien De Varennes    schedule 26.02.2019    source источник


Ответы (1)


Логические значения, безусловно, хранятся в виде байтов в двоичном формате FlatBuffers, но нет никаких причин, по которым он не может преобразовать их в логические значения при доступе, как это происходит в других языках.

Так что это вполне может быть ошибка в генераторе кода Go, я бы зарегистрировал проблему на github с тегом [Go].

person Aardappel    schedule 26.02.2019
comment
Готово, спасибо за отзыв. ошибка GitHub - person Sebastien De Varennes; 26.02.2019