comparison pkg/mesh/meshserialize.go @ 5686:c33a5354328d sr-v2

Add stubs for de/serialize v2 meshes.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 12 Feb 2024 01:17:22 +0100
parents a87900c0fd11
children 8ff842858434
comparison
equal deleted inserted replaced
5685:0ee8ace01b60 5686:c33a5354328d
16 import ( 16 import (
17 "bufio" 17 "bufio"
18 "bytes" 18 "bytes"
19 "compress/gzip" 19 "compress/gzip"
20 "encoding/binary" 20 "encoding/binary"
21 "errors"
22 "fmt" 21 "fmt"
23 "io" 22 "io"
24 ) 23 )
25 24
26 const Version = 1 25 const Version = 1
49 if err != nil { 48 if err != nil {
50 return nil, 0, err 49 return nil, 0, err
51 } 50 }
52 51
53 version = coalesceVersion(version) 52 version = coalesceVersion(version)
54
55 if err := s.serializeVn(w, version); err != nil { 53 if err := s.serializeVn(w, version); err != nil {
56 return nil, 0, err 54 return nil, 0, err
57 } 55 }
58 56
59 if err := w.Close(); err != nil { 57 if err := w.Close(); err != nil {
62 60
63 return buf.Bytes(), version, nil 61 return buf.Bytes(), version, nil
64 } 62 }
65 63
66 func (s *STRTree) serializeVn(w io.Writer, version int) error { 64 func (s *STRTree) serializeVn(w io.Writer, version int) error {
67 65 switch version {
68 if version > Version { 66 case 1:
69 return fmt.Errorf( 67 return s.serializeV1(w)
70 "cannot serialize mesh version %d. Highest supported version %d", 68 case 2:
71 version, Version) 69 return s.serializeV2(w)
70 default:
71 return fmt.Errorf("cannot serialize mesh version %d", version)
72 } 72 }
73
74 return s.serializeV1(w)
75 } 73 }
76 74
77 // FromBytes restores a STRTree from a binary representation. 75 // FromBytes restores a STRTree from a binary representation.
78 func (s *STRTree) FromBytes(data []byte, version int) error { 76 func (s *STRTree) FromBytes(data []byte, version int) error {
79
80 version = coalesceVersion(version) 77 version = coalesceVersion(version)
81
82 if version > Version {
83 return fmt.Errorf(
84 "cannot deserialize mesh version %d. Highest supported version %d",
85 version, Version)
86 }
87
88 r, err := gzip.NewReader(bytes.NewReader(data)) 78 r, err := gzip.NewReader(bytes.NewReader(data))
89 if err != nil { 79 if err != nil {
90 return err 80 return err
91 } 81 }
92 return s.deserialize(bufio.NewReader(r), version) 82 return s.deserialize(bufio.NewReader(r), version)
100 } 90 }
101 91
102 if bytes.HasPrefix(header, []byte(magicHeader)) { 92 if bytes.HasPrefix(header, []byte(magicHeader)) {
103 realVersion := int(binary.LittleEndian.Uint32(header[4:])) 93 realVersion := int(binary.LittleEndian.Uint32(header[4:]))
104 if realVersion != version { 94 if realVersion != version {
105 return fmt.Errorf("sounding result version mismatch: Have %d expect %d", 95 return fmt.Errorf("mesh version mismatch: Have %d expect %d",
106 realVersion, version) 96 realVersion, version)
107 } 97 }
108 return s.deserializeVn(r, realVersion) 98 return s.deserializeVn(r, realVersion)
109 } 99 }
110 100
111 return s.deserializeV1(r) 101 return s.deserializeV1(r)
112 } 102 }
113 103
114 func (s *STRTree) deserializeVn(r *bufio.Reader, version int) error { 104 func (s *STRTree) deserializeVn(r *bufio.Reader, version int) error {
115 if version == 1 { 105 switch version {
106 case 1:
116 return s.deserializeV1(r) 107 return s.deserializeV1(r)
108 case 2:
109 return s.deserializeV2(r)
110 default:
111 return fmt.Errorf("cannot deserialize mesh version %d", version)
117 } 112 }
118 // TODO: Implement me!
119 return errors.New("not implemented, yet")
120 } 113 }