buranmert / Diffusal

[WIP] Diffusal lets you get diff between two objects with ease.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Diffusal

Diffusal lets you get diff between two objects with ease.

Sample Use

Let's say we have a simple User model:

struct User {
    let username: String
    let firstName: String
    let lastName: String
    let dateOfBirth: Date
    let website: URL
}

We can make it "diffable" as follows:

extension User: Diffable {
    
    static var allKeyPaths: Set<PartialKeyPath<User>> {
        return [\User.username, \User.firstName, \User.lastName, \User.dateOfBirth, \User.website]
    }
}

Let's create two different users:

let user1 = User(username: "gokselkk", firstName: "Goksel", lastName: "Koksal", dateOfBirth: dob, website: url)
let user2 = User(username: "baketheegg", firstName: "Sila", lastName: "Koksal", dateOfBirth: dob, website: url)

Now we can get diff:

let diff = try User.diff(user1, user2)

for change in diff.changes {
  let keyPath = change.keyPath
  let value1 = user1[keyPath: keyPath]
  let value2 = user2[keyPath: keyPath]
  
  print("\(value1) is different from \(value2)")
}

Viola!

gokselkk is different from baketheegg.
Goksel is different from Sila.

About

[WIP] Diffusal lets you get diff between two objects with ease.

License:MIT License


Languages

Language:Swift 97.4%Language:Objective-C 2.6%