// Copyright 2024 Matthew Rich . All rights reserved. package containerlog import ( "io" "encoding/binary" ) func Header(r io.Reader) (s StreamType, size uint64, err error) { var header []byte = make([]byte, 8) if _, err = io.ReadFull(r, header); err == nil { s = StreamType(header[0]) if err = s.Validate(); err == nil { header[0] = 0x0 size = binary.BigEndian.Uint64(header) } } return } func ReadMessage(r io.Reader, size uint64) (message string, err error) { var messageData []byte = make([]byte, size) var bytesRead int if bytesRead, err = r.Read(messageData); err == nil && uint64(bytesRead) == size { message = string(messageData) } return } func Read(r io.Reader) (s StreamType, message string, err error) { var messageSize uint64 if s, messageSize, err = Header(r); err == nil { if message, err = ReadMessage(r, messageSize); err == nil { return } } return }