[ 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)