feature_any_string.go 1.8 KB

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