Skip to content

Fails to patch values that encode to Aeson TaggedObject #5

@thomasjm

Description

@thomasjm

Hello -- another patching issue here. This one happens when trying to patch a value that encodes in a TaggedObject manner.

data Union = UnionA Int | UnionB String deriving (Show, Eq, Generic)
$(A.deriveJSON A.defaultOptions ''Union)
deriveJsonPatch A.defaultOptions ''Union

data Person = Person { value :: Union } deriving (Show, Eq, Generic)
$(A.deriveJSON A.defaultOptions ''Person)
deriveJsonPatch A.defaultOptions ''Person

main :: IO ()
main = do
  let value1 = Person (UnionA 42)
  let value2 = Person (UnionB "abc")

  let p = AD.diff (A.toJSON value1) (A.toJSON value2)
  putStrLn [i|Patch: #{p}|]

  let patched = ADG.patch p value1
  putStrLn [i|Patched: #{patched}|]

Output:

> A.encode (UnionB "abc")
"{\"tag\":\"UnionB\",\"contents\":\"abc\"}"

> main
Patch: Patch {patchOperations = [Rep {changePointer = Pointer {pointerPath = [OKey "value",OKey "tag"]}, changeValue = String "UnionB"},Rep {changePointer = Pointer {pointerPath = [OKey "value",OKey "contents"]}, changeValue = String "abc"}]}
Patched: Error "Operation Replace on /value/tag failed: Invalid path"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions