@@ -17,6 +17,8 @@ import (
1717 "encoding/binary"
1818 "fmt"
1919 "io"
20+
21+ "github.com/weaviate/weaviate/usecases/byteops"
2022)
2123
2224const (
@@ -40,20 +42,20 @@ type Header struct {
4042}
4143
4244func (h * Header ) WriteTo (w io.Writer ) (int64 , error ) {
43- if err := binary . Write ( w , binary . LittleEndian , & h . Level ); err != nil {
44- return - 1 , err
45- }
46- if err := binary . Write ( w , binary . LittleEndian , & h .Version ); err != nil {
47- return - 1 , err
48- }
49- if err := binary . Write ( w , binary . LittleEndian , & h . SecondaryIndices ); err != nil {
50- return - 1 , err
51- }
52- if err := binary . Write ( w , binary . LittleEndian , h . Strategy ); err != nil {
53- return - 1 , err
45+ data := make ([] byte , HeaderSize )
46+ rw := byteops . NewReadWriter ( data )
47+ rw . WriteUint16 ( h . Level )
48+ rw . WriteUint16 ( h .Version )
49+ rw . WriteUint16 ( h . SecondaryIndices )
50+ rw . WriteUint16 ( uint16 ( h . Strategy ))
51+ rw . WriteUint64 ( h . IndexStart )
52+
53+ write , err := w . Write ( data )
54+ if err != nil {
55+ return 0 , err
5456 }
55- if err := binary . Write ( w , binary . LittleEndian , & h . IndexStart ); err != nil {
56- return - 1 , err
57+ if write != HeaderSize {
58+ return 0 , fmt . Errorf ( "expected to write %d bytes, got %d" , HeaderSize , write )
5759 }
5860
5961 return int64 (HeaderSize ), nil
@@ -113,31 +115,26 @@ func (h *Header) SecondaryIndex(source []byte, indexID uint16) ([]byte, error) {
113115}
114116
115117func ParseHeader (r io.Reader ) (* Header , error ) {
116- out := & Header {}
118+ data := make ([] byte , HeaderSize )
117119
118- if err := binary .Read (r , binary .LittleEndian , & out .Level ); err != nil {
120+ full , err := io .ReadFull (r , data )
121+ if err != nil {
119122 return nil , err
120123 }
121-
122- if err := binary .Read (r , binary .LittleEndian , & out .Version ); err != nil {
123- return nil , err
124- }
125-
126- if err := binary .Read (r , binary .LittleEndian , & out .SecondaryIndices ); err != nil {
127- return nil , err
124+ if full != HeaderSize {
125+ return nil , fmt .Errorf ("expected %d bytes, got %d" , HeaderSize , full )
128126 }
127+ rw := byteops .NewReadWriter (data )
128+ out := & Header {}
129+ out .Level = rw .ReadUint16 ()
130+ out .Version = rw .ReadUint16 ()
131+ out .SecondaryIndices = rw .ReadUint16 ()
132+ out .Strategy = Strategy (rw .ReadUint16 ())
133+ out .IndexStart = rw .ReadUint64 ()
129134
130135 if out .Version > CurrentSegmentVersion {
131136 return nil , fmt .Errorf ("unsupported version %d" , out .Version )
132137 }
133138
134- if err := binary .Read (r , binary .LittleEndian , & out .Strategy ); err != nil {
135- return nil , err
136- }
137-
138- if err := binary .Read (r , binary .LittleEndian , & out .IndexStart ); err != nil {
139- return nil , err
140- }
141-
142139 return out , nil
143140}
0 commit comments