{ lib, stdenv, buildRustCrate, fetchgit }:
let kernel = stdenv.buildPlatform.parsed.kernel.name;
    abi = stdenv.buildPlatform.parsed.abi.name;
    include = includedFiles: src: builtins.filterSource (path: type:
      lib.lists.any (f:
        let p = toString (src + ("/" + f)); in
        (path == p) || (type == "directory" && lib.strings.hasPrefix path p)
      ) includedFiles
    ) src;
    updateFeatures = f: up: functions: builtins.deepSeq f (lib.lists.foldl' (features: fun: fun features) (lib.attrsets.recursiveUpdate f up) functions);
    mapFeatures = features: map (fun: fun { features = features; });
    mkFeatures = feat: lib.lists.foldl (features: featureName:
      if feat.${featureName} or false then
        [ featureName ] ++ features
      else
        features
    ) [] (builtins.attrNames feat);
in
rec {
    alloc_no_stdlib_1_3_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
    crateName = "alloc-no-stdlib";
    version = "1.3.0";
    authors = [ "Daniel Reiter Horn <danielrh@dropbox.com>" ];
    sha256 = "1jcp27pzmqdszgp80y484g4kwbjbg7x8a589drcwbxg0i8xwkir9";
    crateBin = [ {  name = "example"; } ];
    inherit dependencies buildDependencies features;
  };
  brotli_2_5_0_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
    crateName = "brotli";
    version = "2.5.0";
    authors = [ "Daniel Reiter Horn <danielrh@dropbox.com>" "The Brotli Authors" ];
    sha256 = "1ynw4hkdwnp0kj30p86ls44ahv4s99258s019bqrq4mya8hlsb5b";
    crateBin = [ {  name = "brotli"; } ];
    inherit dependencies buildDependencies features;
  };
  brotli_decompressor_1_3_1_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
    crateName = "brotli-decompressor";
    version = "1.3.1";
    authors = [ "Daniel Reiter Horn <danielrh@dropbox.com>" "The Brotli Authors" ];
    sha256 = "022g69q1xzwdj0130qm3fa4qwpn4q1jx3lc8yz0v0v201p7bm8fb";
    crateBin = [ {  name = "brotli-decompressor"; } ];
    inherit dependencies buildDependencies features;
  };
  alloc_no_stdlib_1_3_0 = { features?(alloc_no_stdlib_1_3_0_features {}) }: alloc_no_stdlib_1_3_0_ {
    features = mkFeatures (features.alloc_no_stdlib_1_3_0 or {});
  };
  alloc_no_stdlib_1_3_0_features = f: updateFeatures f ({
    alloc_no_stdlib_1_3_0.default = (f.alloc_no_stdlib_1_3_0.default or true);
  }) [];
  brotli_2_5_0 = { features?(brotli_2_5_0_features {}) }: brotli_2_5_0_ {
    dependencies = mapFeatures features ([ alloc_no_stdlib_1_3_0 brotli_decompressor_1_3_1 ]);
    features = mkFeatures (features.brotli_2_5_0 or {});
  };
  brotli_2_5_0_features = f: updateFeatures f (rec {
    alloc_no_stdlib_1_3_0.no-stdlib =
      (f.alloc_no_stdlib_1_3_0.no-stdlib or false) ||
      (brotli_2_5_0.no-stdlib or false) ||
      (f.brotli_2_5_0.no-stdlib or false);
    alloc_no_stdlib_1_3_0.default = true;
    brotli_2_5_0.default = (f.brotli_2_5_0.default or true);
    brotli_decompressor_1_3_1.disable-timer =
      (f.brotli_decompressor_1_3_1.disable-timer or false) ||
      (brotli_2_5_0.disable-timer or false) ||
      (f.brotli_2_5_0.disable-timer or false);
    brotli_decompressor_1_3_1.no-stdlib =
      (f.brotli_decompressor_1_3_1.no-stdlib or false) ||
      (brotli_2_5_0.no-stdlib or false) ||
      (f.brotli_2_5_0.no-stdlib or false);
    brotli_decompressor_1_3_1.benchmark =
      (f.brotli_decompressor_1_3_1.benchmark or false) ||
      (brotli_2_5_0.benchmark or false) ||
      (f.brotli_2_5_0.benchmark or false);
    brotli_decompressor_1_3_1.default = true;
    brotli_decompressor_1_3_1.seccomp =
      (f.brotli_decompressor_1_3_1.seccomp or false) ||
      (brotli_2_5_0.seccomp or false) ||
      (f.brotli_2_5_0.seccomp or false);
  }) [ alloc_no_stdlib_1_3_0_features brotli_decompressor_1_3_1_features ];
  brotli_decompressor_1_3_1 = { features?(brotli_decompressor_1_3_1_features {}) }: brotli_decompressor_1_3_1_ {
    dependencies = mapFeatures features ([ alloc_no_stdlib_1_3_0 ]);
    features = mkFeatures (features.brotli_decompressor_1_3_1 or {});
  };
  brotli_decompressor_1_3_1_features = f: updateFeatures f (rec {
    alloc_no_stdlib_1_3_0.no-stdlib =
      (f.alloc_no_stdlib_1_3_0.no-stdlib or false) ||
      (brotli_decompressor_1_3_1.no-stdlib or false) ||
      (f.brotli_decompressor_1_3_1.no-stdlib or false);
    alloc_no_stdlib_1_3_0.default = true;
    alloc_no_stdlib_1_3_0.unsafe =
      (f.alloc_no_stdlib_1_3_0.unsafe or false) ||
      (brotli_decompressor_1_3_1.unsafe or false) ||
      (f.brotli_decompressor_1_3_1.unsafe or false);
    brotli_decompressor_1_3_1.default = (f.brotli_decompressor_1_3_1.default or true);
  }) [ alloc_no_stdlib_1_3_0_features ];
}
