r3labs / diff

A library for diffing golang structures
Mozilla Public License 2.0
895 stars 84 forks source link

Patching slice back to empty slice returns patchLog.Applied() to be false #91

Open jeffy-mathew opened 2 years ago

jeffy-mathew commented 2 years ago

patchLog.Applied() is false when we run the following code snippet regardless the patch operation works as expected.

package main

import (
    "fmt"

    "github.com/r3labs/diff/v3"
)

type Order struct {
    ID         string     `json:"id"`
    OrderItems OrderItems `json:"orderItems"`
}

type OrderItems struct {
    Items []string `json:"items"`
}

func main() {
    a := Order{
        ID: "1234",
    }

    b := Order{
        ID:         "1234",
        OrderItems: OrderItems{[]string{"1", "2", "4"}},
    }

    d, _ := diff.NewDiffer(diff.TagName("json"))

    changelog, _ := d.Diff(b, a)

    patchLog := d.Patch(changelog, &b)
    fmt.Printf("patchlog applied : %t \nhas errors %t \nerror count %d \n\n", patchLog.Applied(), patchLog.HasErrors(), patchLog.ErrorCount())

    fmt.Printf("values \n a: %#v \n b: %#v", a, b)
}