[ 
https://issues.apache.org/jira/browse/THRIFT-4611?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16570241#comment-16570241
 ] 

Brian Forbis edited comment on THRIFT-4611 at 8/6/18 2:07 PM:
--------------------------------------------------------------

I don't believe there is a built in way to do this with just the generated JS 
code. For enums, it creates a key value object where key is the enum name and 
value is the enum code.

If you reverse the object, you could use it in the other direction to get the 
enum name. Lodash has an invert method that can be used for this:

 
{code:java}
const _ = require('lodash');
const enumCode = 3;
const enumString = _.invert(enumObject)[enumCode]
{code}


was (Author: bforbis):
I don't believe there is a built in way to do this with just the generated JS 
code. For enums, it creates a key value object where key is the enum name and 
value is the enum code.

If you reverse the object, you could use it in the other direction to get the 
enum name. Lodash has an invert method that can be used for this:

```

const _ = require('lodash');

const enumCode = 3;

const enumString = _.invert(enumObject)[enumCode]

```

> NodeJS thrift enums not mappable back to their string values
> ------------------------------------------------------------
>
>                 Key: THRIFT-4611
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4611
>             Project: Thrift
>          Issue Type: Bug
>          Components: Node.js - Compiler
>    Affects Versions: 0.11.0
>            Reporter: Anthony Alayo
>            Priority: Major
>
> While attempting to build a javascript-based web tool to read encoded thrift 
> objects, I hit a wall. While I was able to decode from a base64 thrift string 
> to an object, all enum fields are only in their numeral representations with 
> no way to reverse them.
>  
> Here is one example, where there is a Common.thrift file containing enums, 
> and an Event.thrift using one of the enums from Common.thrift.
>  
> Here is the generated Event_types.js:
> {code:java}
> var Common_ttypes = require('./Common_types');
> var ttypes = module.exports = {};
> var Event = module.exports.Event = function(args) {
> this.id = null;
> this.type = null;
> ...
> }
> {code}
> Here is the generated Common_types.js
> {code:java}
> var ttypes = module.exports = {};
> ttypes.EventType = {
> 'OUTBOUND' : 0,
> 'INBOUND' : 1,
> }{code}
> While Common_types is being required in Event_types, there is no use of it 
> anywhere. The field type is solely being treated as a number:
> {code:java}
> if (this.type !== null && this.type !== undefined) {
> output.writeFieldBegin('type', Thrift.Type.I32, 3);
> output.writeI32(this.type);
> output.writeFieldEnd();
> }
> {code}
>  
> It seems to be a bug, since I assume from the import that we would expect to 
> use enums instead of numbers. Perhaps this is intended, but if that's the 
> case, could this be made into a feature? The ability to know and display the 
> enum string values instead of a number is a game changer.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to