obscuravpn-api 0.0.0

API client for Obscura VPN.
Documentation
{
  inputs = {
    crane.url = "github:ipetkov/crane";
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "nixpkgs/nixos-24.05";
  };

  outputs = { self, crane, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs { inherit system; };
        craneLib = crane.mkLib pkgs;

        depsArgs = {
          src = craneLib.cleanCargoSource self;
          strictDeps = true;
        };
        cargoArgs = depsArgs // { cargoArtifacts = craneLib.buildDepsOnly depsArgs; };
        obscuraApi = craneLib.buildPackage cargoArgs;
      in {
        checks = {
          actionlint = pkgs.runCommand "actionlint" { nativeBuildInputs = [ pkgs.actionlint ]; } ''
            actionlint ${./.github}/**/*.yml
            touch "$out"
          '';

          build = obscuraApi;

          clippy = craneLib.cargoClippy
            (cargoArgs // { cargoClippyExtraArgs = "--all-features --all-targets -- -Dwarnings"; });

          licenses = craneLib.mkCargoDerivation (cargoArgs // {
            pnameSuffix = "-licenses";
            nativeBuildInputs = [ pkgs.cargo-about ];
            buildPhaseCargoCommand = ''
              cargo-about generate --format=json --fail >"$out"
            '';
            installPhase = " ";
          });

          nixfmt = pkgs.runCommand "nixfmt" { nativeBuildInputs = [ pkgs.nixfmt-classic ]; } ''
            nixfmt --width=120 --check ${self}/*.nix
            touch "$out"
          '';

          rustfmt = craneLib.cargoFmt cargoArgs;
        };

        devShells.default = pkgs.mkShellNoCC {
          packages = [ pkgs.actionlint pkgs.cargo pkgs.cargo-about pkgs.just pkgs.nixfmt-classic pkgs.shellcheck ];

          shellHook = ''
            export OBSCURA_MAGIC_IN_NIX_SHELL=1
          '';
        };
      });
}