mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-06 01:15:29 +08:00
58 lines
1.2 KiB
Go
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
|
|
}
|