feature_any_string.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package jsoniter
  2. import (
  3. "strconv"
  4. "fmt"
  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) LastError() error {
  23. return nil
  24. }
  25. func (any *stringAny) ToBool() bool {
  26. str := any.ToString()
  27. if str == "false" {
  28. return false
  29. }
  30. for _, c := range str {
  31. switch c {
  32. case ' ', '\n', '\r', '\t':
  33. default:
  34. return true
  35. }
  36. }
  37. return false
  38. }
  39. func (any *stringAny) ToInt() int {
  40. parsed, _ := strconv.ParseInt(any.val, 10, 64)
  41. return int(parsed)
  42. }
  43. func (any *stringAny) ToInt32() int32 {
  44. parsed, _ := strconv.ParseInt(any.val, 10, 32)
  45. return int32(parsed)
  46. }
  47. func (any *stringAny) ToInt64() int64 {
  48. parsed, _ := strconv.ParseInt(any.val, 10, 64)
  49. return parsed
  50. }
  51. func (any *stringAny) ToUint() uint {
  52. parsed, _ := strconv.ParseUint(any.val, 10, 64)
  53. return uint(parsed)
  54. }
  55. func (any *stringAny) ToUint32() uint32 {
  56. parsed, _ := strconv.ParseUint(any.val, 10, 32)
  57. return uint32(parsed)
  58. }
  59. func (any *stringAny) ToUint64() uint64 {
  60. parsed, _ := strconv.ParseUint(any.val, 10, 64)
  61. return parsed
  62. }
  63. func (any *stringAny) ToFloat32() float32 {
  64. parsed, _ := strconv.ParseFloat(any.val, 32)
  65. return float32(parsed)
  66. }
  67. func (any *stringAny) ToFloat64() float64 {
  68. parsed, _ := strconv.ParseFloat(any.val, 64)
  69. return parsed
  70. }
  71. func (any *stringAny) ToString() string {
  72. return any.val
  73. }
  74. func (any *stringAny) WriteTo(stream *Stream) {
  75. stream.WriteString(any.val)
  76. }
  77. func (any *stringAny) GetInterface() interface{} {
  78. return any.val
  79. }