(bytes []byte)
| 38 | } |
| 39 | |
| 40 | func (h *Header) Deserialize(bytes []byte) error { |
| 41 | if len(bytes) != HeaderSize || bytes[0] != 'C' || bytes[1] != 'S' || bytes[2] != 'U' || bytes[3] != 'P' { |
| 42 | return errors.New("invalid CSUP header") |
| 43 | } |
| 44 | h.Version = binary.LittleEndian.Uint32(bytes[4:]) |
| 45 | h.MetaSize = binary.LittleEndian.Uint64(bytes[8:]) |
| 46 | h.TypeSize = binary.LittleEndian.Uint64(bytes[16:]) |
| 47 | h.DataSize = binary.LittleEndian.Uint64(bytes[24:]) |
| 48 | h.Root = binary.LittleEndian.Uint32(bytes[32:]) |
| 49 | if h.Version != Version { |
| 50 | return fmt.Errorf("CSUP version mismatch: expected %d, found %d", Version, h.Version) |
| 51 | } |
| 52 | if h.MetaSize > MaxMetaSize { |
| 53 | return fmt.Errorf("CSUP metadata section too big: %d bytes", h.MetaSize) |
| 54 | } |
| 55 | if h.MetaSize > MaxTypeSize { |
| 56 | return fmt.Errorf("CSUP type section too big: %d bytes", h.TypeSize) |
| 57 | } |
| 58 | if h.DataSize > MaxDataSize { |
| 59 | return fmt.Errorf("CSUP data section too big: %d bytes", h.DataSize) |
| 60 | } |
| 61 | return nil |
| 62 | } |
| 63 | |
| 64 | func (h *Header) ObjectSize() uint64 { |
| 65 | return HeaderSize + h.MetaSize + h.TypeSize + h.DataSize |
no test coverage detected