// 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 security = require('./../../../../../../v23/security');

module.exports = {};



// Types:
var _typeBlessingsCacheAddMessage = new vdl.Type();
var _typeBlessingsCacheDeleteMessage = new vdl.Type();
var _typeBlessingsCacheMessage = new vdl.Type();
var _typeBlessingsId = new vdl.Type();
_typeBlessingsCacheAddMessage.kind = vdl.kind.STRUCT;
_typeBlessingsCacheAddMessage.name = "v.io/x/ref/services/wspr/internal/principal.BlessingsCacheAddMessage";
_typeBlessingsCacheAddMessage.fields = [{name: "CacheId", type: _typeBlessingsId}, {name: "Blessings", type: new security.WireBlessings()._type}];
_typeBlessingsCacheDeleteMessage.kind = vdl.kind.STRUCT;
_typeBlessingsCacheDeleteMessage.name = "v.io/x/ref/services/wspr/internal/principal.BlessingsCacheDeleteMessage";
_typeBlessingsCacheDeleteMessage.fields = [{name: "CacheId", type: _typeBlessingsId}, {name: "DeleteAfter", type: vdl.types.UINT32}];
_typeBlessingsCacheMessage.kind = vdl.kind.UNION;
_typeBlessingsCacheMessage.name = "v.io/x/ref/services/wspr/internal/principal.BlessingsCacheMessage";
_typeBlessingsCacheMessage.fields = [{name: "Add", type: _typeBlessingsCacheAddMessage}, {name: "Delete", type: _typeBlessingsCacheDeleteMessage}];
_typeBlessingsId.kind = vdl.kind.UINT32;
_typeBlessingsId.name = "v.io/x/ref/services/wspr/internal/principal.BlessingsId";
_typeBlessingsCacheAddMessage.freeze();
_typeBlessingsCacheDeleteMessage.freeze();
_typeBlessingsCacheMessage.freeze();
_typeBlessingsId.freeze();
module.exports.BlessingsCacheAddMessage = (vdl.registry.lookupOrCreateConstructor(_typeBlessingsCacheAddMessage));
module.exports.BlessingsCacheDeleteMessage = (vdl.registry.lookupOrCreateConstructor(_typeBlessingsCacheDeleteMessage));
module.exports.BlessingsCacheMessage = (vdl.registry.lookupOrCreateConstructor(_typeBlessingsCacheMessage));
module.exports.BlessingsId = (vdl.registry.lookupOrCreateConstructor(_typeBlessingsId));




// Consts:



// Errors:



// Services:

   
 


