MCPcopy Create free account
hub / github.com/baidu/EasyFaaS / ffjsonWriteJSONBytesAsString

Function ffjsonWriteJSONBytesAsString

pkg/userlog/userlog.go:202–262  ·  view source on GitHub ↗
(buf *bytes.Buffer, s []byte)

Source from the content-addressed store, hash-verified

200}
201
202func ffjsonWriteJSONBytesAsString(buf *bytes.Buffer, s []byte) {
203 const hex = "0123456789abcdef"
204
205 buf.WriteByte('"')
206 start := 0
207 for i := 0; i < len(s); {
208 if b := s[i]; b < utf8.RuneSelf {
209 if 0x20 <= b && b != '\\' && b != '"' && b != '<' && b != '>' && b != '&' {
210 i++
211 continue
212 }
213 if start < i {
214 buf.Write(s[start:i])
215 }
216 switch b {
217 case '\\', '"':
218 buf.WriteByte('\\')
219 buf.WriteByte(b)
220 case '\n':
221 buf.WriteByte('\\')
222 buf.WriteByte('n')
223 case '\r':
224 buf.WriteByte('\\')
225 buf.WriteByte('r')
226 default:
227 buf.WriteString(`\u00`)
228 buf.WriteByte(hex[b>>4])
229 buf.WriteByte(hex[b&0xF])
230 }
231 i++
232 start = i
233 continue
234 }
235 c, size := utf8.DecodeRune(s[i:])
236 if c == utf8.RuneError && size == 1 {
237 if start < i {
238 buf.Write(s[start:i])
239 }
240 buf.WriteString(`\ufffd`)
241 i += size
242 start = i
243 continue
244 }
245
246 if c == '\u2028' || c == '\u2029' {
247 if start < i {
248 buf.Write(s[start:i])
249 }
250 buf.WriteString(`\u202`)
251 buf.WriteByte(hex[c&0xF])
252 i += size
253 start = i
254 continue
255 }
256 i += size
257 }
258 if start < len(s) {
259 buf.Write(s[start:])

Callers 1

MarshalJSONBufMethod · 0.85

Calls 3

WriteByteMethod · 0.80
WriteStringMethod · 0.80
WriteMethod · 0.65

Tested by

no test coverage detected