mirror of
https://github.com/lightninglabs/pool.git
synced 2026-08-13 12:33:04 +02:00
Move WriteElement[s] to the codec package so that packages other than clientdb can use it. For the codec package, we avoid depending on other packages within Pool so that no circular dependencies develop. This requires us to move some of the uintXX casting logic in clientdb/codec.go to call sites.
70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package codec
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
"time"
|
|
|
|
"github.com/btcsuite/btcd/wire"
|
|
"github.com/lightningnetwork/lnd/keychain"
|
|
"github.com/lightningnetwork/lnd/lntypes"
|
|
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
|
"github.com/lightningnetwork/lnd/lnwire"
|
|
)
|
|
|
|
var (
|
|
byteOrder = binary.BigEndian
|
|
)
|
|
|
|
// WriteElements writes each element in the elements slice to the passed buffer
|
|
// using WriteElement.
|
|
func WriteElements(w *bytes.Buffer, elements ...interface{}) error {
|
|
for _, element := range elements {
|
|
err := WriteElement(w, element)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// WriteElement is a one-stop shop to write the big endian representation of
|
|
// any element which is to be serialized.
|
|
func WriteElement(w *bytes.Buffer, element interface{}) error {
|
|
switch e := element.(type) {
|
|
case chainfee.SatPerKWeight:
|
|
return lnwire.WriteElement(w, uint64(e))
|
|
|
|
case *keychain.KeyDescriptor:
|
|
if err := WriteElements(w, e.KeyLocator, e.PubKey); err != nil {
|
|
return err
|
|
}
|
|
|
|
case keychain.KeyLocator:
|
|
if err := binary.Write(w, byteOrder, e.Family); err != nil {
|
|
return err
|
|
}
|
|
if err := binary.Write(w, byteOrder, e.Index); err != nil {
|
|
return err
|
|
}
|
|
|
|
case lntypes.Preimage:
|
|
return lnwire.WriteElement(w, e[:])
|
|
|
|
case [32]byte:
|
|
return lnwire.WriteElement(w, e[:])
|
|
|
|
case time.Time:
|
|
return lnwire.WriteElement(w, uint64(e.UnixNano()))
|
|
|
|
case *wire.MsgTx:
|
|
if err := e.Serialize(w); err != nil {
|
|
return err
|
|
}
|
|
|
|
default:
|
|
return lnwire.WriteElement(w, element)
|
|
}
|
|
|
|
return nil
|
|
}
|