feature_any_string.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package jsoniter
  2. import (
  3. "strconv"
  4. )
  5. type stringAny struct {
  6. baseAny
  7. err error
  8. val string
  9. }
  10. func (any *stringAny) Parse() *Iterator {
  11. return nil
  12. }
  13. func (any *stringAny) ValueType() ValueType {
  14. return String
  15. }
  16. func (any *stringAny) LastError() error {
  17. return any.err
  18. }
  19. func (any *stringAny) ToBool() bool {
  20. str := any.ToString()
  21. if str == "false" {
  22. return false
  23. }
  24. for _, c := range str {
  25. switch c {
  26. case ' ', '\n', '\r', '\t':
  27. default:
  28. return true
  29. }
  30. }
  31. return false
  32. }
  33. func (any *stringAny) ToInt() int {
  34. parsed, err := strconv.ParseInt(any.val, 10, 64)
  35. any.err = err
  36. return int(parsed)
  37. }
  38. func (any *stringAny) ToInt32() int32 {
  39. parsed, err := strconv.ParseInt(any.val, 10, 32)
  40. any.err = err
  41. return int32(parsed)
  42. }
  43. func (any *stringAny) ToInt64() int64 {
  44. parsed, err := strconv.ParseInt(any.val, 10, 64)
  45. any.err = err
  46. return parsed
  47. }
  48. func (any *stringAny) ToUint() uint {
  49. parsed, err := strconv.ParseUint(any.val, 10, 64)
  50. any.err = err
  51. return uint(parsed)
  52. }
  53. func (any *stringAny) ToUint32() uint32 {
  54. parsed, err := strconv.ParseUint(any.val, 10, 32)
  55. any.err = err
  56. return uint32(parsed)
  57. }
  58. func (any *stringAny) ToUint64() uint64 {
  59. parsed, err := strconv.ParseUint(any.val, 10, 64)
  60. any.err = err
  61. return parsed
  62. }
  63. func (any *stringAny) ToFloat32() float32 {
  64. parsed, err := strconv.ParseFloat(any.val, 32)
  65. any.err = err
  66. return float32(parsed)
  67. }
  68. func (any *stringAny) ToFloat64() float64 {
  69. parsed, err := strconv.ParseFloat(any.val, 64)
  70. any.err = err
  71. return parsed
  72. }
  73. func (any *stringAny) ToString() string {
  74. return any.val
  75. }
  76. func (any *stringAny) WriteTo(stream *Stream) {
  77. stream.WriteString(any.val)
  78. }
  79. func (any *stringAny) GetInterface() interface{} {
  80. return any.val
  81. }