Mercurial > gemma
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 +}