a653rs 0.6.1

Arinc653 abstraction library for hypervisor independent partition programming
Documentation
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
    utils.url = "github:numtide/flake-utils";
    utils.inputs.nixpkgs.follows = "nixpkgs";
    devshell.url = "github:numtide/devshell";
    devshell.inputs.nixpkgs.follows = "nixpkgs";
    fenix.url = "github:nix-community/fenix";
    fenix.inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs =
    { self
    , nixpkgs
    , utils
    , devshell
    , fenix
    , ...
    }@inputs:
    utils.lib.eachSystem [ "aarch64-linux" "i686-linux" "x86_64-linux" ] (
      system:
      let
        pkgs = import nixpkgs {
          inherit system;
          overlays = [ devshell.overlays.default ];
        };
        rust-toolchain =
          with fenix.packages.${system};
          combine [
            stable.rustc
            stable.cargo
            stable.clippy
            latest.rustfmt
            # rust-analyzer
            targets.thumbv6m-none-eabi.stable.rust-std
          ];
      in
      rec {
        devShells.default = (
          pkgs.devshell.mkShell {
            imports = [ "${devshell}/extra/git/hooks.nix" ];
            name = "a653rs-dev-shell";
            packages = with pkgs; [
              clang
              rust-toolchain
              cargo-outdated
              cargo-udeps
              cargo-audit
              cargo-expand
              cargo-all-features
              cargo-watch
              cargo-release
              nixpkgs-fmt
              rust-analyzer
            ];
            git.hooks = {
              enable = true;
              pre-commit.text = ''
                # echo "Build all feature combinations:"
                # RUSTFLAGS=-Awarnings verify-features
                # echo "Build no_std:"
                # RUSTFLAGS=-Awarnings verify-no_std
                # echo "Build documentation:"
                # RUSTFLAGS=-Awarnings verify-doc
                # echo "Run 'nix flake check'"
                nix flake check
              '';
            };
            commands = [
              { package = "git-cliff"; }
              { package = "treefmt"; }
              {
                name = "udeps";
                command = ''
                  PATH=${fenix.packages.${system}.latest.rustc}/bin:$PATH
                  cargo udeps $@
                '';
                help = pkgs.cargo-udeps.meta.description;
              }
              {
                name = "outdated";
                command = "cargo outdated $@";
                help = pkgs.cargo-outdated.meta.description;
              }
              {
                name = "audit";
                command = "cargo audit $@";
                help = pkgs.cargo-audit.meta.description;
              }
              {
                name = "expand";
                command = ''
                  PATH=${fenix.packages.${system}.latest.rustc}/bin:$PATH
                  cargo expand $@
                '';
                help = pkgs.cargo-expand.meta.description;
              }
              {
                name = "verify-no_std";
                command = ''
                  cd $PRJ_ROOT
                  cargo check-all-features -- --target thumbv6m-none-eabi $@
                '';
                help = "Verify that the library builds for no_std without std-features";
                category = "test";
              }
              {
                name = "verify-doc";
                command = ''
                  cd $PRJ_ROOT
                  cargo doc --all-features --workspace $@
                  RUSTDOCFLAGS="-A rustdoc::private_intra_doc_links " cargo doc --no-default-features --workspace $@
                '';
                help = "Verify that the documentation builds without problems";
                category = "test";
              }
              {
                name = "verify-features";
                command = ''
                  cd $PRJ_ROOT
                  cargo check-all-features -- $@
                '';
                help = "Verify that a653rs builds for all feature combinations";
                category = "test";
              }
              {
                name = "verify-tests";
                command = ''
                  cd $PRJ_ROOT
                  cargo test-all-features -- $@
                '';
                help = "Verify that a653rs tests run for all feature combinations";
                category = "test";
              }
              {
                name = "verify-examples";
                command = ''
                  cd $PRJ_ROOT
                  cargo check-all-features -- --examples $@
                '';
                help = "Verify that a653rs examples run for all feature combinations";
                category = "test";
              }
            ];
          }
        );
        checks = {
          nixpkgs-fmt = pkgs.runCommand "nixpkgs-fmt"
            {
              nativeBuildInputs = [ pkgs.nixpkgs-fmt ];
            } "nixpkgs-fmt --check ${./.}; touch $out";
          cargo-fmt = pkgs.runCommand "cargo-fmt"
            {
              nativeBuildInputs = [ rust-toolchain ];
            } "cd ${./.}; cargo fmt --check; touch $out";
        };
      }
    );
}