1// Copyright 2015 Keybase, Inc. All rights reserved. Use of 2// this source code is governed by the included BSD license. 3 4package libkb 5 6import ( 7 "bufio" 8 "bytes" 9 "io" 10) 11 12// BufferCloser is a Buffer that satisfies the io.Closer 13// interface. 14type BufferCloser struct { 15 *bytes.Buffer 16} 17 18func NewBufferCloser() *BufferCloser { 19 return &BufferCloser{Buffer: new(bytes.Buffer)} 20} 21 22func (b *BufferCloser) Close() error { return nil } 23 24// BufferWriter has a bufio Writer that will Flush before Close. 25type BufferWriter struct { 26 wc io.WriteCloser 27 w *bufio.Writer 28} 29 30func NewBufferWriter(wc io.WriteCloser) *BufferWriter { 31 return &BufferWriter{ 32 wc: wc, 33 w: bufio.NewWriter(wc), 34 } 35} 36 37func (b *BufferWriter) Write(p []byte) (n int, err error) { 38 return b.w.Write(p) 39} 40 41func (b *BufferWriter) Close() error { 42 b.w.Flush() 43 return b.wc.Close() 44} 45