Browse Source

document public symbols

Tao Wen 8 years ago
parent
commit
3606750b83
3 changed files with 35 additions and 12 deletions
  1. 19 5
      feature_adapter.go
  2. 15 7
      feature_any.go
  3. 1 0
      feature_reflect_extension.go

+ 19 - 5
feature_adapter.go

@@ -5,6 +5,7 @@ import (
 	"io"
 )
 
+// RawMessage to make replace json with jsoniter
 type RawMessage []byte
 
 // Unmarshal adapts to json/encoding Unmarshal API
@@ -24,10 +25,12 @@ func lastNotSpacePos(data []byte) int {
 	return 0
 }
 
+// UnmarshalFromString convenient method to read from string instead of []byte
 func UnmarshalFromString(str string, v interface{}) error {
 	return ConfigDefault.UnmarshalFromString(str, v)
 }
 
+// Get quick method to get value from deeply nested JSON structure
 func Get(data []byte, path ...interface{}) Any {
 	return ConfigDefault.Get(data, path...)
 }
@@ -40,10 +43,12 @@ func Marshal(v interface{}) ([]byte, error) {
 	return ConfigDefault.Marshal(v)
 }
 
+// MarshalIndent same as json.MarshalIndent. Prefix is not supported.
 func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {
 	return ConfigDefault.MarshalIndent(v, prefix, indent)
 }
 
+// MarshalToString convenient method to write as string instead of []byte
 func MarshalToString(v interface{}) (string, error) {
 	return ConfigDefault.MarshalToString(v)
 }
@@ -64,6 +69,7 @@ type Decoder struct {
 	iter *Iterator
 }
 
+// Decode decode JSON into interface{}
 func (adapter *Decoder) Decode(obj interface{}) error {
 	adapter.iter.ReadVal(obj)
 	err := adapter.iter.Error
@@ -73,41 +79,49 @@ func (adapter *Decoder) Decode(obj interface{}) error {
 	return adapter.iter.Error
 }
 
+// More is there more?
 func (adapter *Decoder) More() bool {
 	return adapter.iter.head != adapter.iter.tail
 }
 
+// Buffered remaining buffer
 func (adapter *Decoder) Buffered() io.Reader {
 	remaining := adapter.iter.buf[adapter.iter.head:adapter.iter.tail]
 	return bytes.NewReader(remaining)
 }
 
-func (decoder *Decoder) UseNumber() {
-	origCfg := decoder.iter.cfg.configBeforeFrozen
+// UseNumber for number JSON element, use float64 or json.Number (alias of string)
+func (adapter *Decoder) UseNumber() {
+	origCfg := adapter.iter.cfg.configBeforeFrozen
 	origCfg.UseNumber = true
-	decoder.iter.cfg = origCfg.Froze().(*frozenConfig)
+	adapter.iter.cfg = origCfg.Froze().(*frozenConfig)
 }
 
+// NewEncoder same as json.NewEncoder
 func NewEncoder(writer io.Writer) *Encoder {
 	return ConfigDefault.NewEncoder(writer)
 }
 
+// Encoder same as json.Encoder
 type Encoder struct {
 	stream *Stream
 }
 
+// Encode encode interface{} as JSON to io.Writer
 func (adapter *Encoder) Encode(val interface{}) error {
 	adapter.stream.WriteVal(val)
 	adapter.stream.Flush()
 	return adapter.stream.Error
 }
 
+// SetIndent set the indention. Prefix is not supported
 func (adapter *Encoder) SetIndent(prefix, indent string) {
 	adapter.stream.cfg.indentionStep = len(indent)
 }
 
-func (adapter *Encoder) SetEscapeHTML(escapeHtml bool) {
+// SetEscapeHTML escape html by default, set to false to disable
+func (adapter *Encoder) SetEscapeHTML(escapeHTML bool) {
 	config := adapter.stream.cfg.configBeforeFrozen
-	config.EscapeHTML = escapeHtml
+	config.EscapeHTML = escapeHTML
 	adapter.stream.cfg = config.Froze().(*frozenConfig)
 }

+ 15 - 7
feature_any.go

@@ -6,6 +6,8 @@ import (
 	"reflect"
 )
 
+// Any generic object representation.
+// The lazy json implementation holds []byte and parse lazily.
 type Any interface {
 	LastError() error
 	ValueType() ValueType
@@ -47,30 +49,37 @@ func (any *baseAny) ToVal(obj interface{}) {
 	panic("not implemented")
 }
 
+// WrapInt32 turn int32 into Any interface
 func WrapInt32(val int32) Any {
 	return &int32Any{baseAny{}, val}
 }
 
+// WrapInt64 turn int64 into Any interface
 func WrapInt64(val int64) Any {
 	return &int64Any{baseAny{}, val}
 }
 
+// WrapUint32 turn uint32 into Any interface
 func WrapUint32(val uint32) Any {
 	return &uint32Any{baseAny{}, val}
 }
 
+// WrapUint64 turn uint64 into Any interface
 func WrapUint64(val uint64) Any {
 	return &uint64Any{baseAny{}, val}
 }
 
+// WrapFloat64 turn float64 into Any interface
 func WrapFloat64(val float64) Any {
 	return &floatAny{baseAny{}, val}
 }
 
+// WrapString turn string into Any interface
 func WrapString(val string) Any {
 	return &stringAny{baseAny{}, val}
 }
 
+// Wrap turn a go object into Any interface
 func Wrap(val interface{}) Any {
 	if val == nil {
 		return &nilAny{}
@@ -79,8 +88,8 @@ func Wrap(val interface{}) Any {
 	if isAny {
 		return asAny
 	}
-	type_ := reflect.TypeOf(val)
-	switch type_.Kind() {
+	typ := reflect.TypeOf(val)
+	switch typ.Kind() {
 	case reflect.Slice:
 		return wrapArray(val)
 	case reflect.Struct:
@@ -116,13 +125,13 @@ func Wrap(val interface{}) Any {
 	case reflect.Bool:
 		if val.(bool) == true {
 			return &trueAny{}
-		} else {
-			return &falseAny{}
 		}
+		return &falseAny{}
 	}
-	return &invalidAny{baseAny{}, fmt.Errorf("unsupported type: %v", type_)}
+	return &invalidAny{baseAny{}, fmt.Errorf("unsupported type: %v", typ)}
 }
 
+// ReadAny read next JSON element as an Any object. It is a better json.RawMessage.
 func (iter *Iterator) ReadAny() Any {
 	return iter.readAny()
 }
@@ -220,9 +229,8 @@ func locatePath(iter *Iterator, path []interface{}) Any {
 		case int32:
 			if '*' == pathKey {
 				return iter.readAny().Get(path[i:]...)
-			} else {
-				return newInvalidAny(path[i:])
 			}
+			return newInvalidAny(path[i:])
 		default:
 			return newInvalidAny(path[i:])
 		}

+ 1 - 0
feature_reflect_extension.go

@@ -112,6 +112,7 @@ func (encoder *funcEncoder) IsEmpty(ptr unsafe.Pointer) bool {
 
 // DecoderFunc the function form of TypeDecoder
 type DecoderFunc func(ptr unsafe.Pointer, iter *Iterator)
+
 // EncoderFunc the function form of TypeEncoder
 type EncoderFunc func(ptr unsafe.Pointer, stream *Stream)