// 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 _typeBlessingsHandle = new vdl.Type();
var _typeJsBlessings = new vdl.Type();
_typeBlessingsHandle.kind = vdl.kind.INT32;
_typeBlessingsHandle.name = "v.io/x/ref/services/wspr/internal/principal.BlessingsHandle";
_typeJsBlessings.kind = vdl.kind.STRUCT;
_typeJsBlessings.name = "v.io/x/ref/services/wspr/internal/principal.JsBlessings";
_typeJsBlessings.fields = [{name: "Handle", type: _typeBlessingsHandle}, {name: "PublicKey", type: vdl.types.STRING}];
_typeBlessingsHandle.freeze();
_typeJsBlessings.freeze();
module.exports.BlessingsHandle = (vdl.registry.lookupOrCreateConstructor(_typeBlessingsHandle));
module.exports.JsBlessings = (vdl.registry.lookupOrCreateConstructor(_typeJsBlessings));




// Consts:

  module.exports.ZeroHandle = canonicalize.reduce(new (vdl.registry.lookupOrCreateConstructor(_typeBlessingsHandle))(0, true), _typeBlessingsHandle);



// Errors:



// Services:

   
 


