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

// This file was auto-generated by the vanadium vdl tool.
var vdl = require('../../../../../vdl');
var canonicalize = require('../../../../../vdl/canonicalize');






module.exports = {};



// Types:
var _typeAddressInfo = new vdl.Type();
var _typeAgencyReport = new vdl.Type();
var _typeCreditAgency = new vdl.Type();
var _typeCreditReport = new vdl.Type();
var _typeCustomer = new vdl.Type();
var _typeEquifaxCreditReport = new vdl.Type();
var _typeExperianCreditReport = new vdl.Type();
var _typeExperianRating = new vdl.Type();
var _typeTransUnionCreditReport = new vdl.Type();
_typeAddressInfo.kind = vdl.kind.STRUCT;
_typeAddressInfo.name = "v.io/v23/vom/internal.AddressInfo";
_typeAddressInfo.fields = [{name: "Street", type: vdl.types.STRING}, {name: "City", type: vdl.types.STRING}, {name: "State", type: vdl.types.STRING}, {name: "Zip", type: vdl.types.STRING}];
_typeAgencyReport.kind = vdl.kind.UNION;
_typeAgencyReport.name = "v.io/v23/vom/internal.AgencyReport";
_typeAgencyReport.fields = [{name: "EquifaxReport", type: _typeEquifaxCreditReport}, {name: "ExperianReport", type: _typeExperianCreditReport}, {name: "TransUnionReport", type: _typeTransUnionCreditReport}];
_typeCreditAgency.kind = vdl.kind.ENUM;
_typeCreditAgency.name = "v.io/v23/vom/internal.CreditAgency";
_typeCreditAgency.labels = ["Equifax", "Experian", "TransUnion"];
_typeCreditReport.kind = vdl.kind.STRUCT;
_typeCreditReport.name = "v.io/v23/vom/internal.CreditReport";
_typeCreditReport.fields = [{name: "Agency", type: _typeCreditAgency}, {name: "Report", type: _typeAgencyReport}];
_typeCustomer.kind = vdl.kind.STRUCT;
_typeCustomer.name = "v.io/v23/vom/internal.Customer";
_typeCustomer.fields = [{name: "Name", type: vdl.types.STRING}, {name: "Id", type: vdl.types.INT64}, {name: "Active", type: vdl.types.BOOL}, {name: "Address", type: _typeAddressInfo}, {name: "Credit", type: _typeCreditReport}];
_typeEquifaxCreditReport.kind = vdl.kind.STRUCT;
_typeEquifaxCreditReport.name = "v.io/v23/vom/internal.EquifaxCreditReport";
_typeEquifaxCreditReport.fields = [{name: "Rating", type: vdl.types.BYTE}];
_typeExperianCreditReport.kind = vdl.kind.STRUCT;
_typeExperianCreditReport.name = "v.io/v23/vom/internal.ExperianCreditReport";
_typeExperianCreditReport.fields = [{name: "Rating", type: _typeExperianRating}];
_typeExperianRating.kind = vdl.kind.ENUM;
_typeExperianRating.name = "v.io/v23/vom/internal.ExperianRating";
_typeExperianRating.labels = ["Good", "Bad"];
_typeTransUnionCreditReport.kind = vdl.kind.STRUCT;
_typeTransUnionCreditReport.name = "v.io/v23/vom/internal.TransUnionCreditReport";
_typeTransUnionCreditReport.fields = [{name: "Rating", type: vdl.types.INT16}];
_typeAddressInfo.freeze();
_typeAgencyReport.freeze();
_typeCreditAgency.freeze();
_typeCreditReport.freeze();
_typeCustomer.freeze();
_typeEquifaxCreditReport.freeze();
_typeExperianCreditReport.freeze();
_typeExperianRating.freeze();
_typeTransUnionCreditReport.freeze();
module.exports.AddressInfo = (vdl.registry.lookupOrCreateConstructor(_typeAddressInfo));
module.exports.AgencyReport = (vdl.registry.lookupOrCreateConstructor(_typeAgencyReport));
module.exports.CreditAgency = {
  EQUIFAX: canonicalize.reduce(new (vdl.registry.lookupOrCreateConstructor(_typeCreditAgency))('Equifax', true), _typeCreditAgency),
  EXPERIAN: canonicalize.reduce(new (vdl.registry.lookupOrCreateConstructor(_typeCreditAgency))('Experian', true), _typeCreditAgency),
  TRANS_UNION: canonicalize.reduce(new (vdl.registry.lookupOrCreateConstructor(_typeCreditAgency))('TransUnion', true), _typeCreditAgency),
};
module.exports.CreditReport = (vdl.registry.lookupOrCreateConstructor(_typeCreditReport));
module.exports.Customer = (vdl.registry.lookupOrCreateConstructor(_typeCustomer));
module.exports.EquifaxCreditReport = (vdl.registry.lookupOrCreateConstructor(_typeEquifaxCreditReport));
module.exports.ExperianCreditReport = (vdl.registry.lookupOrCreateConstructor(_typeExperianCreditReport));
module.exports.ExperianRating = {
  GOOD: canonicalize.reduce(new (vdl.registry.lookupOrCreateConstructor(_typeExperianRating))('Good', true), _typeExperianRating),
  BAD: canonicalize.reduce(new (vdl.registry.lookupOrCreateConstructor(_typeExperianRating))('Bad', true), _typeExperianRating),
};
module.exports.TransUnionCreditReport = (vdl.registry.lookupOrCreateConstructor(_typeTransUnionCreditReport));




// Consts:



// Errors:



// Services:

   
 


