tlv: make TlvType method for TlvType interface public

With this change, callers can now examine a struct instance of the
`TlvType` instance to figure out programmatically which integer type is
maps to. This'll be useful when decoding optional TLV types into a wire
struct (knowing when to set it to Some vs None).
This commit is contained in:
Olaoluwa Osuntokun 2024-01-02 16:59:17 -08:00
parent 66cf4396a2
commit 09afc92215
No known key found for this signature in database
GPG Key ID: 3BBD59E99B280306
4 changed files with 315 additions and 105 deletions

View File

@ -20,10 +20,12 @@ package tlv
type tlvType{{ $index }} struct{}
func (t *tlvType{{ $index }}) typeVal() Type {
func (t *tlvType{{ $index }}) TypeVal() Type {
return {{ $index }}
}
func (t *tlvType{{ $index }}) tlv() {}
type TlvType{{ $index }} = *tlvType{{ $index }}
{{- end }}
`

View File

@ -62,7 +62,7 @@ func (t *RecordT[T, V]) Record() Record {
tlvRecord, ok := any(&t.Val).(RecordProducer)
if !ok {
return MakePrimitiveRecord(
t.recordType.typeVal(), &t.Val,
t.recordType.TypeVal(), &t.Val,
)
}
@ -72,7 +72,7 @@ func (t *RecordT[T, V]) Record() Record {
return Record{
value: ogRecord.value,
typ: t.recordType.typeVal(),
typ: t.recordType.TypeVal(),
staticSize: ogRecord.staticSize,
sizeFunc: ogRecord.sizeFunc,
encoder: ogRecord.encoder,

View File

@ -5,7 +5,13 @@ import "fmt"
// TlvType is an interface used to enable binding the integer type of a TLV
// record to the type at compile time.
type TlvType interface {
typeVal() Type
// TypeVal returns the integer TLV type that this TlvType struct
// instance maps to.
TypeVal() Type
// tlv is an internal method to make this a "sealed" interface, meaning
// only this package can declare new instances.
tlv()
}
//go:generate go run internal/gen/gen_tlv_types.go -o tlv_types_generated.go

File diff suppressed because it is too large Load Diff