buffrs 0.13.2

Modern protobuf package management
Documentation
{ pkgs, crane, rustToolchain, advisory-db, buildInputs, nativeBuildInputs
, buildEnvVars }:
let
  craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
  src = ../.;

  # Common arguments can be set here to avoid repeating them later
  commonArgs = {
    inherit src buildInputs nativeBuildInputs;
    strictDeps = false;
  } // buildEnvVars;

  # Build *just* the cargo dependencies, so we can reuse
  # all of that work (e.g. via cachix) when running in CI
  cargoArtifacts = craneLib.buildDepsOnly commonArgs;

  # Build the actual crate itself, reusing the dependency
  # artifacts from above.
  buffrs = craneLib.buildPackage (commonArgs // {
    inherit cargoArtifacts;
    # we don't want to run tests twice
    doCheck = false;
  });
in {
  package = buffrs;

  checks = {
    # Build the crate as part of `nix flake check` for convenience
    buffrs = buffrs;

    # Audit dependencies
    buffrs-audit = craneLib.cargoAudit { inherit src advisory-db; };

    # Audit licenses
    buffrs-deny = craneLib.cargoDeny { inherit src; };

    # Rust unit and integration tests
    buffers-nextest = craneLib.cargoNextest (commonArgs // {
      inherit cargoArtifacts;
      partitions = 1;
      partitionType = "count";
      # Ignore tutorial test because it requires git and cargo to work
      cargoNextestExtraArgs =
        "--filter-expr 'all() - test(=cmd::tuto::fixture)'";
      SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
    });
  };
}