public function perform($targetDocument)
{
$pointer = new Pointer($targetDocument);
try {
$get = $pointer->get($this->getFrom());
} catch (NonexistentValueReferencedException $e) {
return $targetDocument;
}
if ($this->getFrom() === $this->getPath()) {
return $targetDocument;
}
$removeOperation = new \stdClass();
$removeOperation->path = $this->getFrom();
$remove = new Remove($removeOperation);
$targetDocument = $remove->perform($targetDocument);
$addOperation = new \stdClass();
$addOperation->path = $this->getPath();
$addOperation->value = $get;
$add = new Add($addOperation);
return $add->perform($targetDocument);
}