{ depot, lib, pkgs, ... }: let sourceFilter = name: type: let baseName = builtins.baseNameOf (builtins.toString name); in (baseName == "Cargo.toml") || (type == "directory" && baseName == "src") || (lib.hasSuffix ".rs" baseName) ; in pkgs.buildRustCrate rec { pname = "store-ref-scanner"; crateName = "store-ref-scanner"; version = "0.1.0"; edition = "2021"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./.; }; passthru.tests = pkgs.buildRustCrate { pname = "store-ref-scanner-tests"; inherit crateName src version edition; buildTests = true; postInstall = '' set -ex export RUST_BACKTRACE=1 # recreate a file hierarchy as when running tests with cargo # the source for test data # build outputs testRoot=target/debug mkdir -p $testRoot chmod +w -R . # test harness executables are suffixed with a hash, # like cargo does this allows to prevent name collision # with the main executables of the crate hash=$(basename $out) ls -lasR $out for file in $out/tests/*; do f=$testRoot/$(basename $file)-$hash cp $file $f $f 2>&1 | tee -a $out/tests.log done rm -rf $out/tests set +ex ''; }; }