Carl Yeksigian created THRIFT-1786:
--------------------------------------

             Summary: C# Union Typing
                 Key: THRIFT-1786
                 URL: https://issues.apache.org/jira/browse/THRIFT-1786
             Project: Thrift
          Issue Type: New Feature
          Components: C# - Compiler
            Reporter: Carl Yeksigian


Given the thrift IDL:

{code}
struct A {
  0: i32 value
}

union AUnion {
  0: A field1,
  1: A field2,
  2: i32 value
}
{code}

We should generate a C# subclassing tree:
{code}
class A : TBase {
  int Value { get;set; }
}

abstract class AUnion : TBase {
  abstract object Data { get; }
  protected int field;
  abstract void WriteUnionField(TProtocol tprot);

  class field1 : AUnion {
    A _data;
    override object Data { get { return _data; } }
    public field1(A data) {
      this._data = data;
      this.field = 0;
    }
  }

  class field2 : AUnion {
    A _data;
    override object Data { get { return _data; } }
    public field2(A data) {
      this._data = data;
      this.field = 1;
    }
  }

  class value : AUnion {
    int _data;
    override object Data { get { return _data; } }
    public value(int data) {
      this._data = data;
      this.field = 2;
    }
  }
}
{code}

This gives us creation syntax of:
{code}
var aunion = new AUnion.value(10);
{code}

This should be an optional parameter to the compiler since it is a breaking 
change to existing code.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to