// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package test

type AddressInfo struct {
	Street string
	City   string
	State  string
	Zip    string
}

type CreditAgency enum {
	Equifax
	Experian
	TransUnion
}

type ExperianRating enum {
        Good
        Bad
}

type EquifaxCreditReport struct {
	Rating byte
}

type ExperianCreditReport struct {
	Rating ExperianRating
}

type TransUnionCreditReport struct {
	Rating	int16
}

type AgencyReport union {
	EquifaxReport    EquifaxCreditReport
	ExperianReport   ExperianCreditReport
	TransUnionReport TransUnionCreditReport
}

type CreditReport struct {
	Agency	CreditAgency
	Report	AgencyReport
}

type Customer struct {
	Name    string
	Id      int64
	Active  bool
	Address AddressInfo
	Credit  CreditReport
}

type Invoice struct {
	CustId     int64
	InvoiceNum int64
	Amount     int64
	ShipTo     AddressInfo
}

type Numbers struct {
	B    byte
	Ui16 uint16
	Ui32 uint32
	Ui64 uint64
	I16  int16
	I32  int32
	I64  int64
	F32  float32
	F64  float64
	C64  complex64
	C128 complex128
}

type FooType struct {
	Bar BarType
}

type BarType struct {
	Baz BazType
}

type TitleOrValueType union {
	Title string
	Value int64
}

type BazType struct {
	Name         string
	TitleOrValue TitleOrValueType
}
