48 lines
1013 B
Go
48 lines
1013 B
Go
package splco
|
|
|
|
// why doesnt Go have this built in
|
|
// 30% of AI generated code
|
|
// simple helper
|
|
|
|
import "errors"
|
|
|
|
var (
|
|
ErrDataTooShort = errors.New("data too short for specified sizes")
|
|
ErrInvalidDataLength = errors.New("data length does not match sum of specified sizes")
|
|
)
|
|
|
|
func Append(data ...[]byte) []byte {
|
|
expLen := 0
|
|
for _, b := range data {
|
|
expLen += len(b)
|
|
}
|
|
return AppendWithSize(expLen, data...)
|
|
}
|
|
|
|
func AppendWithSize(size int, data ...[]byte) []byte {
|
|
return AppendInto(make([]byte, 0, size), data...)
|
|
}
|
|
|
|
func AppendInto(dest []byte, data ...[]byte) []byte {
|
|
for _, b := range data {
|
|
dest = append(dest, b...)
|
|
}
|
|
return dest
|
|
}
|
|
|
|
func Split(data []byte, sizes ...int) ([][]byte, error) {
|
|
result := make([][]byte, len(sizes))
|
|
offset := 0
|
|
for i, size := range sizes {
|
|
if offset+size > len(data) {
|
|
return nil, ErrDataTooShort
|
|
}
|
|
result[i] = data[offset : offset+size]
|
|
offset += size
|
|
}
|
|
if offset != len(data) {
|
|
return nil, ErrInvalidDataLength
|
|
}
|
|
return result, nil
|
|
}
|