/// <inheritdoc /> internal override Result Apply(ref JToken token, JsonSerializer serializer) { var pointer = JTokenPointer.Get(token, Path); if (pointer.IsFailure) { return(Result.Fail(pointer.Error)); } var jValue = Value.GetJToken(serializer); switch (pointer.Value) { case JRootPointer _: { token = jValue; return(Result.Ok()); } case JObjectPointer jObjectPointer: { return(jObjectPointer.SetValue(jValue)); } case JArrayPointer jArrayPointer: { return(jArrayPointer.SetValue(jValue)); } default: throw new JsonPatchException(JsonPatchMessages.UnknownPathPointer); } }
public void RootArrayPointer() { JArray jArray = JArray.Parse("[]"); var pointer = JTokenPointer.Get(jArray, ""); pointer.IsSuccess.ShouldBeTrue(); pointer.Value.ShouldBeOfType <JRootPointer>(); }
public void FinalTokenIsNeitherObjectNorArray() { JObject jObject = JObject.Parse("{ \"var\": 3 }"); var pointer = JTokenPointer.Get(jObject, "/var/bar"); pointer.IsFailure.ShouldBeTrue(); pointer.Error.ShouldContain("'/var/bar'"); }
public void PointerToAbsentObjectProperty() { JObject jObject = JObject.Parse("{ \"var\": [] }"); var pointer = JTokenPointer.Get(jObject, "/boo/var"); pointer.IsFailure.ShouldBeTrue(); pointer.Error.ShouldContain("'/boo'"); }
public void RootObjectPointer() { JObject jObject = JObject.Parse("{}"); var pointer = JTokenPointer.Get(jObject, ""); pointer.IsSuccess.ShouldBeTrue(); pointer.Value.ShouldBeOfType <JRootPointer>(); }
public void PointerThroughPrimitiveType() { JObject jObject = JObject.Parse("{ \"var\": 3 }"); var pointer = JTokenPointer.Get(jObject, "/var/bar/foo"); pointer.IsFailure.ShouldBeTrue(); pointer.Error.ShouldContain("'/var'"); pointer.Error.ShouldContain("'Integer'"); }
public void PointerToPropertyInArray() { JArray jArray = JArray.Parse("[ {}, {} ]"); var pointer = JTokenPointer.Get(jArray, "/var/bar"); pointer.IsFailure.ShouldBeTrue(); pointer.Error.ShouldContain("''"); pointer.Error.ShouldContain("'var'"); }
public void PointerToAbsentArrayIndex_InTheEndOfPath() { JArray jArray = JArray.Parse("[ {}, {} ]"); var pointer = JTokenPointer.Get(jArray, "/4"); pointer.IsFailure.ShouldBeTrue(); pointer.Error.ShouldContain("''"); pointer.Error.ShouldContain("'4'"); }
public void PointerToArrayInsideObject() { JObject jObject = JObject.Parse("{ \"var\": [] }"); var pointer = JTokenPointer.Get(jObject, "/var/-"); pointer.IsSuccess.ShouldBeTrue(); var jArrayPointer = pointer.Value.ShouldBeOfType <JArrayPointer>(); var(jArr, pathPart) = jArrayPointer; jObject.GetValue("var").ShouldBeSameAs(jArr); pathPart.ShouldBe("-"); }
public void PointerToObjectInsideArray() { JArray jArray = JArray.Parse("[ {}, {} ]"); var pointer = JTokenPointer.Get(jArray, "/1/bar"); pointer.IsSuccess.ShouldBeTrue(); var jObjectPointer = pointer.Value.ShouldBeOfType <JObjectPointer>(); var(jObj, pathPart) = jObjectPointer; jArray[1].ShouldBeSameAs(jObj); pathPart.ShouldBe("bar"); }
public void NestedObjectPropertyPointer() { JObject jObject = JObject.Parse("{ \"var\": {} }"); var pointer = JTokenPointer.Get(jObject, "/var/boo"); pointer.IsSuccess.ShouldBeTrue(); var jObjectPointer = pointer.Value.ShouldBeOfType <JObjectPointer>(); var(jObj, pathPart) = jObjectPointer; jObject.GetValue("var").ShouldBeSameAs(jObj); pathPart.ShouldBe("boo"); }
public void RootArrayItemPointer() { JArray jArray = JArray.Parse("[]"); var pointer = JTokenPointer.Get(jArray, "/0"); pointer.IsSuccess.ShouldBeTrue(); var jArrayPointer = pointer.Value.ShouldBeOfType <JArrayPointer>(); var(jArr, pathPart) = jArrayPointer; jArray.ShouldBeSameAs(jArr); pathPart.ShouldBe("0"); }
public void SpecialSymbolsInPaths() { JObject jObject = JObject.Parse("{ \"foo/bar~\": {} }"); var pointer = JTokenPointer.Get(jObject, "/foo~1bar~0/7"); pointer.IsSuccess.ShouldBeTrue(); var jObjectPointer = pointer.Value.ShouldBeOfType <JObjectPointer>(); var(jObj, pathPart) = jObjectPointer; jObject.GetValue("foo/bar~").ShouldBeSameAs(jObj); pathPart.ShouldBe("7"); }