mirror of
https://github.com/minio/minio.git
synced 2024-12-28 08:05:55 -05:00
85e939636f
This PR also adds some comments and simplifies the code. Primary handling is done to ensure that we make sure to honor cached buffer. Added unit tests as well Fixes #7141
42 lines
912 B
Go
42 lines
912 B
Go
package jstream
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
// Predefined errors
|
|
var (
|
|
ErrSyntax = SyntaxError{msg: "invalid character"}
|
|
ErrUnexpectedEOF = SyntaxError{msg: "unexpected end of JSON input"}
|
|
)
|
|
|
|
type errPos [2]int // line number, byte offset where error occurred
|
|
|
|
type SyntaxError struct {
|
|
msg string // description of error
|
|
context string // additional error context
|
|
pos errPos
|
|
atChar byte
|
|
}
|
|
|
|
func (e SyntaxError) Error() string {
|
|
loc := fmt.Sprintf("%s [%d,%d]", quoteChar(e.atChar), e.pos[0], e.pos[1])
|
|
return fmt.Sprintf("%s %s: %s", e.msg, e.context, loc)
|
|
}
|
|
|
|
// quoteChar formats c as a quoted character literal
|
|
func quoteChar(c byte) string {
|
|
// special cases - different from quoted strings
|
|
if c == '\'' {
|
|
return `'\''`
|
|
}
|
|
if c == '"' {
|
|
return `'"'`
|
|
}
|
|
|
|
// use quoted string with different quotation marks
|
|
s := strconv.Quote(string(c))
|
|
return "'" + s[1:len(s)-1] + "'"
|
|
}
|