feat: Encode function can optimize byte array handling (#42)
In scenarios where byte array JSON messages are forwarded (e.g., from MQ), the previous approach required unmarshalling into an object before encoding for SSE.
The updated logic allows []byte to be passed directly, simplifying message forwarding and reducing unnecessary conversions.
// before
byteData := messageFromMQ()
data := make(map[string]any)
json.Unmarshal(byteData, &data)
sse.Encode(new(bytes.Buffer), sse.Event{
Data: data,
})
// after
byteData := messageFromMQ()
sse.Encode(new(bytes.Buffer), sse.Event{
Data: byteData,
})
This commit is contained in:
@@ -72,6 +72,14 @@ func writeRetry(w stringWriter, retry uint) {
|
|||||||
|
|
||||||
func writeData(w stringWriter, data interface{}) error {
|
func writeData(w stringWriter, data interface{}) error {
|
||||||
w.WriteString("data:")
|
w.WriteString("data:")
|
||||||
|
|
||||||
|
bData, ok := data.([]byte)
|
||||||
|
if ok {
|
||||||
|
dataReplacer.WriteString(w, string(bData))
|
||||||
|
w.WriteString("\n\n")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
switch kindOfData(data) {
|
switch kindOfData(data) {
|
||||||
case reflect.Struct, reflect.Slice, reflect.Map:
|
case reflect.Struct, reflect.Slice, reflect.Map:
|
||||||
err := json.NewEncoder(w).Encode(data)
|
err := json.NewEncoder(w).Encode(data)
|
||||||
|
|||||||
Reference in New Issue
Block a user