diff --git a/csharp/Examples.Doublets.CRUD.DotNet.csproj b/csharp/Examples.Doublets.CRUD.DotNet.csproj index 57223ae..0017a96 100644 --- a/csharp/Examples.Doublets.CRUD.DotNet.csproj +++ b/csharp/Examples.Doublets.CRUD.DotNet.csproj @@ -2,7 +2,7 @@ Exe - net6 + net8.0 enable diff --git a/csharp/README.md b/csharp/README.md index 1995eb2..c05c980 100644 --- a/csharp/README.md +++ b/csharp/README.md @@ -6,7 +6,7 @@ A quick start example that shows how to create, read, update and delete the firs ## Prerequisites * Linux, macOS or Windows -* [.NET 5+ or .NET Core 2.2+](https://dotnet.microsoft.com/download) +* [.NET 8.0+](https://dotnet.microsoft.com/download) * [Platform.Data.Doublets](https://www.nuget.org/packages/Platform.Data.Doublets) NuGet package with 0.6.0 or above ## [The code](https://github.com/linksplatform/Examples.Doublets.CRUD.DotNet/blob/master/csharp/Program.cs) | [Run .NET fiddle](https://dotnetfiddle.net/ERHBKA) diff --git a/csharp/README.ru.md b/csharp/README.ru.md index d3b8917..219fb36 100644 --- a/csharp/README.ru.md +++ b/csharp/README.ru.md @@ -6,7 +6,7 @@ ## Для запуска требуется * Linux, macOS или Windows -* [.NET 5+ или .NET Core 2.2+](https://dotnet.microsoft.com/download) +* [.NET 8.0+](https://dotnet.microsoft.com/download) * NuGet пакет [Platform.Data.Doublets](https://www.nuget.org/packages/Platform.Data.Doublets) с версией 0.6.0 или выше ## [Код](https://github.com/linksplatform/Examples.Doublets.CRUD.DotNet/blob/master/csharp/Program.cs) | [Запустить .NET fiddle](https://dotnetfiddle.net/Y7Zvt0) diff --git a/csharp/db.links b/csharp/db.links new file mode 100644 index 0000000..3e4f79e Binary files /dev/null and b/csharp/db.links differ diff --git a/rust/Cargo.lock b/rust/Cargo.lock new file mode 100644 index 0000000..225a3b2 --- /dev/null +++ b/rust/Cargo.lock @@ -0,0 +1,370 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + +[[package]] +name = "cfg-if" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "crud" +version = "0.0.0" +dependencies = [ + "doublets", +] + +[[package]] +name = "doublets" +version = "0.1.0-pre+beta.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af83667f480bc4298cc1042bb01fba5c8ee536c3661378ed87f22b6e15a354f8" +dependencies = [ + "cfg-if", + "leak_slice", + "num-traits", + "platform-data", + "platform-mem", + "platform-num", + "platform-treesmethods", + "rand", + "static_assertions", + "thiserror", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.5+wasi-0.2.4", +] + +[[package]] +name = "leak_slice" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecf3387da9fb41906394e1306ddd3cd26dd9b7177af11c19b45b364b743aed26" + +[[package]] +name = "libc" +version = "0.2.175" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "platform-data" +version = "0.1.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5d76463c423fec891504d83980477555bb62bc19bb90808d9be27b1cb1c76" +dependencies = [ + "funty", + "thiserror", +] + +[[package]] +name = "platform-mem" +version = "0.1.0-pre+beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74b28413b5e7213bfde416a0a7dd11753cac3e86f20cb800ed04e59b3034f8f" +dependencies = [ + "memmap2", + "platform-num", + "tempfile", +] + +[[package]] +name = "platform-num" +version = "0.1.0-aplha.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f3d8a90b4188611f2923aec60f0d6a6b49663e5e883fcd5d422f0f24ffb7bd" +dependencies = [ + "num-traits", +] + +[[package]] +name = "platform-treesmethods" +version = "0.1.0-aplha.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "535bbd5ac2c997fa89fefa569de962e13a610ece31215db179bc2f45636cee9a" +dependencies = [ + "num-traits", + "platform-num", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.5+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + +[[package]] +name = "windows-sys" +version = "0.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.45.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/rust/README.md b/rust/README.md new file mode 100644 index 0000000..e7df211 --- /dev/null +++ b/rust/README.md @@ -0,0 +1,64 @@ +[![Actions Status](https://github.com/linksplatform/Examples.Doublets.CRUD/workflows/CI/badge.svg)](https://github.com/linksplatform/Examples.Doublets.CRUD/actions?workflow=CI) + +# Examples.Doublets.CRUD.Rust ([русская версия](https://github.com/linksplatform/Examples.Doublets.CRUD/blob/main/rust/README.ru.md)) + +A quick start example that shows how to create, read, update and delete the first [link](https://github.com/Konard/LinksPlatform/wiki/FAQ#what-does-the-link-mean) using [Doublets](https://github.com/linksplatform/Data.Doublets) in Rust. + +## Prerequisites +* Linux, macOS or Windows +* [Rust](https://rustup.rs/) +* [doublets](https://crates.io/crates/doublets) crate + +## [The code](https://github.com/linksplatform/Examples.Doublets.CRUD/blob/main/rust/src/main.rs) + +```rust +use doublets::{data, mem, unit, Doublets, DoubletsExt, Links}; + +fn main() -> Result<(), doublets::Error> { + // A doublet links store is mapped to the "db.links" file: + let mem = mem::FileMapped::from_path("db.links")?; + let mut store = unit::Store::::new(mem)?; + + // Creating a doublet link: + let link = store.create_link(1, 1)?; + + // Read operations: + println!("The number of links in the data store is {}.", store.count_links([store.constants().any, store.constants().any, store.constants().any])); + println!("Data store contents:"); + + // Means any link address or that there is no restriction on link address + let any = store.constants().any; + // The arguments of a query are restrictions: on address, on source, on target + store.each_iter([any, any, any]).for_each(|link| { + println!("{link:?}"); + }); + + // Cleaning (resetting) the contents of the link: + let updated_link = store.update_link(link, 0, 0)?; + + // Removing the link + store + .delete_with(updated_link, |before, after| { + data::Flow::Continue + }) + .map(|_| ()) +} +``` + +The expected output is: + +``` +The number of links in the data store is 1. +Data store contents: +[1, 1, 1] +``` + +Look at [doublets documentation](https://docs.rs/doublets) for more details. + +## Looking for something more interesting? +* [Comparison between SQLite and Doublets](https://github.com/linksplatform/Comparisons.SQLiteVSDoublets) +* [Search engine with its web crawler, that stores web-pages in the Doublets](https://github.com/linksplatform/Crawler) +* [GraphQL server that uses Doublets as the database behind the universal API](https://github.com/linksplatform/Data.Doublets.GraphQL) +* [GitHub bot that uses Doublets as the dababase for file templates](https://github.com/linksplatform/Bot) +* [JSON to Doublets importer and Doublets to JSON exporter](https://github.com/linksplatform/Data.Doublets.Json) +* [XML to Doublets importer and Doublets to XML exporter](https://github.com/linksplatform/Data.Doublets.Xml) \ No newline at end of file diff --git a/rust/README.ru.md b/rust/README.ru.md new file mode 100644 index 0000000..e3d1312 --- /dev/null +++ b/rust/README.ru.md @@ -0,0 +1,60 @@ +[![Состояние сборки](https://github.com/linksplatform/Examples.Doublets.CRUD/workflows/CI/badge.svg)](https://github.com/linksplatform/Examples.Doublets.CRUD/actions?workflow=CI) + +# Examples.Doublets.CRUD.Rust ([english version](https://github.com/linksplatform/Examples.Doublets.CRUD/blob/main/rust/README.md)) + +Пример для быстрого старта, который показывает как создать, прочитать, обновить и удалить первую [связь](https://github.com/Konard/LinksPlatform/wiki/%D0%A7%D0%90%D0%92%D0%9E#%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D1%81%D0%B2%D1%8F%D0%B7%D1%8C) используя [Дуплеты](https://github.com/linksplatform/Data.Doublets) на языке Rust. + +## Для запуска требуется +* Linux, macOS или Windows +* [Rust](https://rustup.rs/) +* crate [doublets](https://crates.io/crates/doublets) + +## [Код](https://github.com/linksplatform/Examples.Doublets.CRUD/blob/main/rust/src/main.rs) + +```rust +use doublets::{data, mem, unit, Doublets, DoubletsExt, Links}; + +fn main() -> Result<(), doublets::Error> { + // Хранилище дуплетов привязывается к файлу "db.links": + let mem = mem::FileMapped::from_path("db.links")?; + let mut store = unit::Store::::new(mem)?; + + // Создание связи-дуплета: + let link = store.create_link(1, 1)?; + + // Операции чтения: + println!("Количество связей в хранилище данных: {}.", store.count_links([store.constants().any, store.constants().any, store.constants().any])); + println!("Содержимое хранилища данных:"); + + // Означает любой адрес связи или отсутствие ограничения на адрес связи + let any = store.constants().any; + // Аргументы запроса интерпретируются как ограничения + store.each_iter([any, any, any]).for_each(|link| { + println!("{link:?}"); + }); + + // Сброс содержимого связи: + let updated_link = store.update_link(link, 0, 0)?; + + // Удаление связи: + store + .delete_with(updated_link, |before, after| { + data::Flow::Continue + }) + .map(|_| ()) +} +``` + +Ожидаемый вывод: + +``` +Количество связей в хранилище данных: 1. +Содержимое хранилища данных: +[1, 1, 1] +``` + +Посмотрите [документацию по doublets](https://docs.rs/doublets) чтобы изучить подробности. + +## Ищите что-то интереснее? +* [Сравнение между SQLite и Дуплетами](https://github.com/linksplatform/Comparisons.SQLiteVSDoublets) +* [Поисковый движок со встроенным поисковым роботом, который хранит веб-страницы в Дуплетах](https://github.com/linksplatform/Crawler) \ No newline at end of file diff --git a/rust/src/main.rs b/rust/src/main.rs index e4955e4..fb16de7 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -1,26 +1,30 @@ use doublets::{data, mem, unit, Doublets, DoubletsExt, Links}; fn main() -> Result<(), doublets::Error> { - // use file as memory for doublets + // A doublet links store is mapped to the "db.links" file: let mem = mem::FileMapped::from_path("db.links")?; let mut store = unit::Store::::new(mem)?; - // create 1: 1 1 - it's point: link where source and target it self - let point = store.create_link(1, 1)?; + // Creating a doublet link: + let link = store.create_link(1, 1)?; - // `any` constant denotes any link + // Read operations: + println!("The number of links in the data store is {}.", store.count_links([store.constants().any, store.constants().any, store.constants().any])); + println!("Data store contents:"); + + // Means any link address or that there is no restriction on link address let any = store.constants().any; - - // print all store from store where (index: any, source: any, target: any) + // The arguments of a query are restrictions: on address, on source, on target store.each_iter([any, any, any]).for_each(|link| { println!("{link:?}"); }); - // delete point with handler (Link, Link) + // Cleaning (resetting) the contents of the link: + let updated_link = store.update_link(link, 0, 0)?; + + // Removing the link store - .delete_with(point, |before, after| { - println!("delete: {before:?} => {after:?}"); - // track issue: https://github.com/linksplatform/doublets-rs/issues/4 + .delete_with(updated_link, |before, after| { data::Flow::Continue }) .map(|_| ()) diff --git a/rust/target/.rustc_info.json b/rust/target/.rustc_info.json new file mode 100644 index 0000000..eacd995 --- /dev/null +++ b/rust/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":174106545887536614,"outputs":{"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/hive/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\nfmt_debug=\"full\"\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"x87\"\ntarget_has_atomic\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_has_reliable_f128\ntarget_has_reliable_f16\ntarget_has_reliable_f16_math\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"unknown\"\nub_checks\nunix\n","stderr":""},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.91.0-nightly (565a9ca63 2025-09-10)\nbinary: rustc\ncommit-hash: 565a9ca63e9df4b223fed0da01f15e578acfb538\ncommit-date: 2025-09-10\nhost: x86_64-unknown-linux-gnu\nrelease: 1.91.0-nightly\nLLVM version: 21.1.0\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/rust/target/CACHEDIR.TAG b/rust/target/CACHEDIR.TAG new file mode 100644 index 0000000..20d7c31 --- /dev/null +++ b/rust/target/CACHEDIR.TAG @@ -0,0 +1,3 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by cargo. +# For information about cache directory tags see https://bford.info/cachedir/