package header import ( "bytes" "errors" "strconv" "codeberg.org/lindenii/furgit/object/typ" ) var ErrInvalidHeader = errors.New("object/header: invalid header") // Parse parses a canonical loose-object header ("type size\x00"). func Parse(data []byte) (ty typ.Type, size uint64, consumed int, err error) { space := bytes.IndexByte(data, ' ') if space <= 0 { return 0, 0, 0, ErrInvalidHeader } nulRel := bytes.IndexByte(data[space+1:], 0) if nulRel < 0 { return 0, 0, 0, ErrInvalidHeader } nul := space + 1 + nulRel ty, err = typ.Parse(string(data[:space])) if err != nil { return 0, 0, 0, ErrInvalidHeader } sizeBytes := data[space+1 : nul] if len(sizeBytes) == 0 { return 0, 0, 0, ErrInvalidHeader } size, err = strconv.ParseUint(string(sizeBytes), 10, 64) if err != nil { return 0, 0, 0, ErrInvalidHeader } return ty, size, nul + 1, nil }