[ 
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)

Reply via email to