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 // ----------------------------------------------------------