blob: beb369fafeabe79fc0b860f4dc98b0e6b8f14d7a [file] [log] [blame]
// 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.
/**
* @fileoverview kind definitions.
* @private
*/
var kindCount = 0;
/**
* @summary Namespace of constants for VDL kinds.
* @description Namespace of constants for VDL kinds.
* @namespace
* @memberof module:vanadium.vdl
*/
var kind = {
// Nullable kinds
/**
* @const
*/
ANY: kindCount++,
/**
* @const
*/
OPTIONAL: kindCount++,
// Scalar kinds
/**
* @const
*/
BOOL: kindCount++,
/**
* @const
*/
BYTE: kindCount++,
/**
* @const
*/
UINT16: kindCount++,
/**
* @const
*/
UINT32: kindCount++,
/**
* @const
*/
UINT64: kindCount++,
/**
* @const
*/
INT16: kindCount++,
/**
* @const
*/
INT32: kindCount++,
/**
* @const
*/
INT64: kindCount++,
/**
* @const
*/
FLOAT32: kindCount++,
/**
* @const
*/
FLOAT64: kindCount++,
/**
* @const
*/
COMPLEX64: kindCount++,
/**
* @const
*/
COMPLEX128: kindCount++,
/**
* @const
*/
STRING: kindCount++,
/**
* @const
*/
ENUM: kindCount++,
/**
* @const
*/
TYPEOBJECT: kindCount++,
// Composite kinds
/**
* @const
*/
ARRAY: kindCount++,
/**
* @const
*/
LIST: kindCount++,
/**
* @const
*/
SET: kindCount++,
/**
* @const
*/
MAP: kindCount++,
/**
* @const
*/
STRUCT: kindCount++,
/**
* Union is like struct, but with only 1 field filled in.
* @const
*/
UNION: kindCount++,
};
/**
* Returns the human-readable name for a kind.
* @param {module:vanadium.vdl.kind} k The kind to print out.
* @return {string} Human-readable name for the kind.
*/
kind.kindStr = function(k) {
var kindKeys = Object.keys(kind).filter(function(key) {
return kind[key] === k;
});
if (kindKeys.length !== 1) {
throw new TypeError('kind: ' + k + ' is not a known kind');
}
return kindKeys[0].toLowerCase(); // There should only be 1 result.
};
module.exports = kind;