// 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 identity = require('./../../../identity');
var account = require('./../account');

module.exports = {};



// Types:
var _type1 = new vdl.Type();
var _type2 = new vdl.Type();
var _typeAssociateAccountMessage = new vdl.Type();
var _typeCleanupMessage = new vdl.Type();
var _typeCreateAccountMessage = new vdl.Type();
var _typeCreateInstanceMessage = new vdl.Type();
var _typeGetAccountsMessage = new vdl.Type();
var _typeOriginHasAccountMessage = new vdl.Type();
var _typeStartMessage = new vdl.Type();
_type1.kind = vdl.kind.LIST;
_type1.name = "";
_type1.elem = new account.Caveat()._type;
_type2.kind = vdl.kind.LIST;
_type2.name = "";
_type2.elem = vdl.types.STRING;
_typeAssociateAccountMessage.kind = vdl.kind.STRUCT;
_typeAssociateAccountMessage.name = "v.io/x/ref/services/wspr/internal/browspr.AssociateAccountMessage";
_typeAssociateAccountMessage.fields = [{name: "Account", type: vdl.types.STRING}, {name: "Origin", type: vdl.types.STRING}, {name: "Caveats", type: _type1}];
_typeCleanupMessage.kind = vdl.kind.STRUCT;
_typeCleanupMessage.name = "v.io/x/ref/services/wspr/internal/browspr.CleanupMessage";
_typeCleanupMessage.fields = [{name: "InstanceId", type: vdl.types.INT32}];
_typeCreateAccountMessage.kind = vdl.kind.STRUCT;
_typeCreateAccountMessage.name = "v.io/x/ref/services/wspr/internal/browspr.CreateAccountMessage";
_typeCreateAccountMessage.fields = [{name: "Token", type: vdl.types.STRING}];
_typeCreateInstanceMessage.kind = vdl.kind.STRUCT;
_typeCreateInstanceMessage.name = "v.io/x/ref/services/wspr/internal/browspr.CreateInstanceMessage";
_typeCreateInstanceMessage.fields = [{name: "InstanceId", type: vdl.types.INT32}, {name: "Origin", type: vdl.types.STRING}, {name: "NamespaceRoots", type: _type2}, {name: "Proxy", type: vdl.types.STRING}];
_typeGetAccountsMessage.kind = vdl.kind.STRUCT;
_typeGetAccountsMessage.name = "v.io/x/ref/services/wspr/internal/browspr.GetAccountsMessage";
_typeGetAccountsMessage.fields = [];
_typeOriginHasAccountMessage.kind = vdl.kind.STRUCT;
_typeOriginHasAccountMessage.name = "v.io/x/ref/services/wspr/internal/browspr.OriginHasAccountMessage";
_typeOriginHasAccountMessage.fields = [{name: "Origin", type: vdl.types.STRING}];
_typeStartMessage.kind = vdl.kind.STRUCT;
_typeStartMessage.name = "v.io/x/ref/services/wspr/internal/browspr.StartMessage";
_typeStartMessage.fields = [{name: "Identityd", type: vdl.types.STRING}, {name: "IdentitydBlessingRoot", type: new identity.BlessingRootResponse()._type}, {name: "Proxy", type: vdl.types.STRING}, {name: "NamespaceRoot", type: vdl.types.STRING}, {name: "LogLevel", type: vdl.types.INT32}, {name: "LogModule", type: vdl.types.STRING}];
_type1.freeze();
_type2.freeze();
_typeAssociateAccountMessage.freeze();
_typeCleanupMessage.freeze();
_typeCreateAccountMessage.freeze();
_typeCreateInstanceMessage.freeze();
_typeGetAccountsMessage.freeze();
_typeOriginHasAccountMessage.freeze();
_typeStartMessage.freeze();
module.exports.AssociateAccountMessage = (vdl.registry.lookupOrCreateConstructor(_typeAssociateAccountMessage));
module.exports.CleanupMessage = (vdl.registry.lookupOrCreateConstructor(_typeCleanupMessage));
module.exports.CreateAccountMessage = (vdl.registry.lookupOrCreateConstructor(_typeCreateAccountMessage));
module.exports.CreateInstanceMessage = (vdl.registry.lookupOrCreateConstructor(_typeCreateInstanceMessage));
module.exports.GetAccountsMessage = (vdl.registry.lookupOrCreateConstructor(_typeGetAccountsMessage));
module.exports.OriginHasAccountMessage = (vdl.registry.lookupOrCreateConstructor(_typeOriginHasAccountMessage));
module.exports.StartMessage = (vdl.registry.lookupOrCreateConstructor(_typeStartMessage));




// Consts:



// Errors:



// Services:

   
 


