bank-barcode 0.2.0

Generate Finnish virtual bank barcodes
Documentation
{
  description = "Generate Finnish virtual bank barcodes";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

    crane.url = "github:ipetkov/crane";

    fenix = {
      url = "github:nix-community/fenix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    treefmt-nix = {
      url = "github:numtide/treefmt-nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs =
    {
      self,
      nixpkgs,
      crane,
      fenix,
      treefmt-nix,
      flake-utils,
    }:
    flake-utils.lib.eachDefaultSystem (
      system:
      let
        pkgs = nixpkgs.legacyPackages.${system};

        rustToolchain = fenix.packages.${system}.fromToolchainFile {
          file = ./rust-toolchain.toml;
          sha256 = "sha256-Qxt8XAuaUR2OMdKbN4u8dBJOhSHxS+uS06Wl9+flVEk=";
        };

        craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;

        src = craneLib.cleanCargoSource ./.;

        commonArgs = {
          inherit src;
          strictDeps = true;
          pname = "bank-barcode";
          version = "0.2.0";
        };

        cargoArtifacts = craneLib.buildDepsOnly commonArgs;

        bank-barcode = craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; });

        treefmtEval = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
      in
      {
        packages.default = bank-barcode;

        checks = {
          build = bank-barcode;

          test = craneLib.cargoTest (commonArgs // { inherit cargoArtifacts; });

          clippy = craneLib.cargoClippy (
            commonArgs
            // {
              inherit cargoArtifacts;
              cargoClippyExtraArgs = "--all-targets -- --deny warnings";
            }
          );

          doc = craneLib.cargoDoc (
            commonArgs
            // {
              inherit cargoArtifacts;
              env.RUSTDOCFLAGS = "-D warnings";
            }
          );

          fmt = craneLib.cargoFmt { inherit src; };

          treefmt = treefmtEval.config.build.check self;
        };

        formatter = treefmtEval.config.build.wrapper;

        devShells.default = craneLib.devShell {
          checks = self.checks.${system};
          packages = [
            fenix.packages.${system}.rust-analyzer
            pkgs.cargo-edit
            pkgs.cargo-watch
          ];
        };

        # Separate shell for `cargo semver-checks`. The tool requires a much
        # newer rustc than this crate's MSRV (>=1.91 as of cargo-semver-checks
        # 0.47), so it cannot share the pinned toolchain used by the default
        # shell or the build/test/clippy checks.
        devShells.semver = pkgs.mkShell {
          packages = [
            fenix.packages.${system}.stable.toolchain
            pkgs.cargo-semver-checks
          ];
        };
      }
    );
}