|
|
- package json_test
-
- import (
- "time"
-
- "github.com/tendermint/tendermint/libs/json"
- )
-
- // Register Car, an instance of the Vehicle interface.
- func init() {
- json.RegisterType(&Car{}, "vehicle/car")
- json.RegisterType(Boat{}, "vehicle/boat")
- json.RegisterType(PublicKey{}, "key/public")
- json.RegisterType(PrivateKey{}, "key/private")
- }
-
- type Vehicle interface {
- Drive() error
- }
-
- // Car is a pointer implementation of Vehicle.
- type Car struct {
- Wheels int32
- }
-
- func (c *Car) Drive() error { return nil }
-
- // Boat is a value implementation of Vehicle.
- type Boat struct {
- Sail bool
- }
-
- func (b Boat) Drive() error { return nil }
-
- // These are public and private encryption keys.
- type PublicKey [8]byte
- type PrivateKey [8]byte
-
- // Custom has custom marshalers and unmarshalers, taking pointer receivers.
- type CustomPtr struct {
- Value string
- }
-
- func (c *CustomPtr) MarshalJSON() ([]byte, error) {
- return []byte("\"custom\""), nil
- }
-
- func (c *CustomPtr) UnmarshalJSON(bz []byte) error {
- c.Value = "custom"
- return nil
- }
-
- // CustomValue has custom marshalers and unmarshalers, taking value receivers (which usually doesn't
- // make much sense since the unmarshaler can't change anything).
- type CustomValue struct {
- Value string
- }
-
- func (c CustomValue) MarshalJSON() ([]byte, error) {
- return []byte("\"custom\""), nil
- }
-
- func (c CustomValue) UnmarshalJSON(bz []byte) error {
- c.Value = "custom"
- return nil
- }
-
- // Tags tests JSON tags.
- type Tags struct {
- JSONName string `json:"name"`
- OmitEmpty string `json:",omitempty"`
- Hidden string `json:"-"`
- Tags *Tags `json:"tags,omitempty"`
- }
-
- // Struct tests structs with lots of contents.
- type Struct struct {
- Bool bool
- Float64 float64
- Int32 int32
- Int64 int64
- Int64Ptr *int64
- String string
- StringPtrPtr **string
- Bytes []byte
- Time time.Time
- Car *Car
- Boat Boat
- Vehicles []Vehicle
- Child *Struct
- private string
- }
|