:: lib::std::containers::collections
:: lib::std::encoding::hex
:: lib::std::io::filesystem;
export error create(stringv path) {
options := build file::OpenOptions {
output, openError := file::File::open(path, options);
error result = output.writeAll(codec::FILE_HEADER.cast<[]const u8>);
closeError := output.close();
error _ = filesystem::remove_file(path);
export (collections::Array<model::Block>, error) load(stringv path) {
contents, readError := filesystem::read_file(path);
return (collections::Array<model::Block>::init(), readError);
return codec::parse(contents.view());
export (u64, string, error) append(stringv path, stringv payload) {
blocks, loadError := load(path);
return (none, none, loadError);
u64 index = blocks.len().cast<u64>;
previous = model::copy_digest(values[values.len() - 1].hash());
record, digest, encodeError := codec::encode_block(
return (none, none, encodeError);
output, openError := file::File::open(path, file::OpenOptions::appendOnly());
return (none, none, openError);
error result = output.writeAll(record.bytes());
closeError := output.close();
return (none, none, result);
digestText, hexError := hex::encode_bytes(digest[:]);
return (index, digestText, hexError);