github.com/jeffallen/go-ethereum@v1.1.4-0.20150910155051-571d3236c49c/rpc/api/debug_args.go (about)

     1  // Copyright 2015 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package api
    18  
    19  import (
    20  	"encoding/json"
    21  	"fmt"
    22  	"math/big"
    23  	"reflect"
    24  
    25  	"github.com/ethereum/go-ethereum/rpc/shared"
    26  )
    27  
    28  type WaitForBlockArgs struct {
    29  	MinHeight int
    30  	Timeout   int // in seconds
    31  }
    32  
    33  func (args *WaitForBlockArgs) UnmarshalJSON(b []byte) (err error) {
    34  	var obj []interface{}
    35  	if err := json.Unmarshal(b, &obj); err != nil {
    36  		return shared.NewDecodeParamError(err.Error())
    37  	}
    38  
    39  	if len(obj) > 2 {
    40  		return fmt.Errorf("waitForArgs needs 0, 1, 2 arguments")
    41  	}
    42  
    43  	// default values when not provided
    44  	args.MinHeight = -1
    45  	args.Timeout = -1
    46  
    47  	if len(obj) >= 1 {
    48  		var minHeight *big.Int
    49  		if minHeight, err = numString(obj[0]); err != nil {
    50  			return err
    51  		}
    52  		args.MinHeight = int(minHeight.Int64())
    53  	}
    54  
    55  	if len(obj) >= 2 {
    56  		timeout, err := numString(obj[1])
    57  		if err != nil {
    58  			return err
    59  		}
    60  		args.Timeout = int(timeout.Int64())
    61  	}
    62  
    63  	return nil
    64  }
    65  
    66  type MetricsArgs struct {
    67  	Raw bool
    68  }
    69  
    70  func (args *MetricsArgs) UnmarshalJSON(b []byte) (err error) {
    71  	var obj []interface{}
    72  	if err := json.Unmarshal(b, &obj); err != nil {
    73  		return shared.NewDecodeParamError(err.Error())
    74  	}
    75  	if len(obj) > 1 {
    76  		return fmt.Errorf("metricsArgs needs 0, 1 arguments")
    77  	}
    78  	// default values when not provided
    79  	if len(obj) >= 1 && obj[0] != nil {
    80  		if value, ok := obj[0].(bool); !ok {
    81  			return fmt.Errorf("invalid argument %v", reflect.TypeOf(obj[0]))
    82  		} else {
    83  			args.Raw = value
    84  		}
    85  	}
    86  	return nil
    87  }