| // Protocol Buffers - Google's data interchange format |
| // Copyright 2024 Google Inc. All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file or at |
| // https://developers.google.com/open-source/licenses/bsd |
| |
| /// Swift specific additions to simplify usage. |
| extension GPBUnknownFields { |
| |
| /// Fetches the first varint for the given field number. |
| public func firstVarint(_ fieldNumber: Int32) -> UInt64? { |
| var value: UInt64 = 0 |
| guard getFirst(fieldNumber, varint: &value) else { return nil } |
| return value |
| } |
| |
| /// Fetches the first fixed32 for the given field number. |
| public func firstFixed32(_ fieldNumber: Int32) -> UInt32? { |
| var value: UInt32 = 0 |
| guard getFirst(fieldNumber, fixed32: &value) else { return nil } |
| return value |
| } |
| |
| /// Fetches the first fixed64 for the given field number. |
| public func firstFixed64(_ fieldNumber: Int32) -> UInt64? { |
| var value: UInt64 = 0 |
| guard getFirst(fieldNumber, fixed64: &value) else { return nil } |
| return value |
| } |
| |
| } |
| |
| /// Map the `NSFastEnumeration` support to a Swift `Sequence`. |
| extension GPBUnknownFields: Sequence { |
| public typealias Element = GPBUnknownField |
| |
| public struct Iterator: IteratorProtocol { |
| var iter: NSFastEnumerationIterator |
| |
| init(_ fields: NSFastEnumeration) { |
| self.iter = NSFastEnumerationIterator(fields) |
| } |
| |
| public mutating func next() -> GPBUnknownField? { |
| return iter.next() as? GPBUnknownField |
| } |
| } |
| |
| public func makeIterator() -> Iterator { |
| return Iterator(self) |
| } |
| } |