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

Jens Geyer commented on THRIFT-1786:
------------------------------------

Not to mention the (breaking?) change on the class hierarchy

> 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
>            Assignee: Carl Yeksigian
>            Priority: Major
>             Fix For: 0.9.1
>
>         Attachments: 1786-make-fix.patch, 1786-v2.patch, 1786.patch
>
>
> 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 was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to