|  | #include <stdint.h> | 
|  |  | 
|  | /* This is the code generated by cbindgen 0.12.1 for the `enum TT` | 
|  | * type in nonclike.rs . */ | 
|  | enum TT_Tag { | 
|  | AA, | 
|  | BB, | 
|  | }; | 
|  | typedef uint8_t TT_Tag; | 
|  |  | 
|  | typedef struct { | 
|  | uint64_t _0; | 
|  | uint64_t _1; | 
|  | } AA_Body; | 
|  |  | 
|  | typedef struct { | 
|  | TT_Tag tag; | 
|  | union { | 
|  | AA_Body aa; | 
|  | }; | 
|  | } TT; | 
|  |  | 
|  | /* This is the code generated by cbindgen 0.12.1 for the `enum T` type | 
|  | * in nonclike.rs . */ | 
|  | enum T_Tag { | 
|  | A, | 
|  | B, | 
|  | }; | 
|  | typedef uint8_t T_Tag; | 
|  |  | 
|  | typedef struct { | 
|  | uint64_t _0; | 
|  | } A_Body; | 
|  |  | 
|  | typedef struct { | 
|  | T_Tag tag; | 
|  | union { | 
|  | A_Body a; | 
|  | }; | 
|  | } T; | 
|  |  | 
|  | uint64_t tt_add(TT a, TT b) { | 
|  | if (a.tag == AA && b.tag == AA) { | 
|  | return a.aa._0 + a.aa._1 + b.aa._0 + b.aa._1; | 
|  | } else if (a.tag == AA) { | 
|  | return a.aa._0 + a.aa._1; | 
|  | } else if (b.tag == BB) { | 
|  | return b.aa._0 + b.aa._1; | 
|  | } else { | 
|  | return 0; | 
|  | } | 
|  | } | 
|  |  | 
|  | uint64_t t_add(T a, T b) { | 
|  | if (a.tag == A && b.tag == A) { | 
|  | return a.a._0 + b.a._0; | 
|  | } else if (a.tag == AA) { | 
|  | return a.a._0; | 
|  | } else if (b.tag == BB) { | 
|  | return b.a._0; | 
|  | } else { | 
|  | return 0; | 
|  | } | 
|  | } | 
|  |  | 
|  | TT tt_new(uint64_t a, uint64_t b) { | 
|  | TT tt = { | 
|  | .tag = AA, | 
|  | .aa = { | 
|  | ._0 = a, | 
|  | ._1 = b, | 
|  | }, | 
|  | }; | 
|  | return tt; | 
|  | } | 
|  |  | 
|  | T t_new(uint64_t a) { | 
|  | T t = { | 
|  | .tag = A, | 
|  | .a = { | 
|  | ._0 = a, | 
|  | }, | 
|  | }; | 
|  | return t; | 
|  | } |