mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-05-09 11:20:19 +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)
|
||||
}
|
||||
|
||||
// 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.
|
||||
func SizeBigSize(val interface{}) SizeFunc {
|
||||
func SizeBigSize[T constraintUint32Or64](val *T) SizeFunc {
|
||||
var size uint64
|
||||
|
||||
if i, ok := val.(*uint32); ok {
|
||||
size = VarIntSize(uint64(*i))
|
||||
}
|
||||
|
||||
if i, ok := val.(*uint64); ok {
|
||||
switch i := any(val).(type) {
|
||||
case *uint32:
|
||||
size = VarIntSize(uint64(*i))
|
||||
case *uint64:
|
||||
size = VarIntSize(*i)
|
||||
default:
|
||||
panic(fmt.Sprintf("unexpected type %T for SizeBigSize", val))
|
||||
}
|
||||
|
||||
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
|
||||
// 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 (
|
||||
staticSize uint64
|
||||
sizeFunc SizeFunc
|
||||
encoder Encoder
|
||||
decoder Decoder
|
||||
)
|
||||
switch val.(type) {
|
||||
switch any(val).(type) {
|
||||
case *uint32:
|
||||
sizeFunc = SizeBigSize(val)
|
||||
encoder = EBigSize
|
||||
|
Loading…
x
Reference in New Issue
Block a user