json0-rs 0.1.0

JSON0 OT implement in rust.
Documentation
[{"p": ["p1"],"oi": "v1"}]
[]
[{"p": ["p1"],"oi": "v1"}]
[]

# insert/replace/delete op on different path

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

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

[{"p": ["p1"],"oi": "v1", "od":"v3"}]
[{"p": ["p2"],"oi": "v2", "od":"v4"}]
[{"p": ["p1"],"oi": "v1", "od":"v3"}]
[{"p": ["p2"],"oi": "v2", "od":"v4"}]

[{"p": ["p1", "p2"],"oi": "v1", "od":"v3"}]
[{"p": ["p1", "p3"],"oi": "v2", "od":"v4"}]
[{"p": ["p1", "p2"],"oi": "v1", "od":"v3"}]
[{"p": ["p1", "p3"],"oi": "v2", "od":"v4"}]

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

[{"p": ["p1", "p2"],"od": "v1"}]
[{"p": ["p1", "p3"],"od": "v2"}]
[{"p": ["p1", "p2"],"od": "v1"}]
[{"p": ["p1", "p3"],"od": "v2"}]

# insert/replace/delete on same path

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

[{"p": ["p1"],"oi": "v1", "od":"v3"}]
[{"p": ["p1"],"oi": "v2", "od":"v4"}]
[{"p": ["p1"],"oi": "v1", "od":"v2"}]
[]

[{"p": ["p1"],"od": "v1"}]
[{"p": ["p1"],"od": "v2"}]
[]
[]

## insert conflict with replace
[{"p": ["p1"],"oi": "v1"}]
[{"p": ["p1"],"oi": "v2", "od":"v3"}]
[{"p": ["p1"],"oi": "v1", "od":"v2"}]
[]

[{"p": ["p1"],"oi": "v2", "od":"v3"}]
[{"p": ["p1"],"oi": "v1"}]
[{"p": ["p1"],"oi": "v2", "od":"v1"}]
[]

## insert conflict with delete
[{"p": ["p1"],"oi": "v1"}]
[{"p": ["p1"],"od": "v2"}]
[{"p": ["p1"],"oi": "v1"}]
[]

[{"p": ["p1"],"od": "v1"}]
[{"p": ["p1"],"oi": "v1"}]
[{"p": ["p1"],"od": "v1"}]
[]

## replace conflict with delete
[{"p": ["p1"],"oi": "v2", "od":"v3"}]
[{"p": ["p1"],"od": "v1"}]
[{"p": ["p1"],"oi": "v2"}]
[]

[{"p": ["p1"],"od": "v1"}]
[{"p": ["p1"],"oi": "v2", "od":"v3"}]
[]
[]

# insert/replace/delete on overlap path

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

## does not meet CP1
[{"p": ["p1", "p2"],"oi": "v1"}]
[{"p": ["p1"],"oi": "v2"}]
[{"p": ["p1"], "od":"v2"},{"p": ["p1", "p2"],"oi": "v1"}]
[{"p": ["p1"],"oi": "v2"}]

## delete conflict with delete
[{"p": ["p1"],"od": {"p2":"v2"}}]
[{"p": ["p1", "p2"],"od": "v2"}]
[{"p": ["p1"],"od": {}}]
[]

## replace conflict with replace
[{"p": ["p1"],"oi": "v1", "od": {"p2": "v2"}}]
[{"p": ["p1", "p2"],"oi": "v3", "od":"v4"}]
[{"p": ["p1"],"oi": "v1", "od": {"p2": "v3"}}]
[]

## insert conflict with delete
[{"p": ["p1"],"od": {"p2": "v1"}}]
[{"p": ["p1", "p2"],"oi": "v2"}]
[{"p": ["p1"],"od": {"p2": "v2"}}]
[]

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

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

## does not meet CP1
[{"p": ["p1", "p2"],"od": "v1"}]
[{"p": ["p1"],"oi": {"p2": "v2"}}]
[{"p": ["p1", "p2"],"od": "v1"}]
[{"p": ["p1"],"oi": {"p2": "v2"}}]

## insert conflict with replace

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

## does not meet CP1
# eq: origin {"p1": {"p2" :"v2"}}
[{"p": ["p1", "p2"], "oi": "v1", "od": "v2"}]
[{"p": ["p1"],"oi": {"p3":"v4"}}]
[{"p":["p1"], "od": {"p3":"v4"}}, {"p": ["p1", "p2"], "oi": "v1", "od": "v2"}]
[{"p": ["p1"],"oi": {"p3":"v4"}}]

## delete conflict with replace

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

# op on deleted path
[{"p": ["p1"], "li": "v1"}]
[{"p": ["p1"],"od": ["l3","l4"]}]
[]
[{"p": ["p1"],"od": ["l3","l4"]}]

[{"p": ["p1"], "li": "v1"}]
[{"p": ["p1"],"od": ["l3","l4"], "oi":["l5","l6"]}]
[]
[{"p": ["p1"],"od": ["l3","l4"], "oi":["l5","l6"]}]