import Foundation public struct RDEPUBCFIPath: Codable, Equatable, Hashable { public var steps: [RDEPUBCFIStep] public init(steps: [RDEPUBCFIStep] = []) { self.steps = steps } public func commonPrefix(with other: RDEPUBCFIPath) -> RDEPUBCFIPath { var prefix: [RDEPUBCFIStep] = [] let upperBound = min(steps.count, other.steps.count) for index in 0.. RDEPUBCFIPath { guard prefix.steps.count <= steps.count else { return self } let candidate = Array(steps.prefix(prefix.steps.count)) guard candidate == prefix.steps else { return self } return RDEPUBCFIPath(steps: Array(steps.dropFirst(prefix.steps.count))) } } public struct RDEPUBCFIStep: Codable, Equatable, Hashable { public var index: Int public var idAssertion: String? public init(index: Int, idAssertion: String? = nil) { self.index = index self.idAssertion = idAssertion?.rd_nilIfEmpty } }