diff --git a/dagger/repo.nim b/dagger/repo.nim new file mode 100644 index 00000000..dad911af --- /dev/null +++ b/dagger/repo.nim @@ -0,0 +1,21 @@ +import std/tables +import std/hashes +import ./merkledag + +export merkledag + +type + Repo* = ref object + storage: Table[MultiHash, MerkleDag] + +proc hash(multihash: MultiHash): Hash = + hash($multihash) + +proc store*(repo: Repo, dag: MerkleDag) = + repo.storage[dag.rootHash] = dag + +proc contains*(repo: Repo, hash: MultiHash): bool = + repo.storage.hasKey(hash) + +proc retrieve*(repo: Repo, hash: MultiHash): MerkleDag = + repo.storage[hash] diff --git a/tests/dagger/testRepo.nim b/tests/dagger/testRepo.nim new file mode 100644 index 00000000..e1131847 --- /dev/null +++ b/tests/dagger/testRepo.nim @@ -0,0 +1,22 @@ +import std/unittest +import pkg/dagger/repo + +suite "repo": + + let dag = MerkleDag(data: @[1'u8, 2'u8, 3'u8]) + var repo: Repo + + setup: + repo = Repo() + + test "stores Merkle DAGs": + repo.store(dag) + + test "retrieves Merkle DAGs by their root hash": + repo.store(dag) + check repo.retrieve(dag.rootHash) == dag + + test "knows which hashes are stored": + check repo.contains(dag.rootHash) == false + repo.store(dag) + check repo.contains(dag.rootHash) == true diff --git a/tests/testAll.nim b/tests/testAll.nim index 50d4f33a..6ef25e2b 100644 --- a/tests/testAll.nim +++ b/tests/testAll.nim @@ -1,5 +1,6 @@ import ./dagger/testMerkleDag import ./dagger/testChunking +import ./dagger/testRepo import ./dagger/testDagger {.warning[UnusedImport]: off.}