You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Carl Yeksigian (JIRA)" <ji...@apache.org> on 2013/04/20 01:11:17 UTC

[jira] [Commented] (THRIFT-1786) C# Union Typing

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

Carl Yeksigian commented on THRIFT-1786:
----------------------------------------

Updated union typing patch.

This one makes the union typing as an optional parameter. Also, instead of being dependent on the static read, this removes that dependency; union types have a static read, but they inherit from "TAbstractBase" instead of "TBase".
                
> 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
>         Attachments: 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 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