diff options
| author | bt <bt@rctt.net> | 2026-03-08 00:24:44 +0100 |
|---|---|---|
| committer | bt <bt@rctt.net> | 2026-03-08 00:24:44 +0100 |
| commit | 782394e769af6d89a6bc0656af1e4663c30844d6 (patch) | |
| tree | 8756d084ded1b3574383a301434cbb5a2f500397 | |
| parent | 0deb1e71a0e71432519b7dc0998ebbf06f2225b0 (diff) | |
| download | solec-782394e769af6d89a6bc0656af1e4663c30844d6.tar.gz solec-782394e769af6d89a6bc0656af1e4663c30844d6.zip | |
Move data parsing to data.go
| -rw-r--r-- | core/data.go | 81 | ||||
| -rw-r--r-- | core/network.go | 76 |
2 files changed, 81 insertions, 76 deletions
diff --git a/core/data.go b/core/data.go index 0bd8200..7ccc4f9 100644 --- a/core/data.go +++ b/core/data.go @@ -1,5 +1,12 @@ package core +import ( + "encoding/binary" + "fmt" + "io" + "strings" +) + type Marshaler interface { Marshal() []any } @@ -22,10 +29,84 @@ func (h Handshake) Marshal() []any { return []any{h.Version} } +func ReadHandshake(r io.Reader) (Handshake, error) { + var d Handshake + err := read(r, &d.Version) + return d, err +} + type Test struct { Message string } +func ReadTest(r io.Reader) (Test, error) { + var d Test + err := readString(r, &d.Message) + return d, err +} + func (h Test) Marshal() []any { return []any{append([]byte(h.Message), 0x0)} } + +func Read(r io.Reader) (any, error) { + dType, err := ReadDataType(r) + if err != nil { + return nil, fmt.Errorf("cannot read data type", err) + } + + switch dType { + case TypeUnknown: + return nil, fmt.Errorf("cannot read data type 0x00 (TypeUnknown)") + case TypeHandshake: + return ReadHandshake(r) + case TypeTest: + return ReadTest(r) + default: + return nil, fmt.Errorf("unsupported type: %v", dType) + } +} + +func ReadDataType(r io.Reader) (DataType, error) { + var data uint8 + if err := read(r, &data); err != nil { + return TypeUnknown, err + } + + dType := DataType(data) + + return dType, nil +} + +func readString(r io.Reader, ptr *string) error { + var ( + sb strings.Builder + buf byte + ) + + for { + if err := read(r, &buf); err != nil { + return err + } + + if buf == 0x0 { + break + } + + if err := sb.WriteByte(buf); err != nil { + fmt.Errorf("cannot write byte to string buffer: %v", err) + } + } + + *ptr = sb.String() + return nil +} + +func read(r io.Reader, ptr any) error { + err := binary.Read(r, binary.BigEndian, ptr) + if err != nil { + return fmt.Errorf("cannot read: %v", err) + } + + return nil +} diff --git a/core/network.go b/core/network.go index 40c4112..50c398f 100644 --- a/core/network.go +++ b/core/network.go @@ -3,9 +3,7 @@ package core import ( "encoding/binary" "fmt" - "io" "net" - "strings" ) func Send(conn net.Conn, dataType DataType, data Marshaler) error { @@ -21,77 +19,3 @@ func Send(conn net.Conn, dataType DataType, data Marshaler) error { return nil } - -func Read(r io.Reader) (any, error) { - dType, err := ReadDataType(r) - if err != nil { - return nil, fmt.Errorf("cannot read data type", err) - } - - switch dType { - case TypeUnknown: - return nil, fmt.Errorf("cannot read data type 0x00 (TypeUnknown)") - case TypeHandshake: - return ReadHandshake(r) - case TypeTest: - return ReadTest(r) - default: - return nil, fmt.Errorf("unsupported type: %v", dType) - } -} - -func ReadDataType(r io.Reader) (DataType, error) { - var data uint8 - if err := read(r, &data); err != nil { - return TypeUnknown, err - } - - dType := DataType(data) - - return dType, nil -} - -func ReadHandshake(r io.Reader) (Handshake, error) { - var d Handshake - err := read(r, &d.Version) - return d, err -} - -func ReadTest(r io.Reader) (Test, error) { - var d Test - err := readString(r, &d.Message) - return d, err -} - -func readString(r io.Reader, ptr *string) error { - var ( - sb strings.Builder - buf byte - ) - - for { - if err := read(r, &buf); err != nil { - return err - } - - if buf == 0x0 { - break - } - - if err := sb.WriteByte(buf); err != nil { - fmt.Errorf("cannot write byte to string buffer: %v", err) - } - } - - *ptr = sb.String() - return nil -} - -func read(r io.Reader, ptr any) error { - err := binary.Read(r, binary.BigEndian, ptr) - if err != nil { - return fmt.Errorf("cannot read: %v", err) - } - - return nil -} |
