// Code generated by github.com/fjl/gencodec. DO NOT EDIT.

package logger

import (
	"encoding/json"
	"math/big"

	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/common/hexutil"
	"github.com/ethereum/go-ethereum/common/math"
)

var _ = (*callFrameMarshaling)(nil)

// MarshalJSON marshals as JSON.
func (c callFrame) MarshalJSON() ([]byte, error) {
	type callFrame struct {
		From  common.Address      `json:"from"`
		To    common.Address      `json:"to"`
		Input hexutil.Bytes       `json:"input,omitempty"`
		Gas   math.HexOrDecimal64 `json:"gas"`
		Value *hexutil.Big        `json:"value"`
		Type  string              `json:"type"`
	}
	var enc callFrame
	enc.From = c.From
	enc.To = c.To
	enc.Input = c.Input
	enc.Gas = math.HexOrDecimal64(c.Gas)
	enc.Value = (*hexutil.Big)(c.Value)
	enc.Type = c.Type()
	return json.Marshal(&enc)
}

// UnmarshalJSON unmarshals from JSON.
func (c *callFrame) UnmarshalJSON(input []byte) error {
	type callFrame struct {
		From  *common.Address      `json:"from"`
		To    *common.Address      `json:"to"`
		Input *hexutil.Bytes       `json:"input,omitempty"`
		Gas   *math.HexOrDecimal64 `json:"gas"`
		Value *hexutil.Big         `json:"value"`
	}
	var dec callFrame
	if err := json.Unmarshal(input, &dec); err != nil {
		return err
	}
	if dec.From != nil {
		c.From = *dec.From
	}
	if dec.To != nil {
		c.To = *dec.To
	}
	if dec.Input != nil {
		c.Input = *dec.Input
	}
	if dec.Gas != nil {
		c.Gas = uint64(*dec.Gas)
	}
	if dec.Value != nil {
		c.Value = (*big.Int)(dec.Value)
	}
	return nil
}