feature_adapter.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package jsoniter
  2. import (
  3. "io"
  4. "bytes"
  5. )
  6. // Unmarshal adapts to json/encoding APIs
  7. func Unmarshal(data []byte, v interface{}) error {
  8. iter := ParseBytes(data)
  9. iter.ReadVal(v)
  10. if iter.head == iter.tail {
  11. iter.loadMore()
  12. }
  13. if iter.Error == io.EOF {
  14. return nil
  15. }
  16. if iter.Error == nil {
  17. iter.reportError("UnmarshalAny", "there are bytes left after unmarshal")
  18. }
  19. return iter.Error
  20. }
  21. func UnmarshalAny(data []byte) (Any, error) {
  22. iter := ParseBytes(data)
  23. any := iter.ReadAny()
  24. if iter.head == iter.tail {
  25. iter.loadMore()
  26. }
  27. if iter.Error == io.EOF {
  28. return any, nil
  29. }
  30. if iter.Error == nil {
  31. iter.reportError("UnmarshalAny", "there are bytes left after unmarshal")
  32. }
  33. return any, iter.Error
  34. }
  35. func UnmarshalFromString(str string, v interface{}) error {
  36. data := []byte(str)
  37. iter := ParseBytes(data)
  38. iter.ReadVal(v)
  39. if iter.head == iter.tail {
  40. iter.loadMore()
  41. }
  42. if iter.Error == io.EOF {
  43. return nil
  44. }
  45. if iter.Error == nil {
  46. iter.reportError("UnmarshalFromString", "there are bytes left after unmarshal")
  47. }
  48. return iter.Error
  49. }
  50. func UnmarshalAnyFromString(str string) (Any, error) {
  51. data := []byte(str)
  52. iter := ParseBytes(data)
  53. any := iter.ReadAny()
  54. if iter.head == iter.tail {
  55. iter.loadMore()
  56. }
  57. if iter.Error == io.EOF {
  58. return any, nil
  59. }
  60. if iter.Error == nil {
  61. iter.reportError("UnmarshalAnyFromString", "there are bytes left after unmarshal")
  62. }
  63. return nil, iter.Error
  64. }
  65. func Marshal(v interface{}) ([]byte, error) {
  66. buf := &bytes.Buffer{}
  67. stream := NewStream(buf, 4096)
  68. stream.WriteVal(v)
  69. stream.Flush()
  70. if stream.Error != nil {
  71. return nil, stream.Error
  72. }
  73. return buf.Bytes(), nil
  74. }
  75. func MarshalToString(v interface{}) (string, error) {
  76. buf, err := Marshal(v)
  77. if err != nil {
  78. return "", err
  79. }
  80. return string(buf), nil
  81. }