{ lib
, rustPlatform
, fetchCrate
, pkg-config
, stdenv
, openssl
, darwin
}:

rustPlatform.buildRustPackage rec {
  pname = "cargo-wasi";
  version = "0.1.28";

  src = fetchCrate {
    inherit version;
    pname = "cargo-wasi-src";
    hash = "sha256-fmQ23BtcBUPNcgZgvNq85iqdY6WRUhqwAp4aIobqMIw=";
  };

  cargoHash = "sha256-yXtxznUp2gECq2CvRByiFzbTjYtWvTheDjGoynJWb+o=";

  nativeBuildInputs = [ pkg-config ];

  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
    ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security ]);

  # Checks need to be disabled here because the current test suite makes assumptions
  # about the surrounding environment that aren't Nix friendly. See these lines for specifics:
  # https://github.com/bytecodealliance/cargo-wasi/blob/0.1.28/tests/tests/support.rs#L13-L18
  doCheck = false;

  meta = with lib; {
    description = "Lightweight Cargo subcommand to build code for the wasm32-wasi target";
    mainProgram = "cargo-wasi";
    homepage = "https://bytecodealliance.github.io/cargo-wasi";
    license = licenses.asl20;
    maintainers = with maintainers; [ lucperkins ];
  };
}
