github.com/qiniu/dyn@v1.3.0/jsonext/jsonext.go (about)

     1  package jsonext
     2  
     3  import (
     4  	"reflect"
     5  	"unsafe"
     6  
     7  	. "github.com/qiniu/dyn/proto"
     8  )
     9  
    10  // ----------------------------------------------------------
    11  
    12  var varType = reflect.TypeOf(Var{})
    13  
    14  func encodeVar(e *encodeState, v reflect.Value, quoted bool) {
    15  
    16  	key := v.Interface().(Var).Key
    17  	e.WriteByte('$')
    18  	e.WriteByte('(')
    19  	e.WriteString(key)
    20  	e.WriteByte(')')
    21  }
    22  
    23  // ----------------------------------------------------------
    24  
    25  func UnmarshalString(data string, v interface{}) error {
    26  
    27  	sh := *(*reflect.StringHeader)(unsafe.Pointer(&data))
    28  	arr := (*[1 << 30]byte)(unsafe.Pointer(sh.Data))
    29  	return Unmarshal(arr[:sh.Len], v)
    30  }
    31  
    32  func MarshalToString(v interface{}) (text string, err error) {
    33  
    34  	b, err := Marshal(v)
    35  	if err != nil {
    36  		return
    37  	}
    38  	return string(b), nil
    39  }
    40  
    41  func MarshalIndentToString(v interface{}, prefix, indent string) (text string, err error) {
    42  
    43  	b, err := MarshalIndent(v, prefix, indent)
    44  	if err != nil {
    45  		return
    46  	}
    47  	return string(b), nil
    48  }
    49  
    50  // ----------------------------------------------------------