Struct: eventstream.Encoder

import "../ibm-cos-sdk-go-v2/aws/protocol/eventstream"

Overview

Encoder provides EventStream message encoding.

Implemented Interfaces

types.AnalyticsFilter, v4.HTTPPresigner, s3.HTTPPresignerV4, types.MetricsFilter, s3.PresignPost, arn.S3ObjectLambdaARN, types.SelectObjectContentEventStream

Method Summary collapse

Method Details

func (e *Encoder) Encode(w io.Writer, msg Message) (err error)

Encode encodes a single EventStream message to the io.Writer the Encoder was created with. An error is returned if writing the message fails.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// File 'aws/protocol/eventstream/encode.go', line 46

func (e *Encoder) Encode(w io.Writer, msg Message) (err error) { e.headersBuf.Reset() e.messageBuf.Reset() var writer io.Writer = e.messageBuf if e.options.Logger != nil && e.options.LogMessages { encodeMsgBuf := bytes.NewBuffer(nil) writer = io.MultiWriter(writer, encodeMsgBuf) defer func() { logMessageEncode(e.options.Logger, encodeMsgBuf, msg, err) }() } if err = EncodeHeaders(e.headersBuf, msg.Headers); err != nil { return err } crc := crc32.New(crc32IEEETable) hashWriter := io.MultiWriter(writer, crc) headersLen := uint32(e.headersBuf.Len()) payloadLen := uint32(len(msg.Payload)) if err = encodePrelude(hashWriter, crc, headersLen, payloadLen); err != nil { return err } if headersLen > 0 { if _, err = io.Copy(hashWriter, e.headersBuf); err != nil { return err } } if payloadLen > 0 { if _, err = hashWriter.Write(msg.Payload); err != nil { return err } } msgCRC := crc.Sum32() if err := binary.Write(writer, binary.BigEndian, msgCRC); err != nil { return err } _, err = io.Copy(w, e.messageBuf) return err }