mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-09-01 18:27:43 +02:00
lnwire: export ReadElements and WriteElements
In this commit, we export the ReadElements and WriteElements functions. We do this as exporting these functions makes it possible for outside packages to define serializations which use the BOLT 1.0 wire format.
This commit is contained in:
@@ -67,14 +67,14 @@ func (a addressType) AddrLen() uint16 {
|
||||
}
|
||||
}
|
||||
|
||||
// writeElement is a one-stop shop to write the big endian representation of
|
||||
// WriteElement is a one-stop shop to write the big endian representation of
|
||||
// any element which is to be serialized for the wire protocol. The passed
|
||||
// io.Writer should be backed by an appropriately sized byte slice, or be able
|
||||
// to dynamically expand to accommodate additional data.
|
||||
//
|
||||
// TODO(roasbeef): this should eventually draw from a buffer pool for
|
||||
// serialization.
|
||||
func writeElement(w io.Writer, element interface{}) error {
|
||||
func WriteElement(w io.Writer, element interface{}) error {
|
||||
switch e := element.(type) {
|
||||
case ShortChanIDEncoding:
|
||||
var b [1]byte
|
||||
@@ -156,7 +156,7 @@ func writeElement(w io.Writer, element interface{}) error {
|
||||
}
|
||||
|
||||
for _, sig := range e {
|
||||
if err := writeElement(w, sig); err != nil {
|
||||
if err := WriteElement(w, sig); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -257,7 +257,7 @@ func writeElement(w io.Writer, element interface{}) error {
|
||||
return err
|
||||
}
|
||||
case FailCode:
|
||||
if err := writeElement(w, uint16(e)); err != nil {
|
||||
if err := WriteElement(w, uint16(e)); err != nil {
|
||||
return err
|
||||
}
|
||||
case ShortChannelID:
|
||||
@@ -371,7 +371,7 @@ func writeElement(w io.Writer, element interface{}) error {
|
||||
// length of the addresses.
|
||||
var addrBuf bytes.Buffer
|
||||
for _, address := range e {
|
||||
if err := writeElement(&addrBuf, address); err != nil {
|
||||
if err := WriteElement(&addrBuf, address); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -379,7 +379,7 @@ func writeElement(w io.Writer, element interface{}) error {
|
||||
// With the addresses fully encoded, we can now write out the
|
||||
// number of bytes needed to encode them.
|
||||
addrLen := addrBuf.Len()
|
||||
if err := writeElement(w, uint16(addrLen)); err != nil {
|
||||
if err := WriteElement(w, uint16(addrLen)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -391,7 +391,7 @@ func writeElement(w io.Writer, element interface{}) error {
|
||||
}
|
||||
}
|
||||
case color.RGBA:
|
||||
if err := writeElements(w, e.R, e.G, e.B); err != nil {
|
||||
if err := WriteElements(w, e.R, e.G, e.B); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -406,17 +406,17 @@ func writeElement(w io.Writer, element interface{}) error {
|
||||
}
|
||||
|
||||
default:
|
||||
return fmt.Errorf("Unknown type in writeElement: %T", e)
|
||||
return fmt.Errorf("Unknown type in WriteElement: %T", e)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// writeElements is writes each element in the elements slice to the passed
|
||||
// io.Writer using writeElement.
|
||||
func writeElements(w io.Writer, elements ...interface{}) error {
|
||||
// WriteElements is writes each element in the elements slice to the passed
|
||||
// io.Writer using WriteElement.
|
||||
func WriteElements(w io.Writer, elements ...interface{}) error {
|
||||
for _, element := range elements {
|
||||
err := writeElement(w, element)
|
||||
err := WriteElement(w, element)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -424,9 +424,9 @@ func writeElements(w io.Writer, elements ...interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// readElement is a one-stop utility function to deserialize any datastructure
|
||||
// ReadElement is a one-stop utility function to deserialize any datastructure
|
||||
// encoded using the serialization format of lnwire.
|
||||
func readElement(r io.Reader, element interface{}) error {
|
||||
func ReadElement(r io.Reader, element interface{}) error {
|
||||
var err error
|
||||
switch e := element.(type) {
|
||||
case *ShortChanIDEncoding:
|
||||
@@ -520,7 +520,7 @@ func readElement(r io.Reader, element interface{}) error {
|
||||
if numSigs > 0 {
|
||||
sigs = make([]Sig, numSigs)
|
||||
for i := 0; i < int(numSigs); i++ {
|
||||
if err := readElement(r, &sigs[i]); err != nil {
|
||||
if err := ReadElement(r, &sigs[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -612,7 +612,7 @@ func readElement(r io.Reader, element interface{}) error {
|
||||
Index: uint32(index),
|
||||
}
|
||||
case *FailCode:
|
||||
if err := readElement(r, (*uint16)(e)); err != nil {
|
||||
if err := ReadElement(r, (*uint16)(e)); err != nil {
|
||||
return err
|
||||
}
|
||||
case *ChannelID:
|
||||
@@ -766,7 +766,7 @@ func readElement(r io.Reader, element interface{}) error {
|
||||
|
||||
*e = addresses
|
||||
case *color.RGBA:
|
||||
err := readElements(r,
|
||||
err := ReadElements(r,
|
||||
&e.R,
|
||||
&e.G,
|
||||
&e.B,
|
||||
@@ -790,18 +790,18 @@ func readElement(r io.Reader, element interface{}) error {
|
||||
}
|
||||
*e = addrBytes[:length]
|
||||
default:
|
||||
return fmt.Errorf("Unknown type in readElement: %T", e)
|
||||
return fmt.Errorf("Unknown type in ReadElement: %T", e)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// readElements deserializes a variable number of elements into the passed
|
||||
// io.Reader, with each element being deserialized according to the readElement
|
||||
// ReadElements deserializes a variable number of elements into the passed
|
||||
// io.Reader, with each element being deserialized according to the ReadElement
|
||||
// function.
|
||||
func readElements(r io.Reader, elements ...interface{}) error {
|
||||
func ReadElements(r io.Reader, elements ...interface{}) error {
|
||||
for _, element := range elements {
|
||||
err := readElement(r, element)
|
||||
err := ReadElement(r, element)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
Reference in New Issue
Block a user