From ec965caa27478ba195149bb8886b8f27522d5bdd Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Wed, 4 Jun 2025 12:20:04 -0400 Subject: [PATCH] codec: Add Encodable, Decodable interfaces --- codec/decode.go | 8 ++++++++ codec/encode.go | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/codec/decode.go b/codec/decode.go index e665e99..1c27312 100644 --- a/codec/decode.go +++ b/codec/decode.go @@ -2,6 +2,14 @@ package codec import "io" +// Decodable is any type that can decode itself from a decoder. +type Decodable interface { + // Decode reads data from decoder, replacing the data of the object. It + // returns the amount of bytes written, and an error if the write + // stopped early. + Decode(decoder *Decoder) (n int, err error) +} + // Decoder wraps an [io.Reader] and decodes data from it. type Decoder struct { io.Reader diff --git a/codec/encode.go b/codec/encode.go index bbfbd6b..2c96bba 100644 --- a/codec/encode.go +++ b/codec/encode.go @@ -2,6 +2,13 @@ package codec import "io" +// Encodable is any type that can write itself to an encoder. +type Encodable interface { + // Encode sends data to encoder. It returns the amount of bytes written, + // and an error if the write stopped early. + Encode(encoder *Encoder) (n int, err error) +} + // Encoder wraps an [io.Writer] and encodes data to it. type Encoder struct { io.Writer