cloudflared-mirror/vendor/github.com/cisco/go-tls-syntax/stream.go

77 lines
1.1 KiB
Go

package syntax
///
/// Write Stream
///
type WriteStream struct {
buffer []byte
}
func NewWriteStream() *WriteStream {
return &WriteStream{}
}
func (s *WriteStream) Data() []byte {
return s.buffer
}
func (s *WriteStream) Write(val interface{}) error {
enc, err := Marshal(val)
if err != nil {
return err
}
s.buffer = append(s.buffer, enc...)
return nil
}
func (s *WriteStream) WriteAll(vals ...interface{}) error {
for _, val := range vals {
err := s.Write(val)
if err != nil {
return err
}
}
return nil
}
///
/// ReadStream
///
type ReadStream struct {
buffer []byte
cursor int
}
func NewReadStream(data []byte) *ReadStream {
return &ReadStream{data, 0}
}
func (s *ReadStream) Read(val interface{}) (int, error) {
read, err := Unmarshal(s.buffer[s.cursor:], val)
if err != nil {
return 0, err
}
s.cursor += read
return read, nil
}
func (s *ReadStream) ReadAll(vals ...interface{}) (int, error) {
read := 0
for _, val := range vals {
readHere, err := s.Read(val)
if err != nil {
return 0, err
}
read += readHere
}
return read, nil
}
func (s *ReadStream) Position() int {
return s.cursor
}