| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package jsoniter
- import (
- "reflect"
- "errors"
- )
- type Decoder interface {
- decode(iter *Iterator, obj interface{})
- }
- type stringDecoder struct {
- }
- func (decoder *stringDecoder) decode(iter *Iterator, obj interface{}) {
- ptr := obj.(*string)
- *ptr = iter.ReadString()
- }
- var DECODER_STRING *stringDecoder
- func init() {
- DECODER_STRING = &stringDecoder{}
- }
- func (iter *Iterator) Read(obj interface{}) {
- type_ := reflect.TypeOf(obj)
- decoder, err := decoderOfType(type_)
- if err != nil {
- iter.Error = err
- return
- }
- decoder.decode(iter, obj)
- }
- func decoderOfType(type_ reflect.Type) (Decoder, error) {
- switch type_.Kind() {
- case reflect.Ptr:
- return decoderOfPtr(type_.Elem())
- default:
- return nil, errors.New("expect ptr")
- }
- }
- func decoderOfPtr(type_ reflect.Type) (Decoder, error) {
- switch type_.Kind() {
- case reflect.String:
- return DECODER_STRING, nil
- default:
- return nil, errors.New("expect string")
- }
- }
|