package db0102 import ( "encoding/binary" "errors" "io" ) type Entry struct { key []byte val []byte } func (ent *Entry) Encode() []byte { data := make([]byte, 4+4+len(ent.key)+len(ent.val)) binary.LittleEndian.PutUint32(data[0:4], uint32(len(ent.key))) binary.LittleEndian.PutUint32(data[4:8], uint32(len(ent.val))) copy(data[8:], ent.key) copy(data[8+len(ent.key):], ent.val) return data } func (ent *Entry) Decode(r io.Reader) error { key_len := make([]byte, 4) s, err := r.Read(key_len) if err != nil { return err } if s != 4 { return errors.New("invalid size when reading key length") } val_len := make([]byte, 4) s, err = r.Read(val_len) if err != nil { return err } if s != 4 { return errors.New("invalid size when reading val length") } key_data := make([]byte, binary.LittleEndian.Uint32(key_len)) s, err = r.Read(key_data) if err != nil { return err } if s != int(binary.LittleEndian.Uint32(key_len)) { return errors.New("invalid size when reading key data") } val_data := make([]byte, binary.LittleEndian.Uint32(val_len)) s, err = r.Read(val_data) if err != nil { return err } if s != int(binary.LittleEndian.Uint32(val_len)) { return errors.New("invalid size when reading val data") } ent.key = key_data ent.val = val_data return nil } // QzBQWVJJOUhU https://trialofcode.org/