sdk/communication/AzureCommunicationChat/Source/Generated/Util/PatchUtil.swift (46 lines of code) (raw):
import Foundation
// TODO: Remove this when these objects are in AzureCore
enum MergePatchOpType: String, Codable {
case add
case remove
case replace
case move
case copy
case test
}
// TODO: NO support for nil-setting sentinel
struct MergePatchOperation: Encodable {
let operation: MergePatchOpType
let from: String?
let path: String
let value: String?
// MARK: Encodable
enum CodingKeys: String, CodingKey {
case operation, from, path, value
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(operation, forKey: .operation)
try container.encode(from, forKey: .from)
try container.encode(path, forKey: .path)
try container.encode(value, forKey: .value)
}
}
/// Helper class for creating PatchObjects
final class MergePatchObject: Encodable {
fileprivate var operations = [MergePatchOperation]()
/// Inserts a new value at an array index or adds a new property.
func add(atPath path: String, withValue value: String) {
operations.append(MergePatchOperation(operation: .add, from: nil, path: path, value: value))
}
/// Remove the property or entry at an array index. Property must exist.
func remove(atPath path: String) {
operations.append(MergePatchOperation(operation: .remove, from: nil, path: path, value: nil))
}
/// Replaces the value at the target location with a new value. Existing value must exist.
func replace(atPath path: String, withValue value: String) {
operations.append(MergePatchOperation(operation: .replace, from: nil, path: path, value: value))
}
/// Remove the value at a specified location and adds it to the target location.
func move(fromPath src: String, toPath dest: String) {
operations.append(MergePatchOperation(operation: .move, from: src, path: dest, value: nil))
}
/// Copies the value at a specified location and adds it to the target location.
func copy(fromPath src: String, toPath dest: String) {
operations.append(MergePatchOperation(operation: .copy, from: src, path: dest, value: nil))
}
/// Tests that a value at the target location is equal to a specified value.
func test(atPath path: String, equalsValue value: String) {
operations.append(MergePatchOperation(operation: .test, from: nil, path: path, value: value))
}
}