2
0

Decouple github.com/jackc/chunkreader

This commit is contained in:
Jack Christensen
2019-03-30 12:46:56 -05:00
parent 127e997696
commit bb06e6b3ff
5 changed files with 24 additions and 10 deletions
+2 -4
View File
@@ -4,12 +4,11 @@ import (
"encoding/binary"
"io"
"github.com/jackc/chunkreader"
"github.com/pkg/errors"
)
type Backend struct {
cr *chunkreader.ChunkReader
cr ChunkReader
w io.Writer
// Frontend message flyweights
@@ -31,8 +30,7 @@ type Backend struct {
partialMsg bool
}
func NewBackend(r io.Reader, w io.Writer) (*Backend, error) {
cr := chunkreader.NewChunkReader(r)
func NewBackend(cr ChunkReader, w io.Writer) (*Backend, error) {
return &Backend{cr: cr, w: w}, nil
}
+1 -1
View File
@@ -12,7 +12,7 @@ func TestBackendReceiveInterrupted(t *testing.T) {
server := &interruptReader{}
server.push([]byte{'Q', 0, 0, 0, 6})
backend, err := pgproto3.NewBackend(server, nil)
backend, err := pgproto3.NewBackend(pgproto3.NewChunkReader(server), nil)
if err != nil {
t.Fatal(err)
}
+18
View File
@@ -0,0 +1,18 @@
package pgproto3
import (
"io"
"github.com/jackc/chunkreader"
)
// ChunkReader is an interface to decouple github.com/jackc/chunkreader from this package.
type ChunkReader interface {
// Next returns buf filled with the next n bytes. If an error occurs, buf will be nil. Next must
// not reuse buf. In case of error, Next must preserve partially read data.
Next(n int) (buf []byte, err error)
}
func NewChunkReader(r io.Reader) ChunkReader {
return chunkreader.NewChunkReader(r)
}
+2 -4
View File
@@ -4,12 +4,11 @@ import (
"encoding/binary"
"io"
"github.com/jackc/chunkreader"
"github.com/pkg/errors"
)
type Frontend struct {
cr *chunkreader.ChunkReader
cr ChunkReader
w io.Writer
// Backend message flyweights
@@ -42,8 +41,7 @@ type Frontend struct {
partialMsg bool
}
func NewFrontend(r io.Reader, w io.Writer) (*Frontend, error) {
cr := chunkreader.NewChunkReader(r)
func NewFrontend(cr ChunkReader, w io.Writer) (*Frontend, error) {
return &Frontend{cr: cr, w: w}, nil
}
+1 -1
View File
@@ -37,7 +37,7 @@ func TestFrontendReceiveInterrupted(t *testing.T) {
server := &interruptReader{}
server.push([]byte{'Z', 0, 0, 0, 5})
frontend, err := pgproto3.NewFrontend(server, nil)
frontend, err := pgproto3.NewFrontend(pgproto3.NewChunkReader(server), nil)
if err != nil {
t.Fatal(err)
}