#auto-merge #json #operations #received #concurrently #crdt #structure

yanked automerge-rs

Rust implementation of the Automerge replicated JSON datatype

0.0.2 Dec 28, 2019
0.0.1 Dec 28, 2019

#7 in #received

MIT license

47KB
1K SLoC

Automerge

This is a very early, very much work in progress implementation of automerge in rust. At the moment it barely implements a read only view of operations received, with very little testing that it works. Objectives for it are:

  • Full read and write replication
  • no_std support to make it easy to use in WASM environments
  • Model based testing to ensure compatibility with the JS library

How to use

You'll need to export changes from automerge as JSON rather than using the encoding that Automerge.save uses. So first do this:

const doc = <your automerge document>
const changes = Automerge.getHistory(doc).map(h => h.change)
console.log(JSON.stringify(changes, null, 4))

Now you can load these changes into automerge like so:

extern crate automerge;

fn main() {
    let changes: Vec<automerge::Change> = serde_json::from_str("<paste the changes JSON here>").unwrap();
    let document = automerge::Document::load(changes).unwrap();
    let state: serde_json::Value = document.state().unwrap();
    println!("{:?}", state);
}

Dependencies

~0.7–1.6MB
~35K SLoC