[
https://issues.apache.org/jira/browse/THRIFT-3773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15482951#comment-15482951
]
ASF GitHub Bot commented on THRIFT-3773:
----------------------------------------
Github user fumoboy007 commented on a diff in the pull request:
https://github.com/apache/thrift/pull/1084#discussion_r78312577
--- Diff: lib/swift/Sources/TStruct.swift ---
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+/// Protocol for Generated Structs to conform to
+/// Dictionary maps field names to internal IDs and uses Reflection
+/// to iterate through all fields.
+/// `writeFieldValue(_:name:type:id:)` calls `TSerializable.write(to:)`
internally
+/// giving a nice recursive behavior for nested TStructs, TLists, TMaps,
and TSets
+public protocol TStruct : TSerializable {
+ static var fieldIds: [String: Int32] { get }
+ static var structName: String { get }
+}
+
+public extension TStruct {
+ public static var fieldIds: [String: (id: Int32, type: TType)] { return
[:] }
+ public static var thriftType: TType { return .struct }
+
+ public func write(to proto: TProtocol) throws {
+ // Write struct name first
+ try proto.writeStructBegin(name: Self.structName)
+
+ try self.forEach { name, value, id in
+ // Write to protocol
+ try proto.writeFieldValue(value, name: name,
+ type: value.thriftType, id: id)
+ }
+ try proto.writeFieldStop()
+ try proto.writeStructEnd()
+ }
+
+ public var hashValue: Int {
+ let prime = 31
+ var result = 1
+ self.forEach { _, value, _ in
+ result = prime * result + (value.hashValue)
--- End diff --
`&*`, `&+`?
> 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)