[
https://issues.apache.org/jira/browse/THRIFT-3773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15484987#comment-15484987
]
ASF GitHub Bot commented on THRIFT-3773:
----------------------------------------
Github user apocolipse commented on the issue:
https://github.com/apache/thrift/pull/1084
@ChristopherRogers @fumoboy007 I implemented union support with enums,
here's an example of generated code:
```
union TestUnion {
1: i32 data,
2: string message,
3: bool success
}
```
```swift
public enum TestUnion {
case data(val: Int32)
case message(val: String)
case success(val: Bool)
}
public func ==(lhs: TestUnion, rhs: TestUnion) -> Bool {
return {
switch (lhs, rhs) {
case (.data(let lval), .data(let rval)): return lval == rval
case (.message(let lval), .message(let rval)): return lval == rval
case (.success(let lval), .success(let rval)): return lval == rval
default: return false
}
}()
}
extension TestUnion : CustomStringConvertible {
public var description : String {
var desc = "TestUnion."
switch self {
case .data(let val): desc += "data(val: \(val))"
case .message(let val): desc += "message(val: \(val))"
case .success(let val): desc += "success(val: \(val))"
}
return desc
}
}
extension TestUnion : Hashable {
public var hashValue : Int {
let prime = 31
var result = 1
switch self {
case .data(let val): result = prime &* val.hashValue
case .message(let val): result = prime &* val.hashValue
case .success(let val): result = prime &* val.hashValue
}
return result
}
}
extension TestUnion : TStruct {
public static var fieldIds: [String: Int32] {
return ["data": 1, "message": 2, "success": 3, ]
}
public static var structName: String { return "TestUnion" }
public static func read(from proto: TProtocol) throws -> TestUnion {
_ = try proto.readStructBegin()
var ret: TestUnion?
fields: while true {
let (_, fieldType, fieldID) = try proto.readFieldBegin()
switch (fieldID, fieldType) {
case (_, .stop): break fields
case (1, .i32): ret = TestUnion.data(val: try
Int32.read(from: proto))
case (2, .string): ret = TestUnion.message(val:
try String.read(from: proto))
case (3, .bool): ret = TestUnion.success(val:
try Bool.read(from: proto))
case let (_, unknownType): try proto.skip(type: unknownType)
}
try proto.readFieldEnd()
}
if let ret = ret {
return ret
}
throw TProtocolError(error: .unknown, message: "Missing required value
for type: TestUnion") }
}
```
> Swift Library
> -------------
>
> Key: THRIFT-3773
> URL: https://issues.apache.org/jira/browse/THRIFT-3773
> Project: Thrift
> Issue Type: New Feature
> Components: Swift - Library
> Reporter: Thomas Bartelmess
>
> We already have the option to generate Swift code in the Cocoa compiler,
> however large parts of the (Objective-C) Cocoa Library still depend on Cocoa
> and Objective-C.
> It would be good to have a native Swift library that doesn't depend on the
> Cocoa libraries.
> Design goals:
> - Fully compatible with the code that is currently generated by the Cocoa
> compiler (both Objective-C and Swift).
> - Ability to run on Linux
> - Pure Swift, no Objective-C code.
> - No dependencies on closed source apple libraries
> - Keep the same interface, so that the library is compatible with the code
> the current cocoa compiler generates
> - Better server support that the current Objective-C library.
> - Follow the new Swift packaging format to be compatible with the Swift
> Package manager
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)