debug_args.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package api
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "math/big"
  6. "reflect"
  7. "github.com/ethereum/go-ethereum/rpc/shared"
  8. )
  9. type WaitForBlockArgs struct {
  10. MinHeight int
  11. Timeout int // in seconds
  12. }
  13. func (args *WaitForBlockArgs) UnmarshalJSON(b []byte) (err error) {
  14. var obj []interface{}
  15. if err := json.Unmarshal(b, &obj); err != nil {
  16. return shared.NewDecodeParamError(err.Error())
  17. }
  18. if len(obj) > 2 {
  19. return fmt.Errorf("waitForArgs needs 0, 1, 2 arguments")
  20. }
  21. // default values when not provided
  22. args.MinHeight = -1
  23. args.Timeout = -1
  24. if len(obj) >= 1 {
  25. var minHeight *big.Int
  26. if minHeight, err = numString(obj[0]); err != nil {
  27. return err
  28. }
  29. args.MinHeight = int(minHeight.Int64())
  30. }
  31. if len(obj) >= 2 {
  32. timeout, err := numString(obj[1])
  33. if err != nil {
  34. return err
  35. }
  36. args.Timeout = int(timeout.Int64())
  37. }
  38. return nil
  39. }
  40. type MetricsArgs struct {
  41. Raw bool
  42. }
  43. func (args *MetricsArgs) UnmarshalJSON(b []byte) (err error) {
  44. var obj []interface{}
  45. if err := json.Unmarshal(b, &obj); err != nil {
  46. return shared.NewDecodeParamError(err.Error())
  47. }
  48. if len(obj) > 1 {
  49. return fmt.Errorf("metricsArgs needs 0, 1 arguments")
  50. }
  51. // default values when not provided
  52. if len(obj) >= 1 && obj[0] != nil {
  53. if value, ok := obj[0].(bool); !ok {
  54. return fmt.Errorf("invalid argument %v", reflect.TypeOf(obj[0]))
  55. } else {
  56. args.Raw = value
  57. }
  58. }
  59. return nil
  60. }