diff pkg/mesh/meshserialize.go @ 5691:9d2e74225104 sr-v2

Some refactoring to clean up deserialization.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 12 Feb 2024 12:48:07 +0100
parents da9720b4aa42
children d920f0fa2f04
line wrap: on
line diff
--- a/pkg/mesh/meshserialize.go	Mon Feb 12 10:49:20 2024 +0100
+++ b/pkg/mesh/meshserialize.go	Mon Feb 12 12:48:07 2024 +0100
@@ -20,6 +20,8 @@
 	"encoding/binary"
 	"fmt"
 	"io"
+
+	"gemma.intevation.de/gemma/pkg/log"
 )
 
 const Version = 1
@@ -116,6 +118,21 @@
 	}
 }
 
+// deserializer is a generic function to apply a chain of
+// deserializer function to an object given a reader.
+func deserializer[T any](
+	r *bufio.Reader,
+	t T,
+	fns ...func(T, *bufio.Reader) error,
+) error {
+	for _, fn := range fns {
+		if err := fn(t, r); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
 func (s *STRTree) serializeEntries(w io.Writer) error {
 	return binary.Write(w, binary.LittleEndian, uint8(s.Entries))
 }
@@ -135,3 +152,28 @@
 	}
 	return t.Max.Write(w)
 }
+
+func (t *Tin) deserializeExtent(r *bufio.Reader) error {
+	if err := t.Min.Read(r); err != nil {
+		return err
+	}
+	if err := t.Max.Read(r); err != nil {
+		return err
+	}
+	log.Infof("BBOX: [[%f, %f, %f], [%f, %f, %f]]\n",
+		t.Min.X, t.Min.Y, t.Min.Z,
+		t.Max.X, t.Max.Y, t.Max.Z)
+	return nil
+}
+
+func (t *Tin) serializeEPSG(w io.Writer) error {
+	return binary.Write(w, binary.LittleEndian, t.EPSG)
+}
+
+func (t *Tin) deserializeEPSG(r *bufio.Reader) error {
+	if err := binary.Read(r, binary.LittleEndian, &t.EPSG); err != nil {
+		return err
+	}
+	log.Infof("EPSG: %d\n", t.EPSG)
+	return nil
+}