Add a diagram to show how the demo works

Add a diagram to show how the demo works
This commit is contained in:
Hassan Abedi 2026-05-29 09:40:01 +02:00
parent 7d3ce6a7cc
commit bc65de6b29
4 changed files with 395 additions and 1 deletions

View File

@ -1,6 +1,6 @@
## Geomerge Demo ## Geomerge Demo
This crate demonstrates storing and reading data with the `geomerge` submodule. This demo show how to store and read data from Geomerge.
The demo The demo
1. loads the compiled `paths.json` schema 1. loads the compiled `paths.json` schema
@ -10,6 +10,8 @@ The demo
5. persists the store to bytes 5. persists the store to bytes
6. reloads it and checks that the restored store matches the original. 6. reloads it and checks that the restored store matches the original.
![Workflow Diagram](docs/diagrams/workflow.svg)
### Run ### Run
```sh ```sh

View File

@ -0,0 +1,12 @@
#!/bin/bash
# You need to have Graphviz installed to run this script
# On Debian-based OSes, you can install it using: sudo apt-get install graphviz
# Directory containing .dot files (with default value)
ASSET_DIR=${1:-"."}
# Make figures from .dot files
for f in "${ASSET_DIR}"/*.dot; do
dot -Tsvg "$f" -o "${f%.dot}.svg"
done

View File

@ -0,0 +1,133 @@
digraph GeomergeDemoWorkflow {
fontname = "Helvetica,Arial,sans-serif"
layout = dot
rankdir = LR
ranksep = 0.9;
nodesep = 0.7;
splines = true;
compound = true;
bgcolor = "white"
node [
fontname = "Helvetica,Arial,sans-serif",
shape = box,
style = "filled,rounded",
color = "#555555",
fillcolor = "white",
penwidth = 1.5
]
edge [
fontname = "Helvetica,Arial,sans-serif",
color = "#333333",
fontsize = 9,
fontcolor = "#555555",
labeldistance = 2.0,
penwidth = 1.2
]
subgraph cluster_inputs {
label = "Inputs"
style = "dashed"
color = "#888888"
fontcolor = "#555555"
margin = 18
paths_schema [label = "paths.json\n(compiled schema)", fillcolor = "#E8F4FD", color = "#2196F3"]
fixture_rows [label = "Fixture Rows\n(graphs, vertices, edge)", fillcolor = "#E8F4FD", color = "#2196F3"]
}
subgraph cluster_demo {
label = "geormerge-demo (run_demo)"
style = "rounded"
color = "#666666"
fontcolor = "#333333"
bgcolor = "#FAFAFA"
margin = 20
subgraph cluster_loading {
label = "Theory Loading"
style = "dashed"
color = "#9C27B0"
fontcolor = "#7B1FA2"
margin = 14
load_theory [label = "load_paths_theory\n(serde_json)", fillcolor = "#F3E5F5", color = "#9C27B0"]
flat_theory [label = <<table border="0" cellborder="0" cellspacing="0" cellpadding="4">
<tr><td align="center"><b>FlatTheory</b></td></tr>
<tr><td align="left" balign="left">• 10 tables</td></tr>
<tr><td align="left" balign="left">• 12 laws</td></tr>
</table>>, fillcolor = "#F3E5F5", color = "#9C27B0", shape = box]
}
subgraph cluster_store {
label = "Store and Transaction"
style = "dashed"
color = "#4CAF50"
fontcolor = "#388E3C"
margin = 14
build_store [label = "Store::try_from_theory", fillcolor = "#E8F5E9", color = "#4CAF50"]
transact [label = <<table border="0" cellborder="0" cellspacing="0" cellpadding="4">
<tr><td align="center"><b>add_paths_data (transact)</b></td></tr>
<tr><td align="left" balign="left">• append Graphs rows</td></tr>
<tr><td align="left" balign="left">• append G0, G1 rows</td></tr>
<tr><td align="left" balign="left">• append G.V vertices</td></tr>
<tr><td align="left" balign="left">• append G.E edge</td></tr>
</table>>, fillcolor = "#E8F5E9", color = "#4CAF50", shape = box]
validate [label = "Law Validation\n(append_row_validated)", fillcolor = "#E8F5E9", color = "#4CAF50"]
assert_edge [label = "assert_edge_was_stored\n(row count, cells)", fillcolor = "#E8F5E9", color = "#4CAF50"]
}
subgraph cluster_persist {
label = "Persistence Round Trip"
style = "dashed"
color = "#FF9800"
fontcolor = "#F57C00"
margin = 14
dump_before [label = "store.dump()\n(before persist)", fillcolor = "#FFF3E0", color = "#FF9800"]
encode [label = "pst::encode_store\n-> bytes", fillcolor = "#FFF3E0", color = "#FF9800"]
decode [label = "pst::decode_store\n-> restored Store", fillcolor = "#FFF3E0", color = "#FF9800"]
compare [label = "dump equality check", fillcolor = "#FFF3E0", color = "#FF9800"]
}
}
subgraph cluster_report {
label = "Report"
style = "dashed"
color = "#888888"
fontcolor = "#555555"
margin = 18
demo_report [label = <<table border="0" cellborder="0" cellspacing="0" cellpadding="4">
<tr><td align="center"><b>DemoReport</b></td></tr>
<tr><td align="left" balign="left">• table_count, law_count</td></tr>
<tr><td align="left" balign="left">• graph, vertex, edge counts</td></tr>
<tr><td align="left" balign="left">• edge endpoints</td></tr>
<tr><td align="left" balign="left">• persisted_bytes</td></tr>
</table>>, fillcolor = "#ECEFF1", color = "#607D8B", shape = box]
stdout [label = "stdout\n(println! lines)", fillcolor = "#ECEFF1", color = "#607D8B"]
}
// Inputs into loading
paths_schema -> load_theory [label = "include_str!", color = "#2196F3"]
load_theory -> flat_theory [color = "#9C27B0"]
// Loading into store
flat_theory -> build_store [color = "#9C27B0"]
build_store -> transact [color = "#4CAF50"]
fixture_rows -> transact [style = "dashed", color = "#2196F3"]
// Transaction internals
transact -> validate [color = "#4CAF50"]
validate -> transact [style = "dashed", label = "row ids", color = "#4CAF50"]
transact -> assert_edge [color = "#4CAF50"]
// Into persistence
assert_edge -> dump_before [color = "#FF9800"]
dump_before -> encode [color = "#FF9800"]
encode -> decode [label = "bytes", color = "#FF9800"]
decode -> compare [color = "#FF9800"]
dump_before -> compare [style = "dashed", label = "expected", color = "#FF9800"]
// Out to report
compare -> demo_report [color = "#607D8B"]
flat_theory -> demo_report [style = "dashed", label = "counts", color = "#607D8B"]
demo_report -> stdout [color = "#607D8B"]
}

View File

@ -0,0 +1,247 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (0)
-->
<!-- Title: GeomergeDemoWorkflow Pages: 1 -->
<svg width="2601pt" height="411pt"
viewBox="0.00 0.00 2600.75 411.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 407)">
<title>GeomergeDemoWorkflow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-407 2596.75,-407 2596.75,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_inputs</title>
<polygon fill="white" stroke="#888888" stroke-dasharray="5,2" points="8,-8 8,-223 202.5,-223 202.5,-8 8,-8"/>
<text text-anchor="middle" x="105.25" y="-205.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#555555">Inputs</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_demo</title>
<path fill="#fafafa" stroke="#666666" d="M284.75,-35C284.75,-35 2155.25,-35 2155.25,-35 2161.25,-35 2167.25,-41 2167.25,-47 2167.25,-47 2167.25,-301 2167.25,-301 2167.25,-307 2161.25,-313 2155.25,-313 2155.25,-313 284.75,-313 284.75,-313 278.75,-313 272.75,-307 272.75,-301 272.75,-301 272.75,-47 272.75,-47 272.75,-41 278.75,-35 284.75,-35"/>
<text text-anchor="middle" x="1220" y="-295.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#333333">geormerge&#45;demo (run_demo)</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_loading</title>
<polygon fill="#fafafa" stroke="#9c27b0" stroke-dasharray="5,2" points="292.75,-113 292.75,-264 609.25,-264 609.25,-113 292.75,-113"/>
<text text-anchor="middle" x="451" y="-246.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#7b1fa2">Theory Loading</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_store</title>
<polygon fill="#fafafa" stroke="#4caf50" stroke-dasharray="5,2" points="648.25,-55 648.25,-264 1350.5,-264 1350.5,-55 648.25,-55"/>
<text text-anchor="middle" x="999.38" y="-246.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#388e3c">Store and Transaction</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_persist</title>
<polygon fill="#fafafa" stroke="#ff9800" stroke-dasharray="5,2" points="1389.5,-63 1389.5,-253 2147.25,-253 2147.25,-63 1389.5,-63"/>
<text text-anchor="middle" x="1768.38" y="-235.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#f57c00">Persistence Round Trip</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_report</title>
<polygon fill="white" stroke="#888888" stroke-dasharray="5,2" points="2191.25,-178 2191.25,-395 2584.75,-395 2584.75,-178 2191.25,-178"/>
<text text-anchor="middle" x="2388" y="-377.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00" fill="#555555">Report</text>
</g>
<!-- paths_schema -->
<g id="node1" class="node">
<title>paths_schema</title>
<path fill="#e8f4fd" stroke="#2196f3" stroke-width="1.5" d="M159,-176C159,-176 51.5,-176 51.5,-176 45.5,-176 39.5,-170 39.5,-164 39.5,-164 39.5,-138 39.5,-138 39.5,-132 45.5,-126 51.5,-126 51.5,-126 159,-126 159,-126 165,-126 171,-132 171,-138 171,-138 171,-164 171,-164 171,-170 165,-176 159,-176"/>
<text text-anchor="middle" x="105.25" y="-158.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">paths.json</text>
<text text-anchor="middle" x="105.25" y="-137.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">(compiled schema)</text>
</g>
<!-- load_theory -->
<g id="node3" class="node">
<title>load_theory</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5" d="M422.5,-188C422.5,-188 318.75,-188 318.75,-188 312.75,-188 306.75,-182 306.75,-176 306.75,-176 306.75,-150 306.75,-150 306.75,-144 312.75,-138 318.75,-138 318.75,-138 422.5,-138 422.5,-138 428.5,-138 434.5,-144 434.5,-150 434.5,-150 434.5,-176 434.5,-176 434.5,-182 428.5,-188 422.5,-188"/>
<text text-anchor="middle" x="370.62" y="-170.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">load_paths_theory</text>
<text text-anchor="middle" x="370.62" y="-149.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">(serde_json)</text>
</g>
<!-- paths_schema&#45;&gt;load_theory -->
<g id="edge1" class="edge">
<title>paths_schema&#45;&gt;load_theory</title>
<path fill="none" stroke="#2196f3" stroke-width="1.2" d="M171.35,-153.97C208.77,-155.67 255.91,-157.82 294.83,-159.59"/>
<polygon fill="#2196f3" stroke="#2196f3" stroke-width="1.2" points="294.67,-163.09 304.82,-160.05 294.99,-156.1 294.67,-163.09"/>
<text text-anchor="middle" x="241.12" y="-163.02" font-family="Helvetica,Arial,sans-serif" font-size="9.00" fill="#555555">include_str!</text>
</g>
<!-- fixture_rows -->
<g id="node2" class="node">
<title>fixture_rows</title>
<path fill="#e8f4fd" stroke="#2196f3" stroke-width="1.5" d="M172.5,-76C172.5,-76 38,-76 38,-76 32,-76 26,-70 26,-64 26,-64 26,-38 26,-38 26,-32 32,-26 38,-26 38,-26 172.5,-26 172.5,-26 178.5,-26 184.5,-32 184.5,-38 184.5,-38 184.5,-64 184.5,-64 184.5,-70 178.5,-76 172.5,-76"/>
<text text-anchor="middle" x="105.25" y="-58.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">Fixture Rows</text>
<text text-anchor="middle" x="105.25" y="-37.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">(graphs, vertices, edge)</text>
</g>
<!-- transact -->
<g id="node6" class="node">
<title>transact</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5" d="M1061.75,-221.12C1061.75,-221.12 893.75,-221.12 893.75,-221.12 887.75,-221.12 881.75,-215.12 881.75,-209.12 881.75,-209.12 881.75,-80.88 881.75,-80.88 881.75,-74.88 887.75,-68.88 893.75,-68.88 893.75,-68.88 1061.75,-68.88 1061.75,-68.88 1067.75,-68.88 1073.75,-74.88 1073.75,-80.88 1073.75,-80.88 1073.75,-209.12 1073.75,-209.12 1073.75,-215.12 1067.75,-221.12 1061.75,-221.12"/>
<text text-anchor="start" x="893.75" y="-200.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">add_paths_data (transact)</text>
<text text-anchor="start" x="893.75" y="-171.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• append Graphs rows</text>
<text text-anchor="start" x="893.75" y="-142.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• append G0, G1 rows</text>
<text text-anchor="start" x="893.75" y="-113.58" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• append G.V vertices</text>
<text text-anchor="start" x="893.75" y="-84.58" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• append G.E edge</text>
</g>
<!-- fixture_rows&#45;&gt;transact -->
<g id="edge5" class="edge">
<title>fixture_rows&#45;&gt;transact</title>
<path fill="none" stroke="#2196f3" stroke-width="1.2" stroke-dasharray="5,2" d="M184.91,-51C237.25,-51 307.55,-51 369.62,-51 369.62,-51 369.62,-51 739.5,-51 784.44,-51 831.02,-65.76 870.87,-83.58"/>
<polygon fill="#2196f3" stroke="#2196f3" stroke-width="1.2" points="869.2,-86.66 879.74,-87.66 872.12,-80.3 869.2,-86.66"/>
</g>
<!-- flat_theory -->
<g id="node4" class="node">
<title>flat_theory</title>
<path fill="#f3e5f5" stroke="#9c27b0" stroke-width="1.5" d="M583.25,-221.12C583.25,-221.12 513.5,-221.12 513.5,-221.12 507.5,-221.12 501.5,-215.12 501.5,-209.12 501.5,-209.12 501.5,-138.88 501.5,-138.88 501.5,-132.88 507.5,-126.88 513.5,-126.88 513.5,-126.88 583.25,-126.88 583.25,-126.88 589.25,-126.88 595.25,-132.88 595.25,-138.88 595.25,-138.88 595.25,-209.12 595.25,-209.12 595.25,-215.12 589.25,-221.12 583.25,-221.12"/>
<text text-anchor="start" x="513.5" y="-200.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">FlatTheory</text>
<text text-anchor="start" x="513.5" y="-171.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• 10 tables</text>
<text text-anchor="start" x="513.5" y="-142.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• 12 laws</text>
</g>
<!-- load_theory&#45;&gt;flat_theory -->
<g id="edge2" class="edge">
<title>load_theory&#45;&gt;flat_theory</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" d="M434.58,-166.94C452.51,-168.06 471.95,-169.28 489.56,-170.38"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2" points="489.11,-173.86 499.31,-170.99 489.55,-166.87 489.11,-173.86"/>
</g>
<!-- build_store -->
<g id="node5" class="node">
<title>build_store</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5" d="M802.75,-174C802.75,-174 674.25,-174 674.25,-174 668.25,-174 662.25,-168 662.25,-162 662.25,-162 662.25,-150 662.25,-150 662.25,-144 668.25,-138 674.25,-138 674.25,-138 802.75,-138 802.75,-138 808.75,-138 814.75,-144 814.75,-150 814.75,-150 814.75,-162 814.75,-162 814.75,-168 808.75,-174 802.75,-174"/>
<text text-anchor="middle" x="738.5" y="-153.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">Store::try_from_theory</text>
</g>
<!-- flat_theory&#45;&gt;build_store -->
<g id="edge3" class="edge">
<title>flat_theory&#45;&gt;build_store</title>
<path fill="none" stroke="#9c27b0" stroke-width="1.2" d="M595.4,-169.6C611.97,-168.01 631.27,-166.16 650.19,-164.35"/>
<polygon fill="#9c27b0" stroke="#9c27b0" stroke-width="1.2" points="650.48,-167.84 660.1,-163.41 649.81,-160.87 650.48,-167.84"/>
</g>
<!-- demo_report -->
<g id="node13" class="node">
<title>demo_report</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5" d="M2390.75,-348.12C2390.75,-348.12 2221.25,-348.12 2221.25,-348.12 2215.25,-348.12 2209.25,-342.12 2209.25,-336.12 2209.25,-336.12 2209.25,-207.88 2209.25,-207.88 2209.25,-201.88 2215.25,-195.88 2221.25,-195.88 2221.25,-195.88 2390.75,-195.88 2390.75,-195.88 2396.75,-195.88 2402.75,-201.88 2402.75,-207.88 2402.75,-207.88 2402.75,-336.12 2402.75,-336.12 2402.75,-342.12 2396.75,-348.12 2390.75,-348.12"/>
<text text-anchor="start" x="2264.75" y="-327.82" font-family="Helvetica,Arial,sans-serif" font-weight="bold" font-size="14.00">DemoReport</text>
<text text-anchor="start" x="2221.25" y="-298.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• table_count, law_count</text>
<text text-anchor="start" x="2221.25" y="-269.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• graph, vertex, edge counts</text>
<text text-anchor="start" x="2221.25" y="-240.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• edge endpoints</text>
<text text-anchor="start" x="2221.25" y="-211.57" font-family="Helvetica,Arial,sans-serif" font-size="14.00">• persisted_bytes</text>
</g>
<!-- flat_theory&#45;&gt;demo_report -->
<g id="edge15" class="edge">
<title>flat_theory&#45;&gt;demo_report</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2" stroke-dasharray="5,2" d="M583.12,-221.62C616.93,-263.22 673.09,-317 737.5,-317 737.5,-317 737.5,-317 2064.38,-317 2108.37,-317 2156.13,-309.64 2197.42,-300.88"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2" points="2198.08,-304.31 2207.11,-298.76 2196.59,-297.47 2198.08,-304.31"/>
<text text-anchor="middle" x="1456.88" y="-321.95" font-family="Helvetica,Arial,sans-serif" font-size="9.00" fill="#555555">counts</text>
</g>
<!-- build_store&#45;&gt;transact -->
<g id="edge4" class="edge">
<title>build_store&#45;&gt;transact</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" d="M815.22,-152.49C832.54,-151.69 851.28,-150.82 869.64,-149.97"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="869.68,-153.47 879.51,-149.51 869.36,-146.48 869.68,-153.47"/>
</g>
<!-- validate -->
<g id="node7" class="node">
<title>validate</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5" d="M1321.12,-119C1321.12,-119 1184.38,-119 1184.38,-119 1178.38,-119 1172.38,-113 1172.38,-107 1172.38,-107 1172.38,-81 1172.38,-81 1172.38,-75 1178.38,-69 1184.38,-69 1184.38,-69 1321.12,-69 1321.12,-69 1327.12,-69 1333.12,-75 1333.12,-81 1333.12,-81 1333.12,-107 1333.12,-107 1333.12,-113 1327.12,-119 1321.12,-119"/>
<text text-anchor="middle" x="1252.75" y="-101.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">Law Validation</text>
<text text-anchor="middle" x="1252.75" y="-80.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">(append_row_validated)</text>
</g>
<!-- transact&#45;&gt;validate -->
<g id="edge6" class="edge">
<title>transact&#45;&gt;validate</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" d="M1074.14,-104.34C1084.98,-100.97 1096,-98.06 1106.75,-96 1123.99,-92.69 1142.59,-91.03 1160.54,-90.38"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="1160.5,-93.88 1170.41,-90.13 1160.32,-86.88 1160.5,-93.88"/>
</g>
<!-- assert_edge -->
<g id="node8" class="node">
<title>assert_edge</title>
<path fill="#e8f5e9" stroke="#4caf50" stroke-width="1.5" d="M1324.5,-219C1324.5,-219 1181,-219 1181,-219 1175,-219 1169,-213 1169,-207 1169,-207 1169,-181 1169,-181 1169,-175 1175,-169 1181,-169 1181,-169 1324.5,-169 1324.5,-169 1330.5,-169 1336.5,-175 1336.5,-181 1336.5,-181 1336.5,-207 1336.5,-207 1336.5,-213 1330.5,-219 1324.5,-219"/>
<text text-anchor="middle" x="1252.75" y="-201.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">assert_edge_was_stored</text>
<text text-anchor="middle" x="1252.75" y="-180.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">(row count, cells)</text>
</g>
<!-- transact&#45;&gt;assert_edge -->
<g id="edge8" class="edge">
<title>transact&#45;&gt;assert_edge</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" d="M1074.01,-166.62C1085.03,-168.89 1096.12,-171.07 1106.75,-173 1123.02,-175.95 1140.37,-178.76 1157.21,-181.31"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="1156.57,-184.75 1166.97,-182.76 1157.6,-177.82 1156.57,-184.75"/>
</g>
<!-- validate&#45;&gt;transact -->
<g id="edge7" class="edge">
<title>validate&#45;&gt;transact</title>
<path fill="none" stroke="#4caf50" stroke-width="1.2" stroke-dasharray="5,2" d="M1172.15,-108.87C1145.1,-113.92 1114.42,-119.65 1085.6,-125.04"/>
<polygon fill="#4caf50" stroke="#4caf50" stroke-width="1.2" points="1085.2,-121.55 1076.02,-126.83 1086.49,-128.43 1085.2,-121.55"/>
<text text-anchor="middle" x="1121.38" y="-125.98" font-family="Helvetica,Arial,sans-serif" font-size="9.00" fill="#555555">row ids</text>
</g>
<!-- dump_before -->
<g id="node9" class="node">
<title>dump_before</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5" d="M1498.25,-210C1498.25,-210 1415.5,-210 1415.5,-210 1409.5,-210 1403.5,-204 1403.5,-198 1403.5,-198 1403.5,-172 1403.5,-172 1403.5,-166 1409.5,-160 1415.5,-160 1415.5,-160 1498.25,-160 1498.25,-160 1504.25,-160 1510.25,-166 1510.25,-172 1510.25,-172 1510.25,-198 1510.25,-198 1510.25,-204 1504.25,-210 1498.25,-210"/>
<text text-anchor="middle" x="1456.88" y="-192.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">store.dump()</text>
<text text-anchor="middle" x="1456.88" y="-171.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">(before persist)</text>
</g>
<!-- assert_edge&#45;&gt;dump_before -->
<g id="edge9" class="edge">
<title>assert_edge&#45;&gt;dump_before</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2" d="M1336.84,-190.3C1355.06,-189.49 1374.09,-188.64 1391.45,-187.87"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2" points="1391.53,-191.37 1401.36,-187.43 1391.22,-184.38 1391.53,-191.37"/>
</g>
<!-- encode -->
<g id="node10" class="node">
<title>encode</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5" d="M1688.5,-145C1688.5,-145 1589.25,-145 1589.25,-145 1583.25,-145 1577.25,-139 1577.25,-133 1577.25,-133 1577.25,-107 1577.25,-107 1577.25,-101 1583.25,-95 1589.25,-95 1589.25,-95 1688.5,-95 1688.5,-95 1694.5,-95 1700.5,-101 1700.5,-107 1700.5,-107 1700.5,-133 1700.5,-133 1700.5,-139 1694.5,-145 1688.5,-145"/>
<text text-anchor="middle" x="1638.88" y="-127.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">pst::encode_store</text>
<text text-anchor="middle" x="1638.88" y="-106.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">&#45;&gt; bytes</text>
</g>
<!-- dump_before&#45;&gt;encode -->
<g id="edge10" class="edge">
<title>dump_before&#45;&gt;encode</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2" d="M1510.42,-166.02C1527.78,-159.76 1547.39,-152.67 1565.94,-145.98"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2" points="1567.09,-149.28 1575.31,-142.59 1564.71,-142.7 1567.09,-149.28"/>
</g>
<!-- compare -->
<g id="node12" class="node">
<title>compare</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5" d="M2121.25,-210C2121.25,-210 2005.5,-210 2005.5,-210 1999.5,-210 1993.5,-204 1993.5,-198 1993.5,-198 1993.5,-186 1993.5,-186 1993.5,-180 1999.5,-174 2005.5,-174 2005.5,-174 2121.25,-174 2121.25,-174 2127.25,-174 2133.25,-180 2133.25,-186 2133.25,-186 2133.25,-198 2133.25,-198 2133.25,-204 2127.25,-210 2121.25,-210"/>
<text text-anchor="middle" x="2063.38" y="-189.2" font-family="Helvetica,Arial,sans-serif" font-size="14.00">dump equality check</text>
</g>
<!-- dump_before&#45;&gt;compare -->
<g id="edge13" class="edge">
<title>dump_before&#45;&gt;compare</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2" stroke-dasharray="5,2" d="M1510.73,-185.61C1616.73,-186.84 1855.9,-189.61 1981.64,-191.07"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2" points="1981.22,-194.56 1991.26,-191.18 1981.3,-187.56 1981.22,-194.56"/>
<text text-anchor="middle" x="1751.88" y="-193.55" font-family="Helvetica,Arial,sans-serif" font-size="9.00" fill="#555555">expected</text>
</g>
<!-- decode -->
<g id="node11" class="node">
<title>decode</title>
<path fill="#fff3e0" stroke="#ff9800" stroke-width="1.5" d="M1914.5,-145C1914.5,-145 1815.25,-145 1815.25,-145 1809.25,-145 1803.25,-139 1803.25,-133 1803.25,-133 1803.25,-107 1803.25,-107 1803.25,-101 1809.25,-95 1815.25,-95 1815.25,-95 1914.5,-95 1914.5,-95 1920.5,-95 1926.5,-101 1926.5,-107 1926.5,-107 1926.5,-133 1926.5,-133 1926.5,-139 1920.5,-145 1914.5,-145"/>
<text text-anchor="middle" x="1864.88" y="-127.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">pst::decode_store</text>
<text text-anchor="middle" x="1864.88" y="-106.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">&#45;&gt; restored Store</text>
</g>
<!-- encode&#45;&gt;decode -->
<g id="edge11" class="edge">
<title>encode&#45;&gt;decode</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2" d="M1700.79,-120C1728.68,-120 1761.96,-120 1791.16,-120"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2" points="1791.16,-123.5 1801.16,-120 1791.16,-116.5 1791.16,-123.5"/>
<text text-anchor="middle" x="1751.88" y="-124.95" font-family="Helvetica,Arial,sans-serif" font-size="9.00" fill="#555555">bytes</text>
</g>
<!-- decode&#45;&gt;compare -->
<g id="edge12" class="edge">
<title>decode&#45;&gt;compare</title>
<path fill="none" stroke="#ff9800" stroke-width="1.2" d="M1926.97,-142.39C1950.61,-151.05 1977.6,-160.94 2001.24,-169.6"/>
<polygon fill="#ff9800" stroke="#ff9800" stroke-width="1.2" points="1999.89,-172.83 2010.49,-172.99 2002.3,-166.26 1999.89,-172.83"/>
</g>
<!-- compare&#45;&gt;demo_report -->
<g id="edge14" class="edge">
<title>compare&#45;&gt;demo_report</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2" d="M2119.88,-210.45C2143.18,-218.2 2171.1,-227.48 2198.11,-236.46"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2" points="2196.89,-239.75 2207.48,-239.58 2199.1,-233.1 2196.89,-239.75"/>
</g>
<!-- stdout -->
<g id="node14" class="node">
<title>stdout</title>
<path fill="#eceff1" stroke="#607d8b" stroke-width="1.5" d="M2554.75,-297C2554.75,-297 2481.75,-297 2481.75,-297 2475.75,-297 2469.75,-291 2469.75,-285 2469.75,-285 2469.75,-259 2469.75,-259 2469.75,-253 2475.75,-247 2481.75,-247 2481.75,-247 2554.75,-247 2554.75,-247 2560.75,-247 2566.75,-253 2566.75,-259 2566.75,-259 2566.75,-285 2566.75,-285 2566.75,-291 2560.75,-297 2554.75,-297"/>
<text text-anchor="middle" x="2518.25" y="-279.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">stdout</text>
<text text-anchor="middle" x="2518.25" y="-258.7" font-family="Helvetica,Arial,sans-serif" font-size="14.00">(println! lines)</text>
</g>
<!-- demo_report&#45;&gt;stdout -->
<g id="edge16" class="edge">
<title>demo_report&#45;&gt;stdout</title>
<path fill="none" stroke="#607d8b" stroke-width="1.2" d="M2403.2,-272C2421.83,-272 2440.83,-272 2457.85,-272"/>
<polygon fill="#607d8b" stroke="#607d8b" stroke-width="1.2" points="2457.46,-275.5 2467.46,-272 2457.46,-268.5 2457.46,-275.5"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB