json0-rs 0.1.0

JSON0 OT implement in rust.
Documentation
# apply add number

{"p1": 10}
[{"p":["p1"], "na":100}]
{"p1":110}

{"p1": 10}
[{"p":["p1"], "na":-100}]
{"p1":-90}

{"p1": 0.1}
[{"p":["p1"], "na":-0.1}]
{"p1":0.0}

{"p1": 10}
[{"p":["p1"], "t": "na", "o":100}]
{"p1":110}

{"p1": 10}
[{"p":["p1"], "t": "na", "o":-100}]
{"p1":-90}

{"p1": 0.1}
[{"p":["p1"], "t": "na", "o":-0.1}]
{"p1":0.0}

# apply text 

{"p1": null}
[{"p":["p1"], "t": "text", "o": {"p":2, "i":"hello"}}]
{"p1":"hello"}

{"p1": null}
[{"p":["p1"], "t": "text", "o": {"p":2, "d":"hello"}}]
{"p1":null}

{}
[{"p":["p1"], "t": "text", "o": {"p":2, "i":"hello"}}]
{"p1":"hello"}

{}
[{"p":["p1"], "t": "text", "o": {"p":2, "d":"hello"}}]
{}

{"p1": "Mr. J"}
[{"p":["p1"], "t": "text", "o": {"p":5, "i":", hello"}}]
{"p1": "Mr. J, hello"}

{"p1": "Mr. J"}
[{"p":["p1"], "t": "text", "o": {"p":0, "i":"hello, "}}]
{"p1": "hello, Mr. J"}

{"p1": "AB"}
[{"p":["p1"], "t": "text", "o": {"p":1, "i":" Middle "}}]
{"p1": "A Middle B"}

# object insert

{}
[{"p":["p1"], "oi":{"p2":{}}}]
{"p1":{"p2":{}}}

{}
[{"p":["p1"], "oi":200}]
{"p1":200}

{"x":"a"}
[{"p":["y"],"oi":"b"}]
{"x":"a","y":"b"}


{"p1":{"p2":{}}}
[{"p":["p1", "p2"], "oi":{"p3":[1, {"p4":{}}]}}]
{"p1":{"p2":{"p3":[1,{"p4":{}}]}}}

{"p1":{"p2":{"p3":[1,{"p4":{}}]}}}
[{"p":["p1", "p2", "p3", 1, "p4"], "oi":{"p5":[1, 2]}}]
{"p1":{"p2":{"p3":[1,{"p4":{"p5":[1,2]}}]}}}

{"p1":{"p2":{"p3":[1,{"p4":{"p5":[1,2]}}]}}}
[{"p":["p1", "p2", "p3", 1, "p4"], "oi":[3,4]}]
{"p1":{"p2":{"p3":[1,{"p4":[3,4]}]}}}

{}
[{"p":["p1"], "oi":"v2"}]
{"p1":"v2"}

# {"p1":"v2"}
# [{"p": ["p1", "p2"],"oi": "v1"}]
# {"p1":"v2"}

# object delete

## delete to deep inner object with number index in path
{"p1":{"p2":{"p3":[1,{"level41":[1,2], "level42":[3,4]}]}}}
[{"p":["p1", "p2", "p3", 1, "level41"], "od":[1, 2]}]
{"p1":{"p2":{"p3":[1,{"level42":[3,4]}]}}}

## delete to inner object
{"p1":{"p2":{"p3":[1,{"level42":[3,4]}]}}}
[{"p":["p1", "p2", "p3"], "od":[1,{"level41":[1,2], "level42":[3,4]}]}]
{"p1":{"p2":{}}}

# object replace

## replace deep inner object with number index in path
{"p1":{"p2":{"p3":[1,{"level41":[1,2], "level42":[3,4]}]}}}
[{"p":["p1", "p2", "p3", 1, "level41"], "oi":{"5":"6"}, "od":[1, 2]}]
{"p1":{"p2":{"p3":[1,{"level41":{"5":"6"},"level42":[3,4]}]}}}

## replace to inner object
{"p1":{"p2":{"p3":[1,{"level41":{"5":"6"},"level42":[3,4]}]}}}
[{"p":["p1", "p2"], "oi":"hello", "od":{"p3":[1,{"level41":[1,2], "level42":[3,4]}]}}]
{"p1":{"p2":"hello"}}

# list insert

## insert to empty array
{"p1": []}
[{"p":["p1", 0], "li":{"hello":[1]}}]
{"p1":[{"hello":[1]}]}

## insert to array
{"p1":[{"hello":[1]}]}
[{"p":["p1", 0], "li":1}]
{"p1":[1,{"hello":[1]}]}

## insert to inner array
{"p1":[1,{"hello":[1]}]}
[{"p":["p1", 1, "hello",1], "li":[7,8]}]
{"p1":[1,{"hello":[1,[7,8]]}]}

## append
{"p1":[1,{"hello":[1,[7,8]]}]}
[{"p":["p1", 10], "li":[2,3]}]
{"p1":[1,{"hello":[1,[7,8]]},[2,3]]}

# list delete

## delete from innser array
{"p1":[1,{"hello":[1,[7,8]]}]}
[{"p":["p1", 1, "hello", 1], "ld":[7,8]}]
{"p1":[1,{"hello":[1]}]}

## delete from inner object
{"p1":[1,{"hello":[1]}]}
[{"p":["p1", 1], "ld":{"hello":[1,[7,8]]}}]
{"p1":[1]}

# list replace

## replace from innser array
{"p1":[1,{"hello":[1,[7,8]]}]}
[{"p":["p1", 1, "hello", 1], "li":{"hello":"world"}, "ld":[7,8]}]
{"p1":[1,{"hello":[1,{"hello":"world"}]}]}

## replace from inner object
{"p1":[1,{"hello":[1,{"hello":"world"}]}]}
[{"p":["p1", 1], "li": {"hello":"world"}, "ld":{"hello":[1,[7,8]]}}]
{"p1":[1,{"hello":"world"}]}

# list move

## move left
{"p1":[1,{"hello":[1,[7,8], 9, 10]}]}
[{"p":["p1", 1, "hello", 2], "lm":1}]
{"p1":[1,{"hello":[1,9,[7,8],10]}]}

## move right
{"p1":[1,{"hello":[1,[7,8], 9, 10]}]}
[{"p":["p1", 1, "hello", 1], "lm":2}]
{"p1":[1,{"hello":[1,9,[7,8],10]}]}

## stay
{"p1":[1,{"hello":[1,[7,8], 9, 10]}]}
[{"p":["p1", 1, "hello", 1], "lm":1}]
{"p1":[1,{"hello":[1,[7,8],9,10]}]}