Files
ds2api/internal/sse/dedupe.go
2026-05-02 21:17:02 +08:00

58 lines
1.2 KiB
Go

package sse
import (
"strings"
"unicode/utf8"
)
const minContinuationSnapshotLen = 32
func TrimContinuationOverlap(existing, incoming string) string {
if incoming == "" {
return ""
}
if existing == "" {
return incoming
}
if utf8.RuneCountInString(incoming) < minContinuationSnapshotLen {
return incoming
}
if len(incoming) > len(existing) {
if strings.HasPrefix(incoming, existing) {
return incoming[len(existing):]
}
return incoming
}
if len(incoming) < len(existing) && strings.HasPrefix(existing, incoming) {
return ""
}
return incoming
}
func TrimContinuationOverlapFromBuilder(existing *strings.Builder, incoming string) string {
if incoming == "" {
return ""
}
if existing == nil || existing.Len() == 0 {
return incoming
}
if utf8.RuneCountInString(incoming) < minContinuationSnapshotLen {
return incoming
}
existingLen := existing.Len()
if len(incoming) > existingLen {
existingStr := existing.String()
if strings.HasPrefix(incoming, existingStr) {
return incoming[existingLen:]
}
return incoming
}
if len(incoming) < existingLen {
existingStr := existing.String()
if strings.HasPrefix(existingStr, incoming) {
return ""
}
}
return incoming
}