2024-05-14 23:23:03 +03:00
|
|
|
package encoder
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2024-05-15 11:59:54 +03:00
|
|
|
"gitea.24example.ru/spavelit/dadata/client/transport"
|
2024-05-14 23:23:03 +03:00
|
|
|
"io"
|
|
|
|
)
|
|
|
|
|
|
|
|
// RawEncoderFactory is a factory for noop-encoder that just writes to transport io.Writer.
|
|
|
|
func RawEncoderFactory() transport.EncoderFactory {
|
|
|
|
return func(w io.Writer) transport.Encoder {
|
|
|
|
return func(v interface{}) (err error) {
|
|
|
|
switch value := v.(type) {
|
|
|
|
case *string:
|
|
|
|
_, err = w.Write([]byte(*value))
|
|
|
|
case string:
|
|
|
|
_, err = w.Write([]byte(value))
|
|
|
|
case *[]byte:
|
|
|
|
_, err = w.Write(*value)
|
|
|
|
case []byte:
|
|
|
|
_, err = w.Write(value)
|
|
|
|
case io.Reader:
|
|
|
|
_, err = io.Copy(w, value)
|
|
|
|
case io.WriterTo:
|
|
|
|
_, err = value.WriteTo(w)
|
|
|
|
default:
|
|
|
|
err = fmt.Errorf("can not encode from value: %#v", v)
|
|
|
|
}
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// RawDecoderFactory is a factory for noop-decoder that just reads from transport io.Reader.
|
|
|
|
func RawDecoderFactory() transport.DecoderFactory {
|
|
|
|
return func(r io.Reader) transport.Decoder {
|
|
|
|
return func(v interface{}) (err error) {
|
|
|
|
switch value := v.(type) {
|
|
|
|
case *[]byte:
|
|
|
|
_, err = r.Read(*value)
|
|
|
|
case []byte:
|
|
|
|
_, err = r.Read(value)
|
|
|
|
case io.Writer:
|
|
|
|
_, err = io.Copy(value, r)
|
|
|
|
case io.ReaderFrom:
|
|
|
|
_, err = value.ReadFrom(r)
|
|
|
|
default:
|
|
|
|
err = fmt.Errorf("can not decode into value: %#v", v)
|
|
|
|
}
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|