thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Can Celasun (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (THRIFT-4611) NodeJS thrift enums not mappable back to their string values
Date Mon, 06 Aug 2018 16:45:00 GMT

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

Can Celasun edited comment on THRIFT-4611 at 8/6/18 4:44 PM:
-------------------------------------------------------------

First, I think there is a misunderstanding here. If you have access to this generated code:

{code:java}
var ttypes = module.exports = {};
ttypes.EventType = {
'OUTBOUND' : 0,
'INBOUND' : 1,
}
{code}
you can simply reverse the EventType object and lookup the string. Why does that not work
for you?

Now, on to your suggestion:
{code:java}
if (this.type !== null && this.type !== undefined) {
output.writeFieldBegin('type', Common_ttypes.EventType, 3);
output.writeMap(this.type); // key and value here would be string and number
output.writeFieldEnd();
}
{code}
This will never happen as it would change the thrift wire format. Enums are sent as integers,
in all supported languages. The best thing to do here is to add a string function to the generated
object, so you'll be able to do something like:
{code:java}
EventType.stringValue(1) // returns "INBOUND"
{code}
 


was (Author: calcifer):
First, I think there is a misunderstanding here. If you have access to this generated code:

 
{code:java}
var ttypes = module.exports = {};
ttypes.EventType = {
'OUTBOUND' : 0,
'INBOUND' : 1,
}
{code}
you can simply reverse the EventType object and lookup the string. Why does that not work
for you?

Now, on to your suggestion:
{code:java}
if (this.type !== null && this.type !== undefined) {
output.writeFieldBegin('type', Common_ttypes.EventType, 3);
output.writeMap(this.type); // key and value here would be string and number
output.writeFieldEnd();
}
{code}
This will never happen as it would change the thrift wire format. Enums are sent as integers,
in all supported languages. The best thing to do here is to add a string function to the generated
object, so you'll be able to do something like:
{code:java}
EventType.stringValue(1) // returns "INBOUND"
{code}
 

> 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: Wish
>          Components: JavaScript - Library, Node.js - Library
>    Affects Versions: 0.11.0
>            Reporter: Anthony Alayo
>            Priority: Minor
>
> 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)

Mime
View raw message