Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-3144

Proposal: make String representation of enums in generated go code less verbose

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.9.2
    • Fix Version/s: 0.9.3
    • Component/s: Go - Compiler
    • Labels:
      None
    • Patch Info:
      Patch Available

      Description

      Generated Go code for enums provides String() and EnumFromString methods for enums. E.g.:

       func (p TestEnum) String() string {
       	switch p {
       	case TestEnum_FIRST:
      		return "TestEnum_FIRST"
       	case TestEnum_SECOND:
      		return "TestEnum_SECOND"
       	case TestEnum_THIRD:
      		return "TestEnum_THIRD"
       	case TestEnum_FOURTH:
      		return "TestEnum_FOURTH"
       	}
       	return "<UNSET>"
       }
       
       func TestEnumFromString(s string) (TestEnum, error) {
       	switch s {
      	case "TestEnum_FIRST":
       		return TestEnum_FIRST, nil
      	case "TestEnum_SECOND":
       		return TestEnum_SECOND, nil
      	case "TestEnum_THIRD":
       		return TestEnum_THIRD, nil
      	case "TestEnum_FOURTH":
       		return TestEnum_FOURTH, nil
       	}
      }
      

      The current implementation uses enum name as string representation. E.g. String(TestEnum_FIRST) = "TestEnum_FIRST" which seems to be unnecessary verbose to me.

      I propose to change it to use enum values from the thrift file instead. E.g.:

       func (p TestEnum) String() string {
       	switch p {
       	case TestEnum_FIRST:
      		return "FIRST"
       	case TestEnum_SECOND:
      		return "SECOND"
       	case TestEnum_THIRD:
      		return "THIRD"
       	case TestEnum_FOURTH:
      		return "FOURTH"
       	}
       	return "<UNSET>"
       }
       
       func TestEnumFromString(s string) (TestEnum, error) {
       	switch s {
      	case "FIRST":
       		return TestEnum_FIRST, nil
      	case "SECOND":
       		return TestEnum_SECOND, nil
      	case "THIRD":
       		return TestEnum_THIRD, nil
      	case "FOURTH":
       		return TestEnum_FOURTH, nil
       	}
      }
      

      This is also consistent with generated code for other languages (e.g. Python, C++).

        Attachments

          Activity

            People

            • Assignee:
              k.shaposhnikov@gmail.com Konstantin Shaposhnikov
              Reporter:
              k.shaposhnikov@gmail.com Konstantin Shaposhnikov
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: