// 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 internal

// Data structures used for vom performance testing.

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
}
