@@ -19,6 +19,9 @@ var EOD = errors.New("EOD")
19
19
// ErrUnexpectedEOD means that a delimiter was encountered in a malformed frame.
20
20
var ErrUnexpectedEOD = errors .New ("unexpected EOD" )
21
21
22
+ // ErrIncompleteData means a decoder was closed with an incomplete frame.
23
+ var ErrIncompleteFrame = errors .New ("frame incomplete" )
24
+
22
25
// An Encoder implements the io.Writer and io.ByteWriter interfaces. Data
23
26
// written will we be encoded into groups and forwarded.
24
27
type Encoder struct {
@@ -170,12 +173,23 @@ func (d *Decoder) Write(p []byte) (int, error) {
170
173
return len (p ), nil
171
174
}
172
175
176
+ // NeedsMoreData returns true if the decoder needs more data for a full frame.
177
+ func (d * Decoder ) NeedsMoreData () bool {
178
+ return d .codeIndex != 0
179
+ }
180
+
173
181
// Decode decodes and returns a byte slice.
174
182
func Decode (data []byte ) ([]byte , error ) {
175
183
buf := bytes .NewBuffer (make ([]byte , 0 , len (data )))
176
184
d := NewDecoder (buf )
177
185
178
- _ , err := d .Write (data )
186
+ if _ , err := d .Write (data ); err != nil {
187
+ return buf .Bytes (), err
188
+ }
189
+
190
+ if d .NeedsMoreData () {
191
+ return buf .Bytes (), ErrIncompleteFrame
192
+ }
179
193
180
- return buf .Bytes (), err
194
+ return buf .Bytes (), nil
181
195
}
0 commit comments