2
0

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:
Caesar M. Tsai
2024-12-31 15:36:49 +08:00
committed by GitHub
parent e597170caa
commit 3f42f2ed01
+8
View File
@@ -72,6 +72,14 @@ func writeRetry(w stringWriter, retry uint) {
func writeData(w stringWriter, data interface{}) error {
w.WriteString("data:")
bData, ok := data.([]byte)
if ok {
dataReplacer.WriteString(w, string(bData))
w.WriteString("\n\n")
return nil
}
switch kindOfData(data) {
case reflect.Struct, reflect.Slice, reflect.Map:
err := json.NewEncoder(w).Encode(data)