mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-05-10 20:00:31 +02:00
Merge pull request #9793 from ellemouton/tlvSizeBigSize
tlv: catch unhandled type in SizeBigSize
This commit is contained in:
commit
8b413e89f1
@ -375,16 +375,22 @@ func DBigSize(r io.Reader, val interface{}, buf *[8]byte, l uint64) error {
|
|||||||
return NewTypeForDecodingErr(val, "BigSize", l, 8)
|
return NewTypeForDecodingErr(val, "BigSize", l, 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// constraintUint32Or64 is a type constraint for uint32 or uint64 types.
|
||||||
|
type constraintUint32Or64 interface {
|
||||||
|
uint32 | uint64
|
||||||
|
}
|
||||||
|
|
||||||
// SizeBigSize returns a SizeFunc that can compute the length of BigSize.
|
// SizeBigSize returns a SizeFunc that can compute the length of BigSize.
|
||||||
func SizeBigSize(val interface{}) SizeFunc {
|
func SizeBigSize[T constraintUint32Or64](val *T) SizeFunc {
|
||||||
var size uint64
|
var size uint64
|
||||||
|
|
||||||
if i, ok := val.(*uint32); ok {
|
switch i := any(val).(type) {
|
||||||
size = VarIntSize(uint64(*i))
|
case *uint32:
|
||||||
}
|
|
||||||
|
|
||||||
if i, ok := val.(*uint64); ok {
|
|
||||||
size = VarIntSize(uint64(*i))
|
size = VarIntSize(uint64(*i))
|
||||||
|
case *uint64:
|
||||||
|
size = VarIntSize(*i)
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("unexpected type %T for SizeBigSize", val))
|
||||||
}
|
}
|
||||||
|
|
||||||
return func() uint64 {
|
return func() uint64 {
|
||||||
|
@ -273,14 +273,14 @@ func SortRecords(records []Record) {
|
|||||||
//
|
//
|
||||||
// NOTE: for uint32, we would only gain space reduction if the encoded value is
|
// NOTE: for uint32, we would only gain space reduction if the encoded value is
|
||||||
// no greater than 65535, which requires at most 3 bytes to encode.
|
// no greater than 65535, which requires at most 3 bytes to encode.
|
||||||
func MakeBigSizeRecord(typ Type, val interface{}) Record {
|
func MakeBigSizeRecord[T constraintUint32Or64](typ Type, val *T) Record {
|
||||||
var (
|
var (
|
||||||
staticSize uint64
|
staticSize uint64
|
||||||
sizeFunc SizeFunc
|
sizeFunc SizeFunc
|
||||||
encoder Encoder
|
encoder Encoder
|
||||||
decoder Decoder
|
decoder Decoder
|
||||||
)
|
)
|
||||||
switch val.(type) {
|
switch any(val).(type) {
|
||||||
case *uint32:
|
case *uint32:
|
||||||
sizeFunc = SizeBigSize(val)
|
sizeFunc = SizeBigSize(val)
|
||||||
encoder = EBigSize
|
encoder = EBigSize
|
||||||
|
Loading…
x
Reference in New Issue
Block a user