package stt import "fmt" // ReadNil reads a json object as nil and // returns whether it's a nil or not func (iter *Iterator) ReadNil() (ret bool) { c := iter.nextToken() if c == 'n' { iter.skipBytes('u', 'l', 'l') // null return true } iter.unreadByte() return false } // ReadBool reads t/true/f/false/1/0 as BoolValue func (iter *Iterator) ReadBool() (ret bool) { c := iter.nextToken() if c == 't' { iter.skipBytes('r', 'u', 'e') return true } if c == 'f' { iter.skipBytes('a', 'l', 's', 'e') return false } if c == '0' { return false } if c == '1' { return true } iter.ReportError("ReadBool", "expect t/true/1 or f/false/0, but found "+string([]byte{c})) return } // Skip skips an object and positions to relatively the next object func (iter *Iterator) Skip() { iter.skipString() } func (iter *Iterator) skipString() { if !iter.trySkipString() { iter.unreadByte() iter.ReadString() } } func (iter *Iterator) trySkipString() bool { for i := iter.head; i < iter.tail; i++ { c := iter.buf[i] if c == '/' { iter.head = i return true // valid } } return false } func (iter *Iterator) skipBytes(bytes ...byte) { for _, b := range bytes { if iter.readByte() != b { iter.ReportError("skipBytes", fmt.Sprintf("expect %s", string(bytes))) return } } }