summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-03-08 00:24:44 +0100
committerbt <bt@rctt.net>2026-03-08 00:24:44 +0100
commit782394e769af6d89a6bc0656af1e4663c30844d6 (patch)
tree8756d084ded1b3574383a301434cbb5a2f500397
parent0deb1e71a0e71432519b7dc0998ebbf06f2225b0 (diff)
downloadsolec-782394e769af6d89a6bc0656af1e4663c30844d6.tar.gz
solec-782394e769af6d89a6bc0656af1e4663c30844d6.zip
Move data parsing to data.go
-rw-r--r--core/data.go81
-rw-r--r--core/network.go76
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
-}