pkl-swift/Sources/PklSwift/PklCodingKey.swift

52 lines
1.6 KiB
Swift

// ===----------------------------------------------------------------------===//
// Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
//
// Licensed 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
//
// https://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.
// ===----------------------------------------------------------------------===//
import Foundation
public struct PklCodingKey: CodingKey, Equatable {
public let stringValue: String
public let intValue: Int?
public init?(stringValue: String) {
self.stringValue = stringValue
self.intValue = nil
}
public init?(intValue: Int) {
self.stringValue = "\(intValue)"
self.intValue = intValue
}
public init(string: String) {
self.stringValue = string
self.intValue = nil
}
init(_ base: some CodingKey) {
if let intValue = base.intValue {
self.init(intValue: intValue)!
} else {
self.init(stringValue: base.stringValue)!
}
}
}
extension PklCodingKey: Hashable {
public func hash(into hasher: inout Hasher) {
self.intValue?.hash(into: &hasher) ?? self.stringValue.hash(into: &hasher)
}
}