Matrix bot for kicking idle users
# This file was @generated by crate2nix 0.8.0 with the command:
#   "generate"
# See https://github.com/kolloch/crate2nix for more info.

{ nixpkgs ? <nixpkgs>
, pkgs ? import nixpkgs { config = {}; }
, lib ? pkgs.lib
, stdenv ? pkgs.stdenv
, buildRustCrate ? pkgs.buildRustCrate
  # This is used as the `crateOverrides` argument for `buildRustCrate`.
, defaultCrateOverrides ? pkgs.defaultCrateOverrides
  # The features to enable for the root_crate or the workspace_members.
, rootFeatures ? [ "default" ]
  # If true, throw errors instead of issueing deprecation warnings.
, strictDeprecation ? false
  # Whether to perform release builds: longer compile times, faster binaries.
, release ? true
}:

rec {
  #
  # "public" attributes that we attempt to keep stable with new versions of crate2nix.
  #

  rootCrate = rec {
    packageId = "idlebot";

    # Use this attribute to refer to the derivation building your root crate package.
    # You can override the features with rootCrate.build.override { features = [ "default" "feature1" ... ]; }.
    build = internal.buildRustCrateWithFeatures {
      inherit packageId;
    };

    # Debug support which might change between releases.
    # File a bug if you depend on any for non-debug work!
    debug = internal.debugCrate { inherit packageId; };
  };
  root_crate =
    internal.deprecationWarning 
      "root_crate is deprecated since crate2nix 0.4. Please use rootCrate instead." 
      rootCrate.build;
  # Refer your crate build derivation by name here.
  # You can override the features with
  # workspaceMembers."${crateName}".build.override { features = [ "default" "feature1" ... ]; }.
  workspaceMembers = {
    "idlebot" = rec {
      packageId = "idlebot";
      build = internal.buildRustCrateWithFeatures {
        packageId = "idlebot";
      };

      # Debug support which might change between releases.
      # File a bug if you depend on any for non-debug work!
      debug = internal.debugCrate { inherit packageId; };
    };
  };
  workspace_members =
    internal.deprecationWarning
      "workspace_members is deprecated in crate2nix 0.4. Please use workspaceMembers instead."
      lib.mapAttrs (n: v: v.build) workspaceMembers;

  #
  # "internal" ("private") attributes that may change in every new version of crate2nix.
  #

  internal = rec {
    # Build and dependency information for crates.
    # Many of the fields are passed one-to-one to buildRustCrate.
    #
    # Noteworthy:
    # * `dependencies`/`buildDependencies`: similar to the corresponding fields for buildRustCrate.
    #   but with additional information which is used during dependency/feature resolution.
    # * `resolvedDependencies`: the selected default features reported by cargo - only included for debugging.
    # * `devDependencies` as of now not used by `buildRustCrate` but used to
    #   inject test dependencies into the build

    crates = {
      "ansi_term" = rec {
        crateName = "ansi_term";
        version = "0.12.1";
        edition = "2015";
        sha256 = "1ljmkbilxgmhavxvxqa7qvm6f3fjggi7q2l3a72q9x0cxjvrnanm";
        authors = [
          "ogham@bsago.me"
          "Ryan Scheel (Havvy) <ryan.havvy@gmail.com>"
          "Josh Triplett <josh@joshtriplett.org>"
        ];
        dependencies = [
          {
            name = "winapi";
            packageId = "winapi";
            target = { target, features }: (target."os" == "windows");
            features = [ "consoleapi" "errhandlingapi" "fileapi" "handleapi" "processenv" ];
          }
        ];
        features = {
          "derive_serde_style" = [ "serde" ];
        };
      };
      "anyhow" = rec {
        crateName = "anyhow";
        version = "1.0.38";
        edition = "2018";
        sha256 = "1c8ls4w26bjwvjvb6a3s4bpk28raljy3a2pmwrvby3d843szgpdg";
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        features = {
          "default" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "assign" = rec {
        crateName = "assign";
        version = "1.1.1";
        edition = "2018";
        sha256 = "00h0r04iyyhhnjr8fwkmw3fpvpd41bn9x1dz8s9j5kdyg3nkw2az";
        authors = [
          "Alan Darmasaputra <kelerchian@gmail.com>"
          "Jonas Platte <jplatte@posteo.de>"
        ];
        
      };
      "autocfg" = rec {
        crateName = "autocfg";
        version = "1.0.1";
        edition = "2015";
        sha256 = "0jj6i9zn4gjl03kjvziqdji6rwx8ykz8zk2ngpc331z2g3fk3c6d";
        authors = [
          "Josh Stone <cuviper@gmail.com>"
        ];
        
      };
      "bincode" = rec {
        crateName = "bincode";
        version = "1.3.1";
        edition = "2015";
        sha256 = "0vc9pjh6hfp9vfq752sa88rxwg93ydhm0dvvy58rcvx2p8wkl3gk";
        authors = [
          "Ty Overby <ty@pre-alpha.com>"
          "Francesco Mazzoli <f@mazzo.li>"
          "David Tolnay <dtolnay@gmail.com>"
          "Zoey Riordan <zoey@dos.cafe>"
        ];
        dependencies = [
          {
            name = "byteorder";
            packageId = "byteorder";
          }
          {
            name = "serde";
            packageId = "serde";
          }
        ];
        features = {
        };
      };
      "bitflags" = rec {
        crateName = "bitflags";
        version = "1.2.1";
        edition = "2015";
        sha256 = "14qnd5nq8p2almk79m4m8ydqhd413yaxsyjp5xd19g3mikzf47fg";
        authors = [
          "The Rust Project Developers"
        ];
        features = {
        };
        resolvedDefaultFeatures = [ "default" ];
      };
      "bytemuck" = rec {
        crateName = "bytemuck";
        version = "1.5.0";
        edition = "2018";
        sha256 = "18355qn3r9yp7ibg00r688sjx58g2qsjylwyq15w5b41b46asjss";
        authors = [
          "Lokathor <zefria@gmail.com>"
        ];
        features = {
          "derive" = [ "bytemuck_derive" ];
          "extern_crate_std" = [ "extern_crate_alloc" ];
        };
        resolvedDefaultFeatures = [ "extern_crate_alloc" "extern_crate_std" ];
      };
      "byteorder" = rec {
        crateName = "byteorder";
        version = "1.4.2";
        edition = "2018";
        sha256 = "0srh0h0594jmsnbvm7n0g8xabhla8lwb3gn8s0fzd7d1snix2i5f";
        authors = [
          "Andrew Gallant <jamslam@gmail.com>"
        ];
        features = {
          "default" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "bytes" = rec {
        crateName = "bytes";
        version = "1.0.1";
        edition = "2018";
        sha256 = "0h6h1c8g3yj2b4k8g25gr3246mq985y0kl3z685cs784fr1ww05p";
        authors = [
          "Carl Lerche <me@carllerche.com>"
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        features = {
          "default" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "cc" = rec {
        crateName = "cc";
        version = "1.0.66";
        edition = "2018";
        crateBin = [];
        sha256 = "0j7d7h4n81z5f22l3v8ggjvvw8m64636nlaqax4x1y44da1rc12c";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        features = {
          "parallel" = [ "jobserver" ];
        };
      };
      "cfg-if 0.1.10" = rec {
        crateName = "cfg-if";
        version = "0.1.10";
        edition = "2018";
        sha256 = "08h80ihs74jcyp24cd75wwabygbbdgl05k6p5dmq8akbr78vv1a7";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        features = {
          "rustc-dep-of-std" = [ "core" "compiler_builtins" ];
        };
      };
      "cfg-if 1.0.0" = rec {
        crateName = "cfg-if";
        version = "1.0.0";
        edition = "2018";
        sha256 = "1za0vb97n4brpzpv8lsbnzmq5r8f2b0cpqqr0sy8h5bn751xxwds";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        features = {
          "rustc-dep-of-std" = [ "core" "compiler_builtins" ];
        };
      };
      "chrono" = rec {
        crateName = "chrono";
        version = "0.4.19";
        edition = "2015";
        sha256 = "0wyfl6c00vhfl562spnfcna3zkw8jqvcp652m9iskhl8j26dc2k7";
        authors = [
          "Kang Seonghoon <public+rust@mearie.org>"
          "Brandon W Maister <quodlibetor@gmail.com>"
        ];
        dependencies = [
          {
            name = "libc";
            packageId = "libc";
            optional = true;
          }
          {
            name = "num-integer";
            packageId = "num-integer";
            usesDefaultFeatures = false;
          }
          {
            name = "num-traits";
            packageId = "num-traits";
            usesDefaultFeatures = false;
          }
          {
            name = "time";
            packageId = "time";
            optional = true;
          }
          {
            name = "winapi";
            packageId = "winapi";
            optional = true;
            target = { target, features }: target."windows";
            features = [ "std" "minwinbase" "minwindef" "timezoneapi" ];
          }
        ];
        features = {
          "clock" = [ "libc" "std" "winapi" ];
          "default" = [ "clock" "std" "oldtime" ];
          "oldtime" = [ "time" ];
          "unstable-locales" = [ "pure-rust-locales" "alloc" ];
          "wasmbind" = [ "wasm-bindgen" "js-sys" ];
        };
        resolvedDefaultFeatures = [ "clock" "default" "libc" "oldtime" "std" "time" "winapi" ];
      };
      "core-foundation" = rec {
        crateName = "core-foundation";
        version = "0.9.1";
        edition = "2015";
        sha256 = "0qhackx0i914nbhcwi6bbxnyyqqldgxc046gviak3a3f8apf528a";
        authors = [
          "The Servo Project Developers"
        ];
        dependencies = [
          {
            name = "core-foundation-sys";
            packageId = "core-foundation-sys";
          }
          {
            name = "libc";
            packageId = "libc";
          }
        ];
        features = {
          "mac_os_10_7_support" = [ "core-foundation-sys/mac_os_10_7_support" ];
          "mac_os_10_8_features" = [ "core-foundation-sys/mac_os_10_8_features" ];
          "with-chrono" = [ "chrono" ];
          "with-uuid" = [ "uuid" ];
        };
      };
      "core-foundation-sys" = rec {
        crateName = "core-foundation-sys";
        version = "0.8.2";
        edition = "2015";
        sha256 = "06wq7yb7mlkc4h2kbc0yjfi0xv44z4snzdpr7c1l0zm4hi91n8pa";
        authors = [
          "The Servo Project Developers"
        ];
        features = {
        };
      };
      "crossbeam-queue" = rec {
        crateName = "crossbeam-queue";
        version = "0.1.2";
        edition = "2015";
        sha256 = "0jsa9dbxnwqcxfws09vaschf92d4imlbbikmcn4ka8z7rzb9r5vw";
        authors = [
          "The Crossbeam Project Developers"
        ];
        dependencies = [
          {
            name = "crossbeam-utils";
            packageId = "crossbeam-utils";
          }
        ];
        
      };
      "crossbeam-utils" = rec {
        crateName = "crossbeam-utils";
        version = "0.6.6";
        edition = "2015";
        sha256 = "1rk0r9n04bmq4a3g2q5qhvvlmrmx780gc6h9lmc94mwndslkz5q4";
        authors = [
          "The Crossbeam Project Developers"
        ];
        dependencies = [
          {
            name = "cfg-if";
            packageId = "cfg-if 0.1.10";
          }
          {
            name = "lazy_static";
            packageId = "lazy_static";
            optional = true;
          }
        ];
        features = {
          "default" = [ "std" ];
          "std" = [ "lazy_static" ];
        };
        resolvedDefaultFeatures = [ "default" "lazy_static" "std" ];
      };
      "fnv" = rec {
        crateName = "fnv";
        version = "1.0.7";
        edition = "2015";
        sha256 = "1hc2mcqha06aibcaza94vbi81j6pr9a1bbxrxjfhc91zin8yr7iz";
        libPath = "lib.rs";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        features = {
          "default" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "foreign-types" = rec {
        crateName = "foreign-types";
        version = "0.3.2";
        edition = "2015";
        sha256 = "1cgk0vyd7r45cj769jym4a6s7vwshvd0z4bqrb92q1fwibmkkwzn";
        authors = [
          "Steven Fackler <sfackler@gmail.com>"
        ];
        dependencies = [
          {
            name = "foreign-types-shared";
            packageId = "foreign-types-shared";
          }
        ];
        
      };
      "foreign-types-shared" = rec {
        crateName = "foreign-types-shared";
        version = "0.1.1";
        edition = "2015";
        sha256 = "0jxgzd04ra4imjv8jgkmdq59kj8fsz6w4zxsbmlai34h26225c00";
        authors = [
          "Steven Fackler <sfackler@gmail.com>"
        ];
        
      };
      "form_urlencoded" = rec {
        crateName = "form_urlencoded";
        version = "1.0.0";
        edition = "2015";
        sha256 = "005yi1319k5bz8g5ylbdiakq5jp5jh90yy6k357zm11fr4aqvrpc";
        authors = [
          "The rust-url developers"
        ];
        dependencies = [
          {
            name = "matches";
            packageId = "matches";
          }
          {
            name = "percent-encoding";
            packageId = "percent-encoding";
          }
        ];
        
      };
      "futures-channel" = rec {
        crateName = "futures-channel";
        version = "0.3.12";
        edition = "2018";
        sha256 = "0ihq3a3yc6ial3sw536q75hrhixq22xk6wn5qzpnxazgqxz1plzj";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        dependencies = [
          {
            name = "futures-core";
            packageId = "futures-core";
            usesDefaultFeatures = false;
          }
        ];
        features = {
          "alloc" = [ "futures-core/alloc" ];
          "cfg-target-has-atomic" = [ "futures-core/cfg-target-has-atomic" ];
          "default" = [ "std" ];
          "sink" = [ "futures-sink" ];
          "std" = [ "alloc" "futures-core/std" ];
          "unstable" = [ "futures-core/unstable" ];
        };
        resolvedDefaultFeatures = [ "alloc" "default" "std" ];
      };
      "futures-core" = rec {
        crateName = "futures-core";
        version = "0.3.12";
        edition = "2018";
        sha256 = "0r8ag0mkxx9cd74yrccjk31lph4gr6lhgb9di6rx39wdvrfi9rbr";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        features = {
          "default" = [ "std" ];
          "std" = [ "alloc" ];
        };
        resolvedDefaultFeatures = [ "alloc" "default" "std" ];
      };
      "futures-macro" = rec {
        crateName = "futures-macro";
        version = "0.3.12";
        edition = "2018";
        sha256 = "1pgyb219ybh3fj3ig0h1c2b7k4cqldy95ifdpnd9yb9jvmdd51y2";
        procMacro = true;
        authors = [
          "Taylor Cramer <cramertj@google.com>"
          "Taiki Endo <te316e89@gmail.com>"
        ];
        dependencies = [
          {
            name = "proc-macro-hack";
            packageId = "proc-macro-hack";
          }
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
            features = [ "full" ];
          }
        ];
        
      };
      "futures-sink" = rec {
        crateName = "futures-sink";
        version = "0.3.12";
        edition = "2018";
        sha256 = "1mj22d4w6digh7wfp6jkr5fdcl9r138q41fxzm1yg8mx568cdxfa";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        features = {
          "default" = [ "std" ];
          "std" = [ "alloc" ];
        };
        resolvedDefaultFeatures = [ "alloc" "default" "std" ];
      };
      "futures-task" = rec {
        crateName = "futures-task";
        version = "0.3.12";
        edition = "2018";
        sha256 = "11ldlpl7mis5crys731dj7s7npgigdgrzdm7mi2y86m8ivmhgphk";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        dependencies = [
          {
            name = "once_cell";
            packageId = "once_cell";
            optional = true;
            usesDefaultFeatures = false;
            features = [ "std" ];
          }
        ];
        features = {
          "default" = [ "std" ];
          "std" = [ "alloc" "once_cell" ];
        };
        resolvedDefaultFeatures = [ "alloc" "once_cell" "std" ];
      };
      "futures-util" = rec {
        crateName = "futures-util";
        version = "0.3.12";
        edition = "2018";
        sha256 = "0jv25s07igmqavigdfzr02yw6j1q0vg8pw2p2vmgvcx4yb88qak3";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        dependencies = [
          {
            name = "futures-core";
            packageId = "futures-core";
            usesDefaultFeatures = false;
          }
          {
            name = "futures-macro";
            packageId = "futures-macro";
            optional = true;
            usesDefaultFeatures = false;
          }
          {
            name = "futures-task";
            packageId = "futures-task";
            usesDefaultFeatures = false;
          }
          {
            name = "pin-project-lite";
            packageId = "pin-project-lite";
          }
          {
            name = "pin-utils";
            packageId = "pin-utils";
          }
          {
            name = "proc-macro-hack";
            packageId = "proc-macro-hack";
            optional = true;
          }
          {
            name = "proc-macro-nested";
            packageId = "proc-macro-nested";
            optional = true;
          }
          {
            name = "slab";
            packageId = "slab";
            optional = true;
          }
        ];
        features = {
          "alloc" = [ "futures-core/alloc" "futures-task/alloc" ];
          "async-await-macro" = [ "async-await" "futures-macro" "proc-macro-hack" "proc-macro-nested" ];
          "cfg-target-has-atomic" = [ "futures-core/cfg-target-has-atomic" "futures-task/cfg-target-has-atomic" ];
          "channel" = [ "std" "futures-channel" ];
          "compat" = [ "std" "futures_01" ];
          "default" = [ "std" "async-await" "async-await-macro" ];
          "io" = [ "std" "futures-io" "memchr" ];
          "io-compat" = [ "io" "compat" "tokio-io" ];
          "read-initializer" = [ "io" "futures-io/read-initializer" "futures-io/unstable" ];
          "sink" = [ "futures-sink" ];
          "std" = [ "alloc" "futures-core/std" "futures-task/std" "slab" ];
          "unstable" = [ "futures-core/unstable" "futures-task/unstable" ];
          "write-all-vectored" = [ "io" ];
        };
        resolvedDefaultFeatures = [ "alloc" "async-await" "async-await-macro" "default" "futures-macro" "proc-macro-hack" "proc-macro-nested" "slab" "std" ];
      };
      "getrandom" = rec {
        crateName = "getrandom";
        version = "0.2.2";
        edition = "2018";
        sha256 = "1j1jcwahnkn45kapq9i5nvw2s5hcfmp1zpjx0fzl0wcy4w2mfjf9";
        authors = [
          "The Rand Project Developers"
        ];
        dependencies = [
          {
            name = "cfg-if";
            packageId = "cfg-if 1.0.0";
          }
          {
            name = "libc";
            packageId = "libc";
            usesDefaultFeatures = false;
            target = { target, features }: target."unix";
          }
          {
            name = "wasi";
            packageId = "wasi";
            target = { target, features }: (target."os" == "wasi");
          }
        ];
        features = {
          "js" = [ "wasm-bindgen" "js-sys" ];
          "rustc-dep-of-std" = [ "compiler_builtins" "core" "libc/rustc-dep-of-std" "wasi/rustc-dep-of-std" ];
        };
        resolvedDefaultFeatures = [ "std" ];
      };
      "h2" = rec {
        crateName = "h2";
        version = "0.3.0";
        edition = "2018";
        sha256 = "19g6x6smwj7pyv28zr766xmdia5pr2psnly0ib6zr3hhc9iycrvb";
        authors = [
          "Carl Lerche <me@carllerche.com>"
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        dependencies = [
          {
            name = "bytes";
            packageId = "bytes";
          }
          {
            name = "fnv";
            packageId = "fnv";
          }
          {
            name = "futures-core";
            packageId = "futures-core";
            usesDefaultFeatures = false;
          }
          {
            name = "futures-sink";
            packageId = "futures-sink";
            usesDefaultFeatures = false;
          }
          {
            name = "futures-util";
            packageId = "futures-util";
            usesDefaultFeatures = false;
          }
          {
            name = "http";
            packageId = "http";
          }
          {
            name = "indexmap";
            packageId = "indexmap";
          }
          {
            name = "slab";
            packageId = "slab";
          }
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "io-util" ];
          }
          {
            name = "tokio-util";
            packageId = "tokio-util";
            features = [ "codec" ];
          }
          {
            name = "tracing";
            packageId = "tracing";
            usesDefaultFeatures = false;
            features = [ "std" ];
          }
          {
            name = "tracing-futures";
            packageId = "tracing-futures";
            usesDefaultFeatures = false;
            features = [ "std-future" ];
          }
        ];
        devDependencies = [
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "rt-multi-thread" "macros" "sync" "net" ];
          }
        ];
        features = {
        };
      };
      "hashbrown" = rec {
        crateName = "hashbrown";
        version = "0.9.1";
        edition = "2018";
        sha256 = "016dsm9s4xmxlkw2jfikm54qlz6vyk0qr280gab7kzp342jf9byp";
        authors = [
          "Amanieu d'Antras <amanieu@gmail.com>"
        ];
        features = {
          "ahash-compile-time-rng" = [ "ahash/compile-time-rng" ];
          "default" = [ "ahash" "inline-more" ];
          "rustc-dep-of-std" = [ "nightly" "core" "compiler_builtins" "alloc" "rustc-internal-api" ];
        };
        resolvedDefaultFeatures = [ "raw" ];
      };
      "heed" = rec {
        crateName = "heed";
        version = "0.11.0";
        edition = "2018";
        sha256 = "14l3d22kjbczihff408x73a4skbvx31ww9x4b5xmvvvdxn379716";
        authors = [
          "Kerollmops <renault.cle@gmail.com>"
        ];
        dependencies = [
          {
            name = "bytemuck";
            packageId = "bytemuck";
          }
          {
            name = "byteorder";
            packageId = "byteorder";
            usesDefaultFeatures = false;
          }
          {
            name = "heed-traits";
            packageId = "heed-traits";
          }
          {
            name = "heed-types";
            packageId = "heed-types";
          }
          {
            name = "libc";
            packageId = "libc";
          }
          {
            name = "mdbx-sys";
            packageId = "mdbx-sys";
            optional = true;
          }
          {
            name = "once_cell";
            packageId = "once_cell";
          }
          {
            name = "page_size";
            packageId = "page_size";
          }
          {
            name = "synchronoise";
            packageId = "synchronoise";
          }
          {
            name = "url";
            packageId = "url";
            target = { target, features }: target."windows";
          }
        ];
        devDependencies = [
          {
            name = "bytemuck";
            packageId = "bytemuck";
            features = [ "derive" ];
          }
        ];
        features = {
          "arbitrary_precision" = [ "heed-types/arbitrary_precision" ];
          "default" = [ "lmdb" "serde" "serde-bincode" "serde-json" ];
          "lmdb" = [ "lmdb-rkv-sys" ];
          "mdbx" = [ "mdbx-sys" ];
          "preserve_order" = [ "heed-types/preserve_order" ];
          "raw_value" = [ "heed-types/raw_value" ];
          "serde-bincode" = [ "heed-types/serde" "heed-types/bincode" ];
          "serde-json" = [ "heed-types/serde" "heed-types/serde_json" ];
          "unbounded_depth" = [ "heed-types/unbounded_depth" ];
        };
        resolvedDefaultFeatures = [ "mdbx" "mdbx-sys" "serde-bincode" ];
      };
      "heed-traits" = rec {
        crateName = "heed-traits";
        version = "0.8.0";
        edition = "2018";
        sha256 = "18p12338m4k6rl0qs7dcskqczylsqcvf3pzzhdz42q7xnbjr8fm5";
        authors = [
          "Kerollmops <renault.cle@gmail.com>"
        ];
        
      };
      "heed-types" = rec {
        crateName = "heed-types";
        version = "0.8.0";
        edition = "2018";
        sha256 = "1gdc68gs68zcwcv8dlw7pqghkzrz3vfwvm824scxrkigjnkg0v4s";
        authors = [
          "Kerollmops <renault.cle@gmail.com>"
        ];
        dependencies = [
          {
            name = "bincode";
            packageId = "bincode";
            optional = true;
          }
          {
            name = "bytemuck";
            packageId = "bytemuck";
            features = [ "extern_crate_alloc" "extern_crate_std" ];
          }
          {
            name = "byteorder";
            packageId = "byteorder";
          }
          {
            name = "heed-traits";
            packageId = "heed-traits";
          }
          {
            name = "serde";
            packageId = "serde";
            optional = true;
          }
          {
            name = "serde_json";
            packageId = "serde_json";
            optional = true;
          }
        ];
        features = {
          "arbitrary_precision" = [ "serde_json/arbitrary_precision" ];
          "default" = [ "serde-bincode" "serde-json" ];
          "preserve_order" = [ "serde_json/preserve_order" ];
          "raw_value" = [ "serde_json/raw_value" ];
          "serde-bincode" = [ "serde" "bincode" ];
          "serde-json" = [ "serde" "serde_json" ];
          "unbounded_depth" = [ "serde_json/unbounded_depth" ];
        };
        resolvedDefaultFeatures = [ "bincode" "default" "serde" "serde-bincode" "serde-json" "serde_json" ];
      };
      "http" = rec {
        crateName = "http";
        version = "0.2.3";
        edition = "2018";
        sha256 = "0iq75yw9i73kzm43fw82z2mvpsnlkgvfmaf8qc42cyfc95scsibj";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
          "Carl Lerche <me@carllerche.com>"
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        dependencies = [
          {
            name = "bytes";
            packageId = "bytes";
          }
          {
            name = "fnv";
            packageId = "fnv";
          }
          {
            name = "itoa";
            packageId = "itoa";
          }
        ];
        
      };
      "http-body" = rec {
        crateName = "http-body";
        version = "0.4.0";
        edition = "2018";
        sha256 = "150rkibhyrcmsyi0qzwx4hp02c4lga1kkdg8j7l5wkh7xqkvsq98";
        authors = [
          "Carl Lerche <me@carllerche.com>"
          "Lucio Franco <luciofranco14@gmail.com>"
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        dependencies = [
          {
            name = "bytes";
            packageId = "bytes";
          }
          {
            name = "http";
            packageId = "http";
          }
        ];
        
      };
      "http-serde" = rec {
        crateName = "http-serde";
        version = "1.0.1";
        edition = "2018";
        sha256 = "18knpi6z6pq8y3ydrf5b9vv4sfw46bvz9f6jrgnlkkyyw565dada";
        authors = [
          "Kornel <kornel@geekhood.net>"
        ];
        dependencies = [
          {
            name = "http";
            packageId = "http";
          }
          {
            name = "serde";
            packageId = "serde";
            features = [ "derive" ];
          }
        ];
        
      };
      "httparse" = rec {
        crateName = "httparse";
        version = "1.3.4";
        edition = "2015";
        sha256 = "1yf23ldnjwfkkhkca7f4w15mky9961gjz28dlwyybhphc7l9l5yd";
        authors = [
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        features = {
          "default" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "httpdate" = rec {
        crateName = "httpdate";
        version = "0.3.2";
        edition = "2015";
        sha256 = "0izbd3sf0625wm4rrfv85xa4xa8j4n1ldxhwlkgff4cm6rh4sjs9";
        authors = [
          "Pyfisch <pyfisch@gmail.com>"
        ];
        features = {
        };
      };
      "hyper" = rec {
        crateName = "hyper";
        version = "0.14.2";
        edition = "2018";
        sha256 = "1gnckphz28sb01b036q53cxc408f7i0z8drpl2kb8k2ihk49s88j";
        authors = [
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        dependencies = [
          {
            name = "bytes";
            packageId = "bytes";
          }
          {
            name = "futures-channel";
            packageId = "futures-channel";
          }
          {
            name = "futures-core";
            packageId = "futures-core";
            usesDefaultFeatures = false;
          }
          {
            name = "futures-util";
            packageId = "futures-util";
            usesDefaultFeatures = false;
          }
          {
            name = "h2";
            packageId = "h2";
            optional = true;
          }
          {
            name = "http";
            packageId = "http";
          }
          {
            name = "http-body";
            packageId = "http-body";
          }
          {
            name = "httparse";
            packageId = "httparse";
          }
          {
            name = "httpdate";
            packageId = "httpdate";
          }
          {
            name = "itoa";
            packageId = "itoa";
          }
          {
            name = "pin-project";
            packageId = "pin-project 1.0.4";
          }
          {
            name = "socket2";
            packageId = "socket2";
            optional = true;
          }
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "sync" ];
          }
          {
            name = "tower-service";
            packageId = "tower-service";
          }
          {
            name = "tracing";
            packageId = "tracing";
            usesDefaultFeatures = false;
            features = [ "std" ];
          }
          {
            name = "want";
            packageId = "want";
          }
        ];
        devDependencies = [
          {
            name = "futures-util";
            packageId = "futures-util";
            usesDefaultFeatures = false;
            features = [ "alloc" ];
          }
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "fs" "macros" "io-std" "io-util" "rt" "rt-multi-thread" "sync" "time" "test-util" ];
          }
        ];
        features = {
          "full" = [ "client" "http1" "http2" "server" "stream" "runtime" ];
          "http2" = [ "h2" ];
          "runtime" = [ "tcp" "tokio/rt" ];
          "tcp" = [ "socket2" "tokio/net" "tokio/rt" "tokio/time" ];
        };
        resolvedDefaultFeatures = [ "client" "default" "h2" "http1" "http2" "socket2" "tcp" ];
      };
      "hyper-tls" = rec {
        crateName = "hyper-tls";
        version = "0.5.0";
        edition = "2018";
        sha256 = "01crgy13102iagakf6q4mb75dprzr7ps1gj0l5hxm1cvm7gks66n";
        authors = [
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        dependencies = [
          {
            name = "bytes";
            packageId = "bytes";
          }
          {
            name = "hyper";
            packageId = "hyper";
            usesDefaultFeatures = false;
            features = [ "tcp" "client" ];
          }
          {
            name = "native-tls";
            packageId = "native-tls";
          }
          {
            name = "tokio";
            packageId = "tokio";
          }
          {
            name = "tokio-native-tls";
            packageId = "tokio-native-tls";
          }
        ];
        devDependencies = [
          {
            name = "hyper";
            packageId = "hyper";
            usesDefaultFeatures = false;
            features = [ "http1" ];
          }
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "io-std" "macros" "io-util" ];
          }
        ];
        features = {
          "vendored" = [ "native-tls/vendored" ];
        };
      };
      "idlebot" = rec {
        crateName = "idlebot";
        version = "0.1.0";
        edition = "2018";
        crateBin = [
          { name = "idlebot"; path = "src/main.rs"; }
        ];
        src = (builtins.filterSource sourceFilter ./.);
        authors = [
          "Benjamin Saunders <ben.e.saunders@gmail.com>"
        ];
        dependencies = [
          {
            name = "anyhow";
            packageId = "anyhow";
          }
          {
            name = "heed";
            packageId = "heed";
            usesDefaultFeatures = false;
            features = [ "mdbx" "serde-bincode" ];
          }
          {
            name = "http";
            packageId = "http";
          }
          {
            name = "http-serde";
            packageId = "http-serde";
          }
          {
            name = "ruma";
            packageId = "ruma";
            features = [ "client-api" ];
          }
          {
            name = "ruma-client";
            packageId = "ruma-client";
          }
          {
            name = "serde";
            packageId = "serde";
            features = [ "derive" ];
          }
          {
            name = "serde_json";
            packageId = "serde_json";
          }
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "macros" "rt" "time" ];
          }
          {
            name = "tokio-stream";
            packageId = "tokio-stream";
            usesDefaultFeatures = false;
          }
          {
            name = "toml";
            packageId = "toml";
          }
          {
            name = "tracing";
            packageId = "tracing";
          }
          {
            name = "tracing-subscriber";
            packageId = "tracing-subscriber";
          }
        ];
        
      };
      "idna" = rec {
        crateName = "idna";
        version = "0.2.0";
        edition = "2015";
        sha256 = "1a9066imqpdrm1aavfasdyb1zahqaz8jmdcwdawvb1pf60y6gqh2";
        authors = [
          "The rust-url developers"
        ];
        dependencies = [
          {
            name = "matches";
            packageId = "matches";
          }
          {
            name = "unicode-bidi";
            packageId = "unicode-bidi";
          }
          {
            name = "unicode-normalization";
            packageId = "unicode-normalization";
          }
        ];
        
      };
      "indexmap" = rec {
        crateName = "indexmap";
        version = "1.6.1";
        edition = "2018";
        sha256 = "0friqyzr4ssyayks7nirqbc36zcsf8fdi67jmvl4vpjh8a9zmcag";
        authors = [
          "bluss"
          "Josh Stone <cuviper@gmail.com>"
        ];
        dependencies = [
          {
            name = "hashbrown";
            packageId = "hashbrown";
            usesDefaultFeatures = false;
            features = [ "raw" ];
          }
        ];
        buildDependencies = [
          {
            name = "autocfg";
            packageId = "autocfg";
          }
        ];
        features = {
          "serde-1" = [ "serde" ];
        };
      };
      "itoa" = rec {
        crateName = "itoa";
        version = "0.4.7";
        edition = "2015";
        sha256 = "0di7fggbknwfjcw8cgzm1dnm3ik32l2m1f7nmyh8ipmh45h069fx";
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        features = {
          "default" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "js_int" = rec {
        crateName = "js_int";
        version = "0.2.0";
        edition = "2018";
        sha256 = "1k1ar0wkb88nvm8cbzjxj1p8yjqp7axjaqpk70dphsx9g3h8kbpw";
        authors = [
          "Jonas Platte <jplatte+git@posteo.de>"
        ];
        dependencies = [
          {
            name = "serde";
            packageId = "serde";
            optional = true;
            usesDefaultFeatures = false;
            features = [ "derive" ];
          }
        ];
        features = {
          "default" = [ "std" ];
          "lax_deserialize" = [ "serde" ];
        };
        resolvedDefaultFeatures = [ "default" "serde" "std" ];
      };
      "lazy_static" = rec {
        crateName = "lazy_static";
        version = "1.4.0";
        edition = "2015";
        sha256 = "0in6ikhw8mgl33wjv6q6xfrb5b9jr16q8ygjy803fay4zcisvaz2";
        authors = [
          "Marvin Löbel <loebel.marvin@gmail.com>"
        ];
        features = {
          "spin_no_std" = [ "spin" ];
        };
      };
      "libc" = rec {
        crateName = "libc";
        version = "0.2.84";
        edition = "2015";
        sha256 = "1zy5z0yc10ninwhvb7hv1z0vbwmqav1lsljrjjcc1s4207x35jhw";
        authors = [
          "The Rust Project Developers"
        ];
        features = {
          "default" = [ "std" ];
          "rustc-dep-of-std" = [ "align" "rustc-std-workspace-core" ];
          "use_std" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "align" "default" "std" ];
      };
      "log" = rec {
        crateName = "log";
        version = "0.4.14";
        edition = "2015";
        sha256 = "04175hv0v62shd82qydq58a48k3bjijmk54v38zgqlbxqkkbpfai";
        authors = [
          "The Rust Project Developers"
        ];
        dependencies = [
          {
            name = "cfg-if";
            packageId = "cfg-if 1.0.0";
          }
        ];
        features = {
          "kv_unstable" = [ "value-bag" ];
          "kv_unstable_serde" = [ "kv_unstable_std" "value-bag/serde" "serde" ];
          "kv_unstable_std" = [ "std" "kv_unstable" "value-bag/error" ];
          "kv_unstable_sval" = [ "kv_unstable" "value-bag/sval" "sval" ];
        };
        resolvedDefaultFeatures = [ "std" ];
      };
      "maplit" = rec {
        crateName = "maplit";
        version = "1.0.2";
        edition = "2015";
        sha256 = "07b5kjnhrrmfhgqm9wprjw8adx6i225lqp49gasgqg74lahnabiy";
        authors = [
          "bluss"
        ];
        
      };
      "matchers" = rec {
        crateName = "matchers";
        version = "0.0.1";
        edition = "2018";
        sha256 = "1q8ckqmkjqkznvdi9x0z769yz2bmvlqcwx51ad2lpk4mfmgpi6gh";
        authors = [
          "Eliza Weisman <eliza@buoyant.io>"
        ];
        dependencies = [
          {
            name = "regex-automata";
            packageId = "regex-automata";
          }
        ];
        
      };
      "matches" = rec {
        crateName = "matches";
        version = "0.1.8";
        edition = "2015";
        sha256 = "020axl4q7rk9vz90phs7f8jas4imxal9y9kxl4z4v7a6719mrz3z";
        libPath = "lib.rs";
        authors = [
          "Simon Sapin <simon.sapin@exyr.org>"
        ];
        
      };
      "mdbx-sys" = rec {
        crateName = "mdbx-sys";
        version = "0.7.1";
        edition = "2015";
        sha256 = "1mvdvj9zrgx6v3dkbs9rpgdbs1zgwvakp3fb3n3nsiwvjfy2wp69";
        libName = "mdbx_sys";
        authors = [
          "Dan Burkert <dan@danburkert.com>"
          "Victor Porof <vporof@mozilla.com>"
          "Kerollmops <renault.cle@gmail.com>"
        ];
        dependencies = [
          {
            name = "libc";
            packageId = "libc";
          }
        ];
        buildDependencies = [
          {
            name = "cc";
            packageId = "cc";
          }
          {
            name = "pkg-config";
            packageId = "pkg-config";
          }
        ];
        features = {
        };
        resolvedDefaultFeatures = [ "default" ];
      };
      "memchr" = rec {
        crateName = "memchr";
        version = "2.3.4";
        edition = "2015";
        sha256 = "098m9clfs495illlw00hv2gg67mhm7jflld3msyclvi5m9xc9q8f";
        authors = [
          "Andrew Gallant <jamslam@gmail.com>"
          "bluss"
        ];
        features = {
          "default" = [ "std" ];
          "use_std" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "mio" = rec {
        crateName = "mio";
        version = "0.7.7";
        edition = "2018";
        sha256 = "1mryrcvhcgphmz2xkph7gqavf6aj40f7sm0bvsdwr7qn9pqf62p5";
        authors = [
          "Carl Lerche <me@carllerche.com>"
          "Thomas de Zeeuw <thomasdezeeuw@gmail.com>"
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "libc";
            packageId = "libc";
            target = { target, features }: target."unix";
          }
          {
            name = "log";
            packageId = "log";
          }
          {
            name = "miow";
            packageId = "miow";
            target = { target, features }: target."windows";
          }
          {
            name = "ntapi";
            packageId = "ntapi";
            target = { target, features }: target."windows";
          }
          {
            name = "winapi";
            packageId = "winapi";
            target = { target, features }: target."windows";
            features = [ "winsock2" "mswsock" ];
          }
        ];
        features = {
          "os-ext" = [ "os-poll" ];
          "os-util" = [ "os-ext" ];
          "pipe" = [ "os-ext" ];
          "tcp" = [ "net" ];
          "udp" = [ "net" ];
          "uds" = [ "net" ];
        };
        resolvedDefaultFeatures = [ "default" "net" "os-ext" "os-poll" "os-util" "tcp" "udp" "uds" ];
      };
      "miow" = rec {
        crateName = "miow";
        version = "0.3.6";
        edition = "2018";
        sha256 = "15sqdhh29dqgw5xh59clwv6scbsbvdkbmdc16hbfvyq7b2sw2css";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        dependencies = [
          {
            name = "socket2";
            packageId = "socket2";
          }
          {
            name = "winapi";
            packageId = "winapi";
            features = [ "std" "fileapi" "handleapi" "ioapiset" "minwindef" "namedpipeapi" "ntdef" "synchapi" "winerror" "winsock2" "ws2def" "ws2ipdef" ];
          }
        ];
        
      };
      "native-tls" = rec {
        crateName = "native-tls";
        version = "0.2.7";
        edition = "2015";
        sha256 = "1m6v16xl8h4pm32pw6yhrvgwznf60bqhj2qhb1yrb8wd3hp6pndq";
        authors = [
          "Steven Fackler <sfackler@gmail.com>"
        ];
        dependencies = [
          {
            name = "lazy_static";
            packageId = "lazy_static";
            target = { target, features }: ((target."os" == "macos") || (target."os" == "ios"));
          }
          {
            name = "libc";
            packageId = "libc";
            target = { target, features }: ((target."os" == "macos") || (target."os" == "ios"));
          }
          {
            name = "log";
            packageId = "log";
            target = { target, features }: (!((target."os" == "windows") || (target."os" == "macos") || (target."os" == "ios")));
          }
          {
            name = "openssl";
            packageId = "openssl";
            target = { target, features }: (!((target."os" == "windows") || (target."os" == "macos") || (target."os" == "ios")));
          }
          {
            name = "openssl-probe";
            packageId = "openssl-probe";
            target = { target, features }: (!((target."os" == "windows") || (target."os" == "macos") || (target."os" == "ios")));
          }
          {
            name = "openssl-sys";
            packageId = "openssl-sys";
            target = { target, features }: (!((target."os" == "windows") || (target."os" == "macos") || (target."os" == "ios")));
          }
          {
            name = "schannel";
            packageId = "schannel";
            target = { target, features }: (target."os" == "windows");
          }
          {
            name = "security-framework";
            packageId = "security-framework";
            target = { target, features }: ((target."os" == "macos") || (target."os" == "ios"));
          }
          {
            name = "security-framework-sys";
            packageId = "security-framework-sys";
            target = { target, features }: ((target."os" == "macos") || (target."os" == "ios"));
          }
          {
            name = "tempfile";
            packageId = "tempfile";
            target = { target, features }: ((target."os" == "macos") || (target."os" == "ios"));
          }
        ];
        devDependencies = [
          {
            name = "tempfile";
            packageId = "tempfile";
          }
        ];
        features = {
          "alpn" = [ "security-framework/alpn" ];
          "vendored" = [ "openssl/vendored" ];
        };
      };
      "ntapi" = rec {
        crateName = "ntapi";
        version = "0.3.6";
        edition = "2018";
        sha256 = "0i5daj9sr8wyi5jkpwpybln2jqpn59z0mqfc0dpdidipwh1bjsrz";
        authors = [
          "MSxDOS <melcodos@gmail.com>"
        ];
        dependencies = [
          {
            name = "winapi";
            packageId = "winapi";
            features = [ "cfg" "evntrace" "in6addr" "inaddr" "minwinbase" "ntsecapi" "windef" "winioctl" ];
          }
        ];
        features = {
          "default" = [ "user" ];
          "impl-default" = [ "winapi/impl-default" ];
        };
        resolvedDefaultFeatures = [ "default" "user" ];
      };
      "num-integer" = rec {
        crateName = "num-integer";
        version = "0.1.44";
        edition = "2015";
        sha256 = "1nq152y3304as1iai95hqz8prqnc94lks1s7q05sfjdmcf56kk6j";
        authors = [
          "The Rust Project Developers"
        ];
        dependencies = [
          {
            name = "num-traits";
            packageId = "num-traits";
            usesDefaultFeatures = false;
          }
        ];
        buildDependencies = [
          {
            name = "autocfg";
            packageId = "autocfg";
          }
        ];
        features = {
          "default" = [ "std" ];
          "i128" = [ "num-traits/i128" ];
          "std" = [ "num-traits/std" ];
        };
      };
      "num-traits" = rec {
        crateName = "num-traits";
        version = "0.2.14";
        edition = "2015";
        sha256 = "144j176s2p76azy2ngk2vkdzgwdc0bc8c93jhki8c9fsbknb2r4s";
        authors = [
          "The Rust Project Developers"
        ];
        buildDependencies = [
          {
            name = "autocfg";
            packageId = "autocfg";
          }
        ];
        features = {
          "default" = [ "std" ];
        };
      };
      "once_cell" = rec {
        crateName = "once_cell";
        version = "1.5.2";
        edition = "2018";
        sha256 = "183zs1dbmsv24mkafjypf9qwjrx46an58vb004a162l113sl3g8k";
        authors = [
          "Aleksey Kladov <aleksey.kladov@gmail.com>"
        ];
        features = {
          "default" = [ "std" ];
          "std" = [ "alloc" ];
        };
        resolvedDefaultFeatures = [ "alloc" "default" "std" ];
      };
      "openssl" = rec {
        crateName = "openssl";
        version = "0.10.32";
        edition = "2015";
        sha256 = "0w4s742al5yx77mfkhpc9rwy8mhv0g6xhc06j2lsgp0xbnc47383";
        authors = [
          "Steven Fackler <sfackler@gmail.com>"
        ];
        dependencies = [
          {
            name = "bitflags";
            packageId = "bitflags";
          }
          {
            name = "cfg-if";
            packageId = "cfg-if 1.0.0";
          }
          {
            name = "foreign-types";
            packageId = "foreign-types";
          }
          {
            name = "lazy_static";
            packageId = "lazy_static";
          }
          {
            name = "libc";
            packageId = "libc";
          }
          {
            name = "openssl-sys";
            packageId = "openssl-sys";
          }
        ];
        features = {
          "vendored" = [ "openssl-sys/vendored" ];
        };
      };
      "openssl-probe" = rec {
        crateName = "openssl-probe";
        version = "0.1.2";
        edition = "2015";
        sha256 = "1pijrdifgsdwd45b08c2g0dsmnhz7c3kmagb70839ngrd7d29bvp";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        
      };
      "openssl-sys" = rec {
        crateName = "openssl-sys";
        version = "0.9.60";
        edition = "2015";
        sha256 = "1rpkfl0rmdcvxzyzp3n24g9clplh4avgzpi5c2a3hx96hcccf7wj";
        build = "build/main.rs";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
          "Steven Fackler <sfackler@gmail.com>"
        ];
        dependencies = [
          {
            name = "libc";
            packageId = "libc";
          }
        ];
        buildDependencies = [
          {
            name = "autocfg";
            packageId = "autocfg";
          }
          {
            name = "cc";
            packageId = "cc";
          }
          {
            name = "pkg-config";
            packageId = "pkg-config";
          }
          {
            name = "vcpkg";
            packageId = "vcpkg";
            target = {target, features}: (target."env" == "msvc");
          }
        ];
        features = {
          "vendored" = [ "openssl-src" ];
        };
      };
      "page_size" = rec {
        crateName = "page_size";
        version = "0.4.2";
        edition = "2015";
        sha256 = "1kgdv7f626jy4i2pq8czp4ppady4g4kqfa5ik4dah7mzzd4fbggf";
        authors = [
          "Philip Woods <elzairthesorcerer@gmail.com>"
        ];
        dependencies = [
          {
            name = "libc";
            packageId = "libc";
            target = { target, features }: target."unix";
          }
          {
            name = "winapi";
            packageId = "winapi";
            target = { target, features }: target."windows";
            features = [ "sysinfoapi" ];
          }
        ];
        features = {
          "no_std" = [ "spin" ];
        };
      };
      "paste" = rec {
        crateName = "paste";
        version = "1.0.4";
        edition = "2018";
        sha256 = "1hfikh0bds8hqn371l2wf039mp6b5wrmwrwg96jcs6lkjm6mrmn5";
        procMacro = true;
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        
      };
      "percent-encoding" = rec {
        crateName = "percent-encoding";
        version = "2.1.0";
        edition = "2015";
        sha256 = "0bp3zrsk3kr47fbpipyczidbbx4g54lzxdm77ni1i3qws10mdzfl";
        libPath = "lib.rs";
        authors = [
          "The rust-url developers"
        ];
        
      };
      "pin-project 0.4.27" = rec {
        crateName = "pin-project";
        version = "0.4.27";
        edition = "2018";
        sha256 = "05cfd6sp0ydkdfw7b3c8s1sws0xmhclylam9icnkvsiq9glwiyrg";
        authors = [
          "Taiki Endo <te316e89@gmail.com>"
        ];
        dependencies = [
          {
            name = "pin-project-internal";
            packageId = "pin-project-internal 0.4.27";
            usesDefaultFeatures = false;
          }
        ];
        
      };
      "pin-project 1.0.4" = rec {
        crateName = "pin-project";
        version = "1.0.4";
        edition = "2018";
        sha256 = "1wm2gjmgcsglw8yqka67fhvcj7zj1fh6yfw6awlal5wza1l0pdwm";
        authors = [
          "Taiki Endo <te316e89@gmail.com>"
        ];
        dependencies = [
          {
            name = "pin-project-internal";
            packageId = "pin-project-internal 1.0.4";
            usesDefaultFeatures = false;
          }
        ];
        
      };
      "pin-project-internal 0.4.27" = rec {
        crateName = "pin-project-internal";
        version = "0.4.27";
        edition = "2018";
        sha256 = "158q986q00s1pz1akazdcjkvkbdcbdhfw5azw8g3mgkadgjjmbb5";
        procMacro = true;
        authors = [
          "Taiki Endo <te316e89@gmail.com>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
            features = [ "full" "visit-mut" ];
          }
        ];
        
      };
      "pin-project-internal 1.0.4" = rec {
        crateName = "pin-project-internal";
        version = "1.0.4";
        edition = "2018";
        sha256 = "0wcy3n9w856aw27f6ns2ipd2yac7jbl0n3pmn0cyhb7jjdimm8na";
        procMacro = true;
        authors = [
          "Taiki Endo <te316e89@gmail.com>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
            features = [ "full" "visit-mut" ];
          }
        ];
        
      };
      "pin-project-lite" = rec {
        crateName = "pin-project-lite";
        version = "0.2.4";
        edition = "2018";
        sha256 = "09x8chns8apal89pndqdrr0c2nv8jw6nmi8hl38acjbc6sprg5j3";
        authors = [
          "Taiki Endo <te316e89@gmail.com>"
        ];
        
      };
      "pin-utils" = rec {
        crateName = "pin-utils";
        version = "0.1.0";
        edition = "2018";
        sha256 = "117ir7vslsl2z1a7qzhws4pd01cg2d3338c47swjyvqv2n60v1wb";
        authors = [
          "Josef Brandl <mail@josefbrandl.de>"
        ];
        
      };
      "pkg-config" = rec {
        crateName = "pkg-config";
        version = "0.3.19";
        edition = "2015";
        sha256 = "0k4860955riciibxr8bhnklp79jydp4xfylwdn5v9kj96hxlac9q";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        
      };
      "ppv-lite86" = rec {
        crateName = "ppv-lite86";
        version = "0.2.10";
        edition = "2018";
        sha256 = "0ms8198kclg4h96ggbziixxmsdl847s648kmbx11zlmjsqjccx5c";
        authors = [
          "The CryptoCorrosion Contributors"
        ];
        features = {
          "default" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "simd" "std" ];
      };
      "proc-macro-crate" = rec {
        crateName = "proc-macro-crate";
        version = "0.1.5";
        edition = "2018";
        sha256 = "11cpihdk9ba68hzw95aa8zxn0i5g6kdrfd4l2cy3d5jvb72a6vhx";
        authors = [
          "Bastian Köcher <git@kchr.de>"
        ];
        dependencies = [
          {
            name = "toml";
            packageId = "toml";
          }
        ];
        
      };
      "proc-macro-hack" = rec {
        crateName = "proc-macro-hack";
        version = "0.5.19";
        edition = "2018";
        sha256 = "1rg0kzsj7lj00qj602d3h77spwfz48vixn1wbjp7a4yrq65w9w6v";
        procMacro = true;
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        
      };
      "proc-macro-nested" = rec {
        crateName = "proc-macro-nested";
        version = "0.1.7";
        edition = "2015";
        sha256 = "11hh1jynh62f3m1ii0f9gf1l3y0fhkwpmr40lz3704v848n1p25w";
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        
      };
      "proc-macro2" = rec {
        crateName = "proc-macro2";
        version = "1.0.24";
        edition = "2018";
        sha256 = "0wcabxzrddcjmryndw8fpyxcq6rw63m701vx86xxf03y3bp081qy";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
          "David Tolnay <dtolnay@gmail.com>"
        ];
        dependencies = [
          {
            name = "unicode-xid";
            packageId = "unicode-xid";
          }
        ];
        features = {
          "default" = [ "proc-macro" ];
        };
        resolvedDefaultFeatures = [ "default" "proc-macro" ];
      };
      "quote" = rec {
        crateName = "quote";
        version = "1.0.8";
        edition = "2018";
        sha256 = "1pr8dz4pyfbbsqpqw6ygin8m4sz61iir7nl23233cgwsa71k254r";
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
            usesDefaultFeatures = false;
          }
        ];
        features = {
          "default" = [ "proc-macro" ];
          "proc-macro" = [ "proc-macro2/proc-macro" ];
        };
        resolvedDefaultFeatures = [ "default" "proc-macro" ];
      };
      "rand" = rec {
        crateName = "rand";
        version = "0.8.3";
        edition = "2018";
        sha256 = "0zldxfx4gi551n2fna4zz9ab22zsnzw1mj5hzi5nfs24dgkfgy8f";
        authors = [
          "The Rand Project Developers"
          "The Rust Project Developers"
        ];
        dependencies = [
          {
            name = "libc";
            packageId = "libc";
            optional = true;
            usesDefaultFeatures = false;
            target = { target, features }: target."unix";
          }
          {
            name = "rand_chacha";
            packageId = "rand_chacha";
            optional = true;
            usesDefaultFeatures = false;
            target = { target, features }: (!(target."os" == "emscripten"));
          }
          {
            name = "rand_core";
            packageId = "rand_core";
          }
          {
            name = "rand_hc";
            packageId = "rand_hc";
            optional = true;
            target = { target, features }: (target."os" == "emscripten");
          }
        ];
        devDependencies = [
          {
            name = "rand_hc";
            packageId = "rand_hc";
          }
        ];
        features = {
          "alloc" = [ "rand_core/alloc" ];
          "default" = [ "std" "std_rng" ];
          "getrandom" = [ "rand_core/getrandom" ];
          "serde1" = [ "serde" ];
          "simd_support" = [ "packed_simd" ];
          "std" = [ "rand_core/std" "rand_chacha/std" "alloc" "getrandom" "libc" ];
          "std_rng" = [ "rand_chacha" "rand_hc" ];
        };
        resolvedDefaultFeatures = [ "alloc" "default" "getrandom" "libc" "rand_chacha" "rand_hc" "std" "std_rng" ];
      };
      "rand_chacha" = rec {
        crateName = "rand_chacha";
        version = "0.3.0";
        edition = "2018";
        sha256 = "03df2xh5nbdvwr17qm3sviaxa95r8yhm1nil2pr0pqf90p7ka9z1";
        authors = [
          "The Rand Project Developers"
          "The Rust Project Developers"
          "The CryptoCorrosion Contributors"
        ];
        dependencies = [
          {
            name = "ppv-lite86";
            packageId = "ppv-lite86";
            usesDefaultFeatures = false;
            features = [ "simd" ];
          }
          {
            name = "rand_core";
            packageId = "rand_core";
          }
        ];
        features = {
          "default" = [ "std" ];
          "std" = [ "ppv-lite86/std" ];
        };
        resolvedDefaultFeatures = [ "std" ];
      };
      "rand_core" = rec {
        crateName = "rand_core";
        version = "0.6.1";
        edition = "2018";
        sha256 = "1rfjrcyaj7blz2nawv2pypm5kqc59p80n6f5pg691399iggxf9n0";
        authors = [
          "The Rand Project Developers"
          "The Rust Project Developers"
        ];
        dependencies = [
          {
            name = "getrandom";
            packageId = "getrandom";
            optional = true;
          }
        ];
        features = {
          "serde1" = [ "serde" ];
          "std" = [ "alloc" "getrandom" "getrandom/std" ];
        };
        resolvedDefaultFeatures = [ "alloc" "getrandom" "std" ];
      };
      "rand_hc" = rec {
        crateName = "rand_hc";
        version = "0.3.0";
        edition = "2018";
        sha256 = "0wra6ar22zdjkry9dsq1mg620m4h3qb9s8rfykkz4im4crqfz41i";
        authors = [
          "The Rand Project Developers"
        ];
        dependencies = [
          {
            name = "rand_core";
            packageId = "rand_core";
          }
        ];
        
      };
      "redox_syscall" = rec {
        crateName = "redox_syscall";
        version = "0.2.4";
        edition = "2018";
        sha256 = "0w254gyccyinrzhgd562ddrhgcpwswy700mmc9qa6pkc86lqrv05";
        libName = "syscall";
        authors = [
          "Jeremy Soller <jackpot51@gmail.com>"
        ];
        dependencies = [
          {
            name = "bitflags";
            packageId = "bitflags";
          }
        ];
        
      };
      "regex" = rec {
        crateName = "regex";
        version = "1.4.3";
        edition = "2015";
        sha256 = "12llbg82js69mdl50lav4yn1iqlx71ckb18dww467q99w4wi49fr";
        authors = [
          "The Rust Project Developers"
        ];
        dependencies = [
          {
            name = "regex-syntax";
            packageId = "regex-syntax";
            usesDefaultFeatures = false;
          }
        ];
        features = {
          "default" = [ "std" "perf" "unicode" "regex-syntax/default" ];
          "perf" = [ "perf-cache" "perf-dfa" "perf-inline" "perf-literal" ];
          "perf-cache" = [ "thread_local" ];
          "perf-literal" = [ "aho-corasick" "memchr" ];
          "unicode" = [ "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" "regex-syntax/unicode" ];
          "unicode-age" = [ "regex-syntax/unicode-age" ];
          "unicode-bool" = [ "regex-syntax/unicode-bool" ];
          "unicode-case" = [ "regex-syntax/unicode-case" ];
          "unicode-gencat" = [ "regex-syntax/unicode-gencat" ];
          "unicode-perl" = [ "regex-syntax/unicode-perl" ];
          "unicode-script" = [ "regex-syntax/unicode-script" ];
          "unicode-segment" = [ "regex-syntax/unicode-segment" ];
          "unstable" = [ "pattern" ];
          "use_std" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "std" ];
      };
      "regex-automata" = rec {
        crateName = "regex-automata";
        version = "0.1.9";
        edition = "2015";
        sha256 = "1r3aqa9c0s9sfrmd2w0mli16ldjzbar0rzb1x7srfjkasrqys7df";
        authors = [
          "Andrew Gallant <jamslam@gmail.com>"
        ];
        dependencies = [
          {
            name = "byteorder";
            packageId = "byteorder";
            usesDefaultFeatures = false;
          }
          {
            name = "regex-syntax";
            packageId = "regex-syntax";
            optional = true;
          }
        ];
        features = {
          "default" = [ "std" ];
          "std" = [ "regex-syntax" ];
          "transducer" = [ "std" "fst" ];
        };
        resolvedDefaultFeatures = [ "default" "regex-syntax" "std" ];
      };
      "regex-syntax" = rec {
        crateName = "regex-syntax";
        version = "0.6.22";
        edition = "2015";
        sha256 = "10b56ylil35jkb4nwqxm8hbyx3zq7fws0wpydjln165s8xql3sxm";
        authors = [
          "The Rust Project Developers"
        ];
        features = {
          "default" = [ "unicode" ];
          "unicode" = [ "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
        };
        resolvedDefaultFeatures = [ "default" "unicode" "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
      };
      "remove_dir_all" = rec {
        crateName = "remove_dir_all";
        version = "0.5.3";
        edition = "2015";
        sha256 = "1rzqbsgkmr053bxxl04vmvsd1njyz0nxvly97aip6aa2cmb15k9s";
        authors = [
          "Aaronepower <theaaronepower@gmail.com>"
        ];
        dependencies = [
          {
            name = "winapi";
            packageId = "winapi";
            target = { target, features }: target."windows";
            features = [ "std" "errhandlingapi" "winerror" "fileapi" "winbase" ];
          }
        ];
        
      };
      "ruma" = rec {
        crateName = "ruma";
        version = "0.0.2";
        edition = "2018";
        sha256 = "12azf7bnf54wxzfddvqgphy3jhjhrilfvghq6zd3lwnh2nn8y123";
        authors = [
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "assign";
            packageId = "assign";
          }
          {
            name = "js_int";
            packageId = "js_int";
          }
          {
            name = "ruma-api";
            packageId = "ruma-api";
            optional = true;
          }
          {
            name = "ruma-client-api";
            packageId = "ruma-client-api";
            optional = true;
          }
          {
            name = "ruma-common";
            packageId = "ruma-common";
          }
          {
            name = "ruma-events";
            packageId = "ruma-events";
            optional = true;
          }
          {
            name = "ruma-identifiers";
            packageId = "ruma-identifiers";
            features = [ "serde" ];
          }
          {
            name = "ruma-serde";
            packageId = "ruma-serde";
          }
        ];
        features = {
          "appservice-api" = [ "ruma-api" "ruma-appservice-api" "events" ];
          "client-api" = [ "ruma-api" "ruma-client-api" "events" ];
          "either" = [ "ruma-identifiers/either" ];
          "events" = [ "ruma-events" ];
          "federation-api" = [ "ruma-api" "ruma-federation-api" "signatures" ];
          "identity-service-api" = [ "ruma-api" "ruma-identity-service-api" ];
          "push-gateway-api" = [ "ruma-api" "ruma-push-gateway-api" ];
          "rand" = [ "ruma-identifiers/rand" ];
          "signatures" = [ "ruma-signatures" ];
          "unstable-exhaustive-types" = [ "ruma-events/unstable-exhaustive-types" "ruma-appservice-api/unstable-exhaustive-types" "ruma-client-api/unstable-exhaustive-types" "ruma-federation-api/unstable-exhaustive-types" "ruma-common/unstable-exhaustive-types" ];
          "unstable-pre-spec" = [ "ruma-client-api/unstable-pre-spec" "ruma-events/unstable-pre-spec" "ruma-federation-api/unstable-pre-spec" ];
          "unstable-synapse-quirks" = [ "ruma-client-api/unstable-synapse-quirks" "ruma-common/unstable-synapse-quirks" "ruma-events/unstable-synapse-quirks" ];
        };
        resolvedDefaultFeatures = [ "client-api" "events" "ruma-api" "ruma-client-api" "ruma-events" ];
      };
      "ruma-api" = rec {
        crateName = "ruma-api";
        version = "0.17.0-alpha.2";
        edition = "2018";
        sha256 = "1ybxchd3g3xq3vn0xyclxyqax8mpqgjf9s4gdx1k7jwb5giaad64";
        authors = [
          "Jimmy Cuadra <jimmy@jimmycuadra.com>"
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "http";
            packageId = "http";
          }
          {
            name = "percent-encoding";
            packageId = "percent-encoding";
          }
          {
            name = "ruma-api-macros";
            packageId = "ruma-api-macros";
          }
          {
            name = "ruma-identifiers";
            packageId = "ruma-identifiers";
          }
          {
            name = "ruma-serde";
            packageId = "ruma-serde";
          }
          {
            name = "serde";
            packageId = "serde";
            features = [ "derive" ];
          }
          {
            name = "serde_json";
            packageId = "serde_json";
          }
          {
            name = "thiserror";
            packageId = "thiserror";
          }
        ];
        
      };
      "ruma-api-macros" = rec {
        crateName = "ruma-api-macros";
        version = "0.17.0-alpha.2";
        edition = "2018";
        sha256 = "04fzbdg95kn0w4ly87p8x4dazpr5hj6im308dhg4r5z31sa9vcmy";
        procMacro = true;
        authors = [
          "Jimmy Cuadra <jimmy@jimmycuadra.com>"
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "proc-macro-crate";
            packageId = "proc-macro-crate";
          }
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
            features = [ "full" "extra-traits" ];
          }
        ];
        
      };
      "ruma-client" = rec {
        crateName = "ruma-client";
        version = "0.5.0-alpha.1";
        edition = "2018";
        sha256 = "1lvs4gn23zhhlcb3g6vra6zcm3854y3ac21i3ab27rcgpnnqyh1h";
        authors = [
          "Jimmy Cuadra <jimmy@jimmycuadra.com>"
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "assign";
            packageId = "assign";
          }
          {
            name = "futures-core";
            packageId = "futures-core";
          }
          {
            name = "futures-util";
            packageId = "futures-util";
          }
          {
            name = "http";
            packageId = "http";
          }
          {
            name = "hyper";
            packageId = "hyper";
            features = [ "client" "tcp" ];
          }
          {
            name = "hyper-tls";
            packageId = "hyper-tls";
            optional = true;
          }
          {
            name = "ruma-api";
            packageId = "ruma-api";
          }
          {
            name = "ruma-client-api";
            packageId = "ruma-client-api";
          }
          {
            name = "ruma-common";
            packageId = "ruma-common";
          }
          {
            name = "ruma-events";
            packageId = "ruma-events";
          }
          {
            name = "ruma-identifiers";
            packageId = "ruma-identifiers";
          }
          {
            name = "ruma-serde";
            packageId = "ruma-serde";
          }
          {
            name = "serde";
            packageId = "serde";
            features = [ "derive" ];
          }
          {
            name = "serde_json";
            packageId = "serde_json";
          }
        ];
        features = {
          "_tls-rustls" = [ "_tls" ];
          "default" = [ "http1" "http2" "tls-native" ];
          "http1" = [ "hyper/http1" ];
          "http2" = [ "hyper/http2" ];
          "tls-native" = [ "hyper-tls" "_tls" ];
          "tls-rustls-native-roots" = [ "hyper-rustls" "hyper-rustls/native-tokio" "_tls-rustls" ];
          "tls-rustls-webpki-roots" = [ "hyper-rustls" "hyper-rustls/webpki-tokio" "_tls-rustls" ];
          "unstable-synapse-quirks" = [ "ruma-events/unstable-synapse-quirks" ];
        };
        resolvedDefaultFeatures = [ "_tls" "default" "http1" "http2" "hyper-tls" "tls-native" ];
      };
      "ruma-client-api" = rec {
        crateName = "ruma-client-api";
        version = "0.10.0-alpha.2";
        edition = "2018";
        sha256 = "0skhm2lr12css83blxzkasic5whbhzp9l0yvjrgrscwy5b9x9sxa";
        authors = [
          "Jimmy Cuadra <jimmy@jimmycuadra.com>"
          "Jonas Platte <jplatte@posteo.de>"
          "Isaiah Inuwa <isaiah.inuwa@gmail.com>"
        ];
        dependencies = [
          {
            name = "assign";
            packageId = "assign";
          }
          {
            name = "http";
            packageId = "http";
          }
          {
            name = "js_int";
            packageId = "js_int";
            features = [ "serde" ];
          }
          {
            name = "maplit";
            packageId = "maplit";
          }
          {
            name = "percent-encoding";
            packageId = "percent-encoding";
          }
          {
            name = "ruma-api";
            packageId = "ruma-api";
          }
          {
            name = "ruma-common";
            packageId = "ruma-common";
          }
          {
            name = "ruma-events";
            packageId = "ruma-events";
          }
          {
            name = "ruma-identifiers";
            packageId = "ruma-identifiers";
          }
          {
            name = "ruma-serde";
            packageId = "ruma-serde";
          }
          {
            name = "serde";
            packageId = "serde";
            features = [ "derive" ];
          }
          {
            name = "serde_json";
            packageId = "serde_json";
          }
        ];
        devDependencies = [
          {
            name = "maplit";
            packageId = "maplit";
          }
        ];
        features = {
          "unstable-synapse-quirks" = [ "ruma-common/unstable-synapse-quirks" "ruma-events/unstable-synapse-quirks" ];
        };
      };
      "ruma-common" = rec {
        crateName = "ruma-common";
        version = "0.3.0-alpha.1";
        edition = "2018";
        sha256 = "0zd9xr7q2fflp54jy8c4hmnqxvcrar6p2aqihkck2h7d85j4jy4b";
        authors = [
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "js_int";
            packageId = "js_int";
            features = [ "serde" ];
          }
          {
            name = "maplit";
            packageId = "maplit";
          }
          {
            name = "ruma-identifiers";
            packageId = "ruma-identifiers";
          }
          {
            name = "ruma-serde";
            packageId = "ruma-serde";
          }
          {
            name = "serde";
            packageId = "serde";
            features = [ "derive" ];
          }
          {
            name = "serde_json";
            packageId = "serde_json";
            features = [ "raw_value" ];
          }
        ];
        features = {
        };
      };
      "ruma-events" = rec {
        crateName = "ruma-events";
        version = "0.22.0-alpha.2";
        edition = "2018";
        sha256 = "0f3f70b7p1jmwsyfbgvc4riqr39dzz6ny7skmns010n4pzlwqq7z";
        authors = [
          "Jimmy Cuadra <jimmy@jimmycuadra.com>"
        ];
        dependencies = [
          {
            name = "js_int";
            packageId = "js_int";
            features = [ "serde" ];
          }
          {
            name = "ruma-common";
            packageId = "ruma-common";
          }
          {
            name = "ruma-events-macros";
            packageId = "ruma-events-macros";
          }
          {
            name = "ruma-identifiers";
            packageId = "ruma-identifiers";
          }
          {
            name = "ruma-serde";
            packageId = "ruma-serde";
          }
          {
            name = "serde";
            packageId = "serde";
            features = [ "derive" ];
          }
          {
            name = "serde_json";
            packageId = "serde_json";
            features = [ "raw_value" ];
          }
        ];
        devDependencies = [
          {
            name = "ruma-identifiers";
            packageId = "ruma-identifiers";
            features = [ "rand" ];
          }
        ];
        features = {
        };
      };
      "ruma-events-macros" = rec {
        crateName = "ruma-events-macros";
        version = "0.22.0-alpha.2";
        edition = "2018";
        sha256 = "1vv5mwdp2r5j3400abib4278n156avp3ph8gsyjrbapwsxwmkj8v";
        procMacro = true;
        authors = [
          "Jimmy Cuadra <jimmy@jimmycuadra.com>"
          "Jonas Platte <jplatte@posteo.de>"
          "Devin Ragotzy <devin.ragotzy@gmail.com>"
        ];
        dependencies = [
          {
            name = "proc-macro-crate";
            packageId = "proc-macro-crate";
          }
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
            features = [ "full" ];
          }
        ];
        
      };
      "ruma-identifiers" = rec {
        crateName = "ruma-identifiers";
        version = "0.18.0-alpha.1";
        edition = "2018";
        sha256 = "1yjaank21l0vfx2wnpr6q2zld6mwragqznr6drimiskskwz3wvxf";
        authors = [
          "Jimmy Cuadra <jimmy@jimmycuadra.com>"
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "paste";
            packageId = "paste";
          }
          {
            name = "ruma-identifiers-macros";
            packageId = "ruma-identifiers-macros";
          }
          {
            name = "ruma-identifiers-validation";
            packageId = "ruma-identifiers-validation";
            usesDefaultFeatures = false;
          }
          {
            name = "ruma-serde";
            packageId = "ruma-serde";
            optional = true;
          }
          {
            name = "ruma-serde-macros";
            packageId = "ruma-serde-macros";
          }
          {
            name = "serde";
            packageId = "serde";
            rename = "serde1";
            optional = true;
            features = [ "derive" ];
          }
        ];
        features = {
          "default" = [ "serde" ];
          "serde" = [ "ruma-serde" "serde1" "ruma-identifiers-validation/serde" ];
        };
        resolvedDefaultFeatures = [ "default" "ruma-serde" "serde" "serde1" ];
      };
      "ruma-identifiers-macros" = rec {
        crateName = "ruma-identifiers-macros";
        version = "0.18.0-alpha.1";
        edition = "2018";
        sha256 = "0cigzbrb27rl33rncjxzps0kpwb57m9iaavhl47z7pbpg5pj7216";
        procMacro = true;
        authors = [
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "ruma-identifiers-validation";
            packageId = "ruma-identifiers-validation";
            usesDefaultFeatures = false;
          }
          {
            name = "syn";
            packageId = "syn";
          }
        ];
        
      };
      "ruma-identifiers-validation" = rec {
        crateName = "ruma-identifiers-validation";
        version = "0.2.0";
        edition = "2018";
        sha256 = "0vgsaylbn0jki329b30kr47nsdykf0nxl9qkpsg0llxglnzbsjv3";
        authors = [
          "Jimmy Cuadra <jimmy@jimmycuadra.com>"
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "serde";
            packageId = "serde";
            optional = true;
            features = [ "derive" ];
          }
        ];
        features = {
          "default" = [ "serde" ];
        };
        resolvedDefaultFeatures = [ "serde" ];
      };
      "ruma-serde" = rec {
        crateName = "ruma-serde";
        version = "0.3.0";
        edition = "2018";
        sha256 = "1y3b7ha3sba7hql0jl91bvpbswbs5579j3l68s1qg3n6zw4cwcpq";
        authors = [
          "Jonas Platte <jplatte@posteo.de>"
          "Isaiah Inuwa <isaiah.inuwa@gmail.com>"
          "Anthony Ramine <n.oxyde@gmail.com>"
        ];
        dependencies = [
          {
            name = "form_urlencoded";
            packageId = "form_urlencoded";
          }
          {
            name = "itoa";
            packageId = "itoa";
          }
          {
            name = "js_int";
            packageId = "js_int";
            features = [ "serde" ];
          }
          {
            name = "ruma-serde-macros";
            packageId = "ruma-serde-macros";
          }
          {
            name = "serde";
            packageId = "serde";
            features = [ "derive" ];
          }
          {
            name = "serde_json";
            packageId = "serde_json";
            features = [ "raw_value" ];
          }
        ];
        
      };
      "ruma-serde-macros" = rec {
        crateName = "ruma-serde-macros";
        version = "0.3.0";
        edition = "2018";
        sha256 = "1xmfbxaxjmlpzplnyxh5ph0j83ak8rm0rs682vg5ggcjzf03qdbq";
        procMacro = true;
        authors = [
          "Jonas Platte <jplatte@posteo.de>"
        ];
        dependencies = [
          {
            name = "proc-macro-crate";
            packageId = "proc-macro-crate";
          }
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
            features = [ "full" "extra-traits" ];
          }
        ];
        
      };
      "ryu" = rec {
        crateName = "ryu";
        version = "1.0.5";
        edition = "2018";
        sha256 = "0vpqv1dj7fksa6hm3zpk5rbsjs0ifbfy7xwzsyyil0rx37a03lvi";
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        features = {
        };
      };
      "schannel" = rec {
        crateName = "schannel";
        version = "0.1.19";
        edition = "2015";
        sha256 = "0xdwr3clrylywpv2r5hw7mrxmsf7ljagwiymw2z60ki3kihbl1cg";
        authors = [
          "Steven Fackler <sfackler@gmail.com>"
          "Steffen Butzer <steffen.butzer@outlook.com>"
        ];
        dependencies = [
          {
            name = "lazy_static";
            packageId = "lazy_static";
          }
          {
            name = "winapi";
            packageId = "winapi";
            features = [ "lmcons" "minschannel" "securitybaseapi" "schannel" "sspi" "sysinfoapi" "timezoneapi" "winbase" "wincrypt" "winerror" ];
          }
        ];
        
      };
      "security-framework" = rec {
        crateName = "security-framework";
        version = "2.0.0";
        edition = "2018";
        sha256 = "0scc4vj2mw9k6qpxp26zx8gnqnmw79nwayja91x030457hp9qxf1";
        authors = [
          "Steven Fackler <sfackler@gmail.com>"
          "Kornel <kornel@geekhood.net>"
        ];
        dependencies = [
          {
            name = "bitflags";
            packageId = "bitflags";
          }
          {
            name = "core-foundation";
            packageId = "core-foundation";
          }
          {
            name = "core-foundation-sys";
            packageId = "core-foundation-sys";
          }
          {
            name = "libc";
            packageId = "libc";
          }
          {
            name = "security-framework-sys";
            packageId = "security-framework-sys";
            usesDefaultFeatures = false;
          }
        ];
        features = {
          "OSX_10_10" = [ "OSX_10_9" "security-framework-sys/OSX_10_10" ];
          "OSX_10_11" = [ "OSX_10_10" "security-framework-sys/OSX_10_11" ];
          "OSX_10_12" = [ "OSX_10_11" "security-framework-sys/OSX_10_12" ];
          "OSX_10_13" = [ "OSX_10_12" "security-framework-sys/OSX_10_13" "alpn" "session-tickets" ];
          "OSX_10_9" = [ "security-framework-sys/OSX_10_9" ];
          "default" = [ "OSX_10_9" ];
        };
        resolvedDefaultFeatures = [ "OSX_10_9" "default" ];
      };
      "security-framework-sys" = rec {
        crateName = "security-framework-sys";
        version = "2.0.0";
        edition = "2018";
        sha256 = "12v7wpf7cbc92xza4lf3w12411wzrkkvlbjgrhrid9yj4rg9v6zr";
        authors = [
          "Steven Fackler <sfackler@gmail.com>"
          "Kornel <kornel@geekhood.net>"
        ];
        dependencies = [
          {
            name = "core-foundation-sys";
            packageId = "core-foundation-sys";
          }
          {
            name = "libc";
            packageId = "libc";
          }
        ];
        features = {
          "OSX_10_10" = [ "OSX_10_9" ];
          "OSX_10_11" = [ "OSX_10_10" ];
          "OSX_10_12" = [ "OSX_10_11" ];
          "OSX_10_13" = [ "OSX_10_12" ];
          "default" = [ "OSX_10_9" ];
        };
        resolvedDefaultFeatures = [ "OSX_10_9" "default" ];
      };
      "serde" = rec {
        crateName = "serde";
        version = "1.0.123";
        edition = "2015";
        sha256 = "1bk9733mgiv5sg8yb19y8mc85fb2aaqp1k02v10alavj688idmcj";
        authors = [
          "Erick Tryzelaar <erick.tryzelaar@gmail.com>"
          "David Tolnay <dtolnay@gmail.com>"
        ];
        dependencies = [
          {
            name = "serde_derive";
            packageId = "serde_derive";
            optional = true;
          }
        ];
        devDependencies = [
          {
            name = "serde_derive";
            packageId = "serde_derive";
          }
        ];
        features = {
          "default" = [ "std" ];
          "derive" = [ "serde_derive" ];
        };
        resolvedDefaultFeatures = [ "default" "derive" "serde_derive" "std" ];
      };
      "serde_derive" = rec {
        crateName = "serde_derive";
        version = "1.0.123";
        edition = "2015";
        sha256 = "0ccg4m7ww6mfs5vjdbdifri2kf1wyd4difjnqnraph2gssaw54ck";
        procMacro = true;
        authors = [
          "Erick Tryzelaar <erick.tryzelaar@gmail.com>"
          "David Tolnay <dtolnay@gmail.com>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
          }
        ];
        features = {
        };
        resolvedDefaultFeatures = [ "default" ];
      };
      "serde_json" = rec {
        crateName = "serde_json";
        version = "1.0.61";
        edition = "2018";
        sha256 = "0nijvxvgcncvd1wbn73zx7q14bdxah0gf2789qd8kdjpa1cv5kjg";
        authors = [
          "Erick Tryzelaar <erick.tryzelaar@gmail.com>"
          "David Tolnay <dtolnay@gmail.com>"
        ];
        dependencies = [
          {
            name = "itoa";
            packageId = "itoa";
            usesDefaultFeatures = false;
          }
          {
            name = "ryu";
            packageId = "ryu";
          }
          {
            name = "serde";
            packageId = "serde";
            usesDefaultFeatures = false;
          }
        ];
        features = {
          "alloc" = [ "serde/alloc" ];
          "default" = [ "std" ];
          "preserve_order" = [ "indexmap" ];
          "std" = [ "serde/std" ];
        };
        resolvedDefaultFeatures = [ "default" "raw_value" "std" ];
      };
      "sharded-slab" = rec {
        crateName = "sharded-slab";
        version = "0.1.1";
        edition = "2018";
        sha256 = "1qqlmr2jfhpfgav4y7lax46a7rcrzjn4a2pqj1sgjpg0krqikivr";
        authors = [
          "Eliza Weisman <eliza@buoyant.io>"
        ];
        dependencies = [
          {
            name = "lazy_static";
            packageId = "lazy_static";
          }
        ];
        
      };
      "slab" = rec {
        crateName = "slab";
        version = "0.4.2";
        edition = "2015";
        sha256 = "1y59xsa27jk84sxzswjk60xcjf8b4fm5960jwpznrrcmasyva4f1";
        authors = [
          "Carl Lerche <me@carllerche.com>"
        ];
        
      };
      "smallvec" = rec {
        crateName = "smallvec";
        version = "1.6.1";
        edition = "2018";
        sha256 = "0kk08axr0ybfbjzk65a41k84mb6sfhyajmfndaka9igkx34kf3zy";
        authors = [
          "The Servo Project Developers"
        ];
        features = {
        };
      };
      "socket2" = rec {
        crateName = "socket2";
        version = "0.3.19";
        edition = "2018";
        sha256 = "0vldz14mxqxnjqb6an2pj7mgclv7nrk45cpscwq7g3fj2c0mfbhj";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        dependencies = [
          {
            name = "cfg-if";
            packageId = "cfg-if 1.0.0";
            target = { target, features }: target."unix";
          }
          {
            name = "libc";
            packageId = "libc";
            target = { target, features }: target."unix";
            features = [ "align" ];
          }
          {
            name = "winapi";
            packageId = "winapi";
            target = { target, features }: target."windows";
            features = [ "handleapi" "ws2def" "ws2ipdef" "ws2tcpip" "minwindef" ];
          }
        ];
        features = {
        };
      };
      "syn" = rec {
        crateName = "syn";
        version = "1.0.60";
        edition = "2018";
        sha256 = "1080gw6mlja7yl26crya3k403wjdp7v3wx9mxcmpcnlar9z5j067";
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
            usesDefaultFeatures = false;
          }
          {
            name = "quote";
            packageId = "quote";
            optional = true;
            usesDefaultFeatures = false;
          }
          {
            name = "unicode-xid";
            packageId = "unicode-xid";
          }
        ];
        features = {
          "default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ];
          "printing" = [ "quote" ];
          "proc-macro" = [ "proc-macro2/proc-macro" "quote/proc-macro" ];
          "test" = [ "syn-test-suite/all-features" ];
        };
        resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "quote" "visit-mut" ];
      };
      "synchronoise" = rec {
        crateName = "synchronoise";
        version = "1.0.0";
        edition = "2015";
        sha256 = "1szasv8xl6z3gxfq8h8wllw2mq53d71nn29achxsnfcxzh7fs5yp";
        authors = [
          "QuietMisdreavus <grey@quietmisdreavus.net>"
        ];
        dependencies = [
          {
            name = "crossbeam-queue";
            packageId = "crossbeam-queue";
          }
        ];
        
      };
      "tempfile" = rec {
        crateName = "tempfile";
        version = "3.2.0";
        edition = "2018";
        sha256 = "08pbf3c1i42382dc44dil5bgiawcsi0qk6zdibw10f69rxiwdhfs";
        authors = [
          "Steven Allen <steven@stebalien.com>"
          "The Rust Project Developers"
          "Ashley Mannix <ashleymannix@live.com.au>"
          "Jason White <jasonaw0@gmail.com>"
        ];
        dependencies = [
          {
            name = "cfg-if";
            packageId = "cfg-if 1.0.0";
          }
          {
            name = "libc";
            packageId = "libc";
            target = { target, features }: target."unix";
          }
          {
            name = "rand";
            packageId = "rand";
          }
          {
            name = "redox_syscall";
            packageId = "redox_syscall";
            target = { target, features }: (target."os" == "redox");
          }
          {
            name = "remove_dir_all";
            packageId = "remove_dir_all";
          }
          {
            name = "winapi";
            packageId = "winapi";
            target = { target, features }: target."windows";
            features = [ "fileapi" "handleapi" "winbase" ];
          }
        ];
        
      };
      "thiserror" = rec {
        crateName = "thiserror";
        version = "1.0.23";
        edition = "2018";
        sha256 = "0imiv97kdlba0r0ld6mlizfmw5rpmfzhvk7xw8l8k35zd9n63k3n";
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        dependencies = [
          {
            name = "thiserror-impl";
            packageId = "thiserror-impl";
          }
        ];
        
      };
      "thiserror-impl" = rec {
        crateName = "thiserror-impl";
        version = "1.0.23";
        edition = "2018";
        sha256 = "1law4wqpc36hxs4vcgc1pjjniy4l6xn7kwvf0k886xf2mqn3mrwv";
        procMacro = true;
        authors = [
          "David Tolnay <dtolnay@gmail.com>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
          }
        ];
        
      };
      "thread_local" = rec {
        crateName = "thread_local";
        version = "1.1.2";
        edition = "2018";
        sha256 = "05b94g3giadny554wpwzlqwclj7wp3952sfpbgfiicqw3qrql86q";
        authors = [
          "Amanieu d'Antras <amanieu@gmail.com>"
        ];
        dependencies = [
          {
            name = "once_cell";
            packageId = "once_cell";
          }
        ];
        
      };
      "time" = rec {
        crateName = "time";
        version = "0.1.43";
        edition = "2015";
        sha256 = "0f14wrgxj7ya2v4msg5mni7046bsm2angm7cn3pd3yv04gpm12na";
        authors = [
          "The Rust Project Developers"
        ];
        dependencies = [
          {
            name = "libc";
            packageId = "libc";
          }
          {
            name = "winapi";
            packageId = "winapi";
            target = { target, features }: target."windows";
            features = [ "std" "minwinbase" "minwindef" "ntdef" "profileapi" "sysinfoapi" "timezoneapi" ];
          }
        ];
        devDependencies = [
          {
            name = "winapi";
            packageId = "winapi";
            features = [ "std" "processthreadsapi" "winbase" ];
          }
        ];
        
      };
      "tinyvec" = rec {
        crateName = "tinyvec";
        version = "1.1.1";
        edition = "2018";
        sha256 = "08qhf0a9vxf85bj1hd38i8qzwiwm6v4vvwd11k7c728f59bwlz1i";
        authors = [
          "Lokathor <zefria@gmail.com>"
        ];
        dependencies = [
          {
            name = "tinyvec_macros";
            packageId = "tinyvec_macros";
            optional = true;
          }
        ];
        features = {
          "alloc" = [ "tinyvec_macros" ];
        };
        resolvedDefaultFeatures = [ "alloc" "default" "tinyvec_macros" ];
      };
      "tinyvec_macros" = rec {
        crateName = "tinyvec_macros";
        version = "0.1.0";
        edition = "2018";
        sha256 = "0p5zvgbas5nh403fbxica819mf3g83n8g2hzpfazfr56w6klv9yd";
        authors = [
          "Soveu <marx.tomasz@gmail.com>"
        ];
        
      };
      "tokio" = rec {
        crateName = "tokio";
        version = "1.1.1";
        edition = "2018";
        sha256 = "0gzb1cvh7fwakf7jqq5jrm8d2cv2sv342n581z5hlsqb15ixc537";
        authors = [
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "bytes";
            packageId = "bytes";
            optional = true;
          }
          {
            name = "libc";
            packageId = "libc";
            optional = true;
            target = { target, features }: target."unix";
          }
          {
            name = "memchr";
            packageId = "memchr";
            optional = true;
          }
          {
            name = "mio";
            packageId = "mio";
            optional = true;
          }
          {
            name = "pin-project-lite";
            packageId = "pin-project-lite";
          }
          {
            name = "tokio-macros";
            packageId = "tokio-macros";
            optional = true;
          }
        ];
        buildDependencies = [
          {
            name = "autocfg";
            packageId = "autocfg";
          }
        ];
        devDependencies = [
          {
            name = "libc";
            packageId = "libc";
            target = {target, features}: target."unix";
          }
        ];
        features = {
          "full" = [ "fs" "io-util" "io-std" "macros" "net" "parking_lot" "process" "rt" "rt-multi-thread" "signal" "sync" "time" ];
          "io-util" = [ "memchr" "bytes" ];
          "macros" = [ "tokio-macros" ];
          "net" = [ "libc" "mio/os-poll" "mio/os-util" "mio/tcp" "mio/udp" "mio/uds" ];
          "process" = [ "bytes" "once_cell" "libc" "mio/os-poll" "mio/os-util" "mio/uds" "signal-hook-registry" "winapi/threadpoollegacyapiset" ];
          "rt-multi-thread" = [ "num_cpus" "rt" ];
          "signal" = [ "once_cell" "libc" "mio/os-poll" "mio/uds" "mio/os-util" "signal-hook-registry" "winapi/consoleapi" ];
        };
        resolvedDefaultFeatures = [ "bytes" "default" "io-util" "libc" "macros" "memchr" "mio" "net" "rt" "sync" "time" "tokio-macros" ];
      };
      "tokio-macros" = rec {
        crateName = "tokio-macros";
        version = "1.0.0";
        edition = "2018";
        sha256 = "150l6wfcqw2rcjaf22qk3z6ca794x0s2c68n5ar18cfafllpsla2";
        procMacro = true;
        authors = [
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
            features = [ "full" ];
          }
        ];
        
      };
      "tokio-native-tls" = rec {
        crateName = "tokio-native-tls";
        version = "0.3.0";
        edition = "2018";
        sha256 = "0yvikgmph2qjq0ni2h2wfaxkzhbnc09c2544av0zidyj1dk9bngp";
        authors = [
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "native-tls";
            packageId = "native-tls";
          }
          {
            name = "tokio";
            packageId = "tokio";
          }
        ];
        devDependencies = [
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "macros" "rt" "rt-multi-thread" "io-util" "net" ];
          }
        ];
        
      };
      "tokio-stream" = rec {
        crateName = "tokio-stream";
        version = "0.1.2";
        edition = "2018";
        sha256 = "1p8fy0ka9fgzcaq51aa0inqghgd986sg11n6js3ynli02xjnh1kn";
        authors = [
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "futures-core";
            packageId = "futures-core";
          }
          {
            name = "pin-project-lite";
            packageId = "pin-project-lite";
          }
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "sync" ];
          }
        ];
        devDependencies = [
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "full" "test-util" ];
          }
        ];
        features = {
          "default" = [ "time" ];
          "fs" = [ "tokio/fs" ];
          "io-util" = [ "tokio/io-util" ];
          "net" = [ "tokio/net" ];
          "time" = [ "tokio/time" ];
        };
      };
      "tokio-util" = rec {
        crateName = "tokio-util";
        version = "0.6.3";
        edition = "2018";
        sha256 = "0yq11cgy29qqw0v3jdi8jz9r05ydf9i30lmjapvqvbn500pwpdzb";
        authors = [
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "bytes";
            packageId = "bytes";
          }
          {
            name = "futures-core";
            packageId = "futures-core";
          }
          {
            name = "futures-sink";
            packageId = "futures-sink";
          }
          {
            name = "log";
            packageId = "log";
          }
          {
            name = "pin-project-lite";
            packageId = "pin-project-lite";
          }
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "sync" ];
          }
        ];
        devDependencies = [
          {
            name = "tokio";
            packageId = "tokio";
            features = [ "full" ];
          }
        ];
        features = {
          "__docs_rs" = [ "futures-util" ];
          "compat" = [ "futures-io" ];
          "full" = [ "codec" "compat" "io" "time" "net" "rt" ];
          "net" = [ "tokio/net" ];
          "rt" = [ "tokio/rt" ];
          "time" = [ "tokio/time" "slab" ];
        };
        resolvedDefaultFeatures = [ "codec" "default" ];
      };
      "toml" = rec {
        crateName = "toml";
        version = "0.5.8";
        edition = "2018";
        sha256 = "1apcmjrrjw429pjw7mqlmdwwd67g8305vwqy4kw3swr612bl44d3";
        authors = [
          "Alex Crichton <alex@alexcrichton.com>"
        ];
        dependencies = [
          {
            name = "serde";
            packageId = "serde";
          }
        ];
        features = {
          "preserve_order" = [ "indexmap" ];
        };
        resolvedDefaultFeatures = [ "default" ];
      };
      "tower-service" = rec {
        crateName = "tower-service";
        version = "0.3.1";
        edition = "2018";
        sha256 = "1iih764s3f6vlkspfmr72fkrs2lw1v3wiqmc6bd5zq1hdlfzs39n";
        authors = [
          "Tower Maintainers <team@tower-rs.com>"
        ];
        
      };
      "tracing" = rec {
        crateName = "tracing";
        version = "0.1.22";
        edition = "2018";
        sha256 = "1qzg7rcfby8f2nn1ln3gk6fjc80q0bg8fw5k95zc1020vin04iwz";
        authors = [
          "Eliza Weisman <eliza@buoyant.io>"
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "cfg-if";
            packageId = "cfg-if 1.0.0";
          }
          {
            name = "pin-project-lite";
            packageId = "pin-project-lite";
          }
          {
            name = "tracing-attributes";
            packageId = "tracing-attributes";
            optional = true;
          }
          {
            name = "tracing-core";
            packageId = "tracing-core";
            usesDefaultFeatures = false;
          }
        ];
        features = {
          "attributes" = [ "tracing-attributes" ];
          "default" = [ "std" "attributes" ];
          "log-always" = [ "log" ];
          "std" = [ "tracing-core/std" ];
        };
        resolvedDefaultFeatures = [ "attributes" "default" "std" "tracing-attributes" ];
      };
      "tracing-attributes" = rec {
        crateName = "tracing-attributes";
        version = "0.1.11";
        edition = "2018";
        sha256 = "1njady03jycfarjbmbhnrpsl6s9pd9knp50c4z70rnkq6gycrq40";
        procMacro = true;
        authors = [
          "Tokio Contributors <team@tokio.rs>"
          "Eliza Weisman <eliza@buoyant.io>"
          "David Barsky <dbarsky@amazon.com>"
        ];
        dependencies = [
          {
            name = "proc-macro2";
            packageId = "proc-macro2";
          }
          {
            name = "quote";
            packageId = "quote";
          }
          {
            name = "syn";
            packageId = "syn";
            usesDefaultFeatures = false;
            features = [ "full" "parsing" "printing" "visit-mut" "clone-impls" "extra-traits" "proc-macro" ];
          }
        ];
        features = {
        };
      };
      "tracing-core" = rec {
        crateName = "tracing-core";
        version = "0.1.17";
        edition = "2018";
        sha256 = "0pvbgv301vw6dq4krc14yqbyyixb42lcs4s57xw05llkgy9f63gm";
        authors = [
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "lazy_static";
            packageId = "lazy_static";
            optional = true;
          }
        ];
        features = {
          "default" = [ "std" ];
          "std" = [ "lazy_static" ];
        };
        resolvedDefaultFeatures = [ "default" "lazy_static" "std" ];
      };
      "tracing-futures" = rec {
        crateName = "tracing-futures";
        version = "0.2.4";
        edition = "2018";
        sha256 = "0k4vd3jyqz9cx8rbwbp0p93qfp1w6rfk7sc6c1jh1ai18zqvcyxb";
        authors = [
          "Eliza Weisman <eliza@buoyant.io>"
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "pin-project";
            packageId = "pin-project 0.4.27";
            optional = true;
          }
          {
            name = "tracing";
            packageId = "tracing";
            usesDefaultFeatures = false;
          }
        ];
        features = {
          "default" = [ "std-future" "std" ];
          "futures-01" = [ "futures_01" "std" ];
          "futures-03" = [ "std-future" "futures" "futures-task" "std" ];
          "std" = [ "tracing/std" ];
          "std-future" = [ "pin-project" ];
        };
        resolvedDefaultFeatures = [ "pin-project" "std-future" ];
      };
      "tracing-log" = rec {
        crateName = "tracing-log";
        version = "0.1.1";
        edition = "2018";
        sha256 = "1fdr0az98q9m5kiybvdvsb2m9mg86fdidgb5czzq2d71g1qqq3sy";
        authors = [
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "lazy_static";
            packageId = "lazy_static";
          }
          {
            name = "log";
            packageId = "log";
          }
          {
            name = "tracing-core";
            packageId = "tracing-core";
          }
        ];
        features = {
          "default" = [ "log-tracer" "trace-logger" "std" ];
          "std" = [ "log/std" ];
        };
        resolvedDefaultFeatures = [ "log-tracer" "std" ];
      };
      "tracing-serde" = rec {
        crateName = "tracing-serde";
        version = "0.1.2";
        edition = "2018";
        sha256 = "12xjirg0b3cparjdhkd9pksrmv33gz7rdm4gfkvgk15v3x2flrgv";
        authors = [
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "serde";
            packageId = "serde";
          }
          {
            name = "tracing-core";
            packageId = "tracing-core";
          }
        ];
        
      };
      "tracing-subscriber" = rec {
        crateName = "tracing-subscriber";
        version = "0.2.15";
        edition = "2018";
        sha256 = "009lxq14kmakv16sh6r7fy0264xbvs81kg6yr57lwnaciw68zym1";
        authors = [
          "Eliza Weisman <eliza@buoyant.io>"
          "David Barsky <me@davidbarsky.com>"
          "Tokio Contributors <team@tokio.rs>"
        ];
        dependencies = [
          {
            name = "ansi_term";
            packageId = "ansi_term";
            optional = true;
          }
          {
            name = "chrono";
            packageId = "chrono";
            optional = true;
          }
          {
            name = "lazy_static";
            packageId = "lazy_static";
            optional = true;
          }
          {
            name = "matchers";
            packageId = "matchers";
            optional = true;
          }
          {
            name = "regex";
            packageId = "regex";
            optional = true;
            usesDefaultFeatures = false;
            features = [ "std" ];
          }
          {
            name = "serde";
            packageId = "serde";
            optional = true;
          }
          {
            name = "serde_json";
            packageId = "serde_json";
            optional = true;
          }
          {
            name = "sharded-slab";
            packageId = "sharded-slab";
            optional = true;
          }
          {
            name = "smallvec";
            packageId = "smallvec";
            optional = true;
          }
          {
            name = "thread_local";
            packageId = "thread_local";
            optional = true;
          }
          {
            name = "tracing";
            packageId = "tracing";
            optional = true;
          }
          {
            name = "tracing-core";
            packageId = "tracing-core";
          }
          {
            name = "tracing-log";
            packageId = "tracing-log";
            optional = true;
            usesDefaultFeatures = false;
            features = [ "log-tracer" "std" ];
          }
          {
            name = "tracing-serde";
            packageId = "tracing-serde";
            optional = true;
          }
        ];
        devDependencies = [
          {
            name = "regex";
            packageId = "regex";
            usesDefaultFeatures = false;
            features = [ "std" ];
          }
          {
            name = "tracing";
            packageId = "tracing";
          }
          {
            name = "tracing-log";
            packageId = "tracing-log";
          }
        ];
        features = {
          "ansi" = [ "fmt" "ansi_term" ];
          "default" = [ "env-filter" "smallvec" "fmt" "ansi" "chrono" "tracing-log" "json" ];
          "env-filter" = [ "matchers" "regex" "lazy_static" "tracing" ];
          "fmt" = [ "registry" ];
          "json" = [ "tracing-serde" "serde" "serde_json" ];
          "registry" = [ "sharded-slab" "thread_local" ];
        };
        resolvedDefaultFeatures = [ "ansi" "ansi_term" "chrono" "default" "env-filter" "fmt" "json" "lazy_static" "matchers" "regex" "registry" "serde" "serde_json" "sharded-slab" "smallvec" "thread_local" "tracing" "tracing-log" "tracing-serde" ];
      };
      "try-lock" = rec {
        crateName = "try-lock";
        version = "0.2.3";
        edition = "2015";
        sha256 = "0hkn1ksmg5hdqgqdw1ahy5qk69f4crh2psf0v61qphyrf777nm2r";
        authors = [
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        
      };
      "unicode-bidi" = rec {
        crateName = "unicode-bidi";
        version = "0.3.4";
        edition = "2015";
        sha256 = "1malx8ljgm7v1gbaazkn7iicy5wj0bwcyadj3l727a38ch6bvwj9";
        libName = "unicode_bidi";
        authors = [
          "The Servo Project Developers"
        ];
        dependencies = [
          {
            name = "matches";
            packageId = "matches";
          }
        ];
        features = {
          "flame_it" = [ "flame" "flamer" ];
          "with_serde" = [ "serde" ];
        };
        resolvedDefaultFeatures = [ "default" ];
      };
      "unicode-normalization" = rec {
        crateName = "unicode-normalization";
        version = "0.1.16";
        edition = "2018";
        sha256 = "01p6mwhrf8c748ad7nd5pf9c6djwsc45874dwpp2mqyvcamn6gm1";
        authors = [
          "kwantam <kwantam@gmail.com>"
          "Manish Goregaokar <manishsmail@gmail.com>"
        ];
        dependencies = [
          {
            name = "tinyvec";
            packageId = "tinyvec";
            features = [ "alloc" ];
          }
        ];
        features = {
          "default" = [ "std" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "unicode-xid" = rec {
        crateName = "unicode-xid";
        version = "0.2.1";
        edition = "2015";
        sha256 = "0r6mknipyy9vpz8mwmxvkx65ff2ha1n2pxqjj6f46lcn8yrhpzpp";
        authors = [
          "erick.tryzelaar <erick.tryzelaar@gmail.com>"
          "kwantam <kwantam@gmail.com>"
        ];
        features = {
        };
        resolvedDefaultFeatures = [ "default" ];
      };
      "url" = rec {
        crateName = "url";
        version = "2.2.0";
        edition = "2018";
        sha256 = "0vlpd0c7y9yv4x5vmb6qlnkxkj63r20wv2rysyg48l3kh6qg42ar";
        authors = [
          "The rust-url developers"
        ];
        dependencies = [
          {
            name = "form_urlencoded";
            packageId = "form_urlencoded";
          }
          {
            name = "idna";
            packageId = "idna";
          }
          {
            name = "matches";
            packageId = "matches";
          }
          {
            name = "percent-encoding";
            packageId = "percent-encoding";
          }
        ];
        
      };
      "vcpkg" = rec {
        crateName = "vcpkg";
        version = "0.2.11";
        edition = "2015";
        sha256 = "1yvrd2b97j4hv5bfhcj3al0dpkbzkdsr6dclxqz3zqm50rhwl2xh";
        authors = [
          "Jim McGrath <jimmc2@gmail.com>"
        ];
        
      };
      "want" = rec {
        crateName = "want";
        version = "0.3.0";
        edition = "2018";
        sha256 = "181b2zmwfq389x9n2g1n37cvcvvdand832zz6v8i1l8wrdlaks0w";
        authors = [
          "Sean McArthur <sean@seanmonstar.com>"
        ];
        dependencies = [
          {
            name = "log";
            packageId = "log";
          }
          {
            name = "try-lock";
            packageId = "try-lock";
          }
        ];
        
      };
      "wasi" = rec {
        crateName = "wasi";
        version = "0.10.2+wasi-snapshot-preview1";
        edition = "2018";
        sha256 = "1ii7nff4y1mpcrxzzvbpgxm7a1nn3szjf1n21jnx37c2g6dbsvzx";
        authors = [
          "The Cranelift Project Developers"
        ];
        features = {
          "default" = [ "std" ];
          "rustc-dep-of-std" = [ "compiler_builtins" "core" "rustc-std-workspace-alloc" ];
        };
        resolvedDefaultFeatures = [ "default" "std" ];
      };
      "winapi" = rec {
        crateName = "winapi";
        version = "0.3.9";
        edition = "2015";
        sha256 = "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw";
        authors = [
          "Peter Atashian <retep998@gmail.com>"
        ];
        dependencies = [
          {
            name = "winapi-i686-pc-windows-gnu";
            packageId = "winapi-i686-pc-windows-gnu";
            target = { target, features }: (stdenv.hostPlatform.config == "i686-pc-windows-gnu");
          }
          {
            name = "winapi-x86_64-pc-windows-gnu";
            packageId = "winapi-x86_64-pc-windows-gnu";
            target = { target, features }: (stdenv.hostPlatform.config == "x86_64-pc-windows-gnu");
          }
        ];
        features = {
          "debug" = [ "impl-debug" ];
        };
        resolvedDefaultFeatures = [ "cfg" "consoleapi" "errhandlingapi" "evntrace" "fileapi" "handleapi" "in6addr" "inaddr" "ioapiset" "lmcons" "minschannel" "minwinbase" "minwindef" "mswsock" "namedpipeapi" "ntdef" "ntsecapi" "processenv" "profileapi" "schannel" "securitybaseapi" "sspi" "std" "synchapi" "sysinfoapi" "timezoneapi" "winbase" "wincrypt" "windef" "winerror" "winioctl" "winsock2" "ws2def" "ws2ipdef" "ws2tcpip" ];
      };
      "winapi-i686-pc-windows-gnu" = rec {
        crateName = "winapi-i686-pc-windows-gnu";
        version = "0.4.0";
        edition = "2015";
        sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc";
        authors = [
          "Peter Atashian <retep998@gmail.com>"
        ];
        
      };
      "winapi-x86_64-pc-windows-gnu" = rec {
        crateName = "winapi-x86_64-pc-windows-gnu";
        version = "0.4.0";
        edition = "2015";
        sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki";
        authors = [
          "Peter Atashian <retep998@gmail.com>"
        ];
        
      };
    };

    #
# crate2nix/default.nix (excerpt start)
#

  /* Target (platform) data for conditional dependencies.
     This corresponds roughly to what buildRustCrate is setting.
  */
  defaultTarget = {
    unix = true;
    windows = false;
    fuchsia = true;
    test = false;

    # This doesn't appear to be officially documented anywhere yet.
    # See https://github.com/rust-lang-nursery/rust-forge/issues/101.
    os = if stdenv.hostPlatform.isDarwin
    then "macos"
    else stdenv.hostPlatform.parsed.kernel.name;
    arch = stdenv.hostPlatform.parsed.cpu.name;
    family = "unix";
    env = "gnu";
    endian =
      if stdenv.hostPlatform.parsed.cpu.significantByte.name == "littleEndian"
      then "little" else "big";
    pointer_width = toString stdenv.hostPlatform.parsed.cpu.bits;
    vendor = stdenv.hostPlatform.parsed.vendor.name;
    debug_assertions = false;
  };

  /* Filters common temp files and build files. */
  # TODO(pkolloch): Substitute with gitignore filter
  sourceFilter = name: type:
    let
      baseName = builtins.baseNameOf (builtins.toString name);
    in
      ! (
        # Filter out git
        baseName == ".gitignore"
        || (type == "directory" && baseName == ".git")

        # Filter out build results
        || (
          type == "directory" && (
            baseName == "target"
            || baseName == "_site"
            || baseName == ".sass-cache"
            || baseName == ".jekyll-metadata"
            || baseName == "build-artifacts"
          )
        )

        # Filter out nix-build result symlinks        
        || (
          type == "symlink" && lib.hasPrefix "result" baseName
        )

        # Filter out IDE config
        || (
          type == "directory" && (
            baseName == ".idea" || baseName == ".vscode"
          )
        ) || lib.hasSuffix ".iml" baseName

        # Filter out nix build files
        || baseName == "Cargo.nix"

        # Filter out editor backup / swap files.
        || lib.hasSuffix "~" baseName
        || builtins.match "^\\.sw[a-z]$$" baseName != null
        || builtins.match "^\\..*\\.sw[a-z]$$" baseName != null
        || lib.hasSuffix ".tmp" baseName
        || lib.hasSuffix ".bak" baseName
        || baseName == "tests.nix"
      );

  /* Returns a crate which depends on successful test execution
     of crate given as the second argument.

     testCrateFlags: list of flags to pass to the test exectuable
     testInputs: list of packages that should be available during test execution
  */
  crateWithTest = { crate, testCrate, testCrateFlags, testInputs }:
    assert builtins.typeOf testCrateFlags == "list";
    assert builtins.typeOf testInputs == "list";
    let
      # override the `crate` so that it will build and execute tests instead of
      # building the actual lib and bin targets We just have to pass `--test`
      # to rustc and it will do the right thing.  We execute the tests and copy
      # their log and the test executables to $out for later inspection.
      test = let
        drv = testCrate.override (
          _: {
            buildTests = true;
          }
        );
      in
        pkgs.runCommand "run-tests-${testCrate.name}" {
          inherit testCrateFlags;
          buildInputs = testInputs;
        } ''
          set -ex
          cd ${crate.src}
          for file in ${drv}/tests/*; do
            $file $testCrateFlags 2>&1 | tee -a $out
          done
        '';
    in
      crate.overrideAttrs (
        old: {
          checkPhase = ''
            test -e ${test}
          '';
          passthru = (old.passthru or {}) // {
            inherit test;
          };
        }
      );

  /* A restricted overridable version of builtRustCratesWithFeatures. */
  buildRustCrateWithFeatures =
    { packageId
    , features ? rootFeatures
    , crateOverrides ? defaultCrateOverrides
    , buildRustCrateFunc ? (
        if crateOverrides == pkgs.defaultCrateOverrides
        then buildRustCrate
        else buildRustCrate.override {
          defaultCrateOverrides = crateOverrides;
        }
      )
    , runTests ? false
    , testCrateFlags ? []
    , testInputs ? []
    }:
      lib.makeOverridable
        (
          { features, crateOverrides, runTests, testCrateFlags, testInputs }:
            let
              builtRustCrates = builtRustCratesWithFeatures {
                inherit packageId features buildRustCrateFunc;
                runTests = false;
              };
              builtTestRustCrates = builtRustCratesWithFeatures {
                inherit packageId features buildRustCrateFunc;
                runTests = true;
              };
              drv = builtRustCrates.${packageId};
              testDrv = builtTestRustCrates.${packageId};
            in
              if runTests then
                crateWithTest {
                  crate = drv;
                  testCrate = testDrv;
                  inherit testCrateFlags testInputs;
                }
              else drv
        )
        { inherit features crateOverrides runTests testCrateFlags testInputs; };

  /* Returns an attr set with packageId mapped to the result of buildRustCrateFunc 
     for the corresponding crate. 
  */
  builtRustCratesWithFeatures =
    { packageId
    , features
    , crateConfigs ? crates
    , buildRustCrateFunc
    , runTests
    , target ? defaultTarget
    } @ args:
      assert (builtins.isAttrs crateConfigs);
      assert (builtins.isString packageId);
      assert (builtins.isList features);
      assert (builtins.isAttrs target);
      assert (builtins.isBool runTests);
      let
        rootPackageId = packageId;
        mergedFeatures = mergePackageFeatures (
          args // {
            inherit rootPackageId;
            target = target // { test = runTests; };
          }
        );

        buildByPackageId = packageId: buildByPackageIdImpl packageId;

        # Memoize built packages so that reappearing packages are only built once.
        builtByPackageId =
          lib.mapAttrs (packageId: value: buildByPackageId packageId) crateConfigs;

        buildByPackageIdImpl = packageId:
          let
            features = mergedFeatures."${packageId}" or [];
            crateConfig' = crateConfigs."${packageId}";
            crateConfig =
              builtins.removeAttrs crateConfig' [ "resolvedDefaultFeatures" "devDependencies" ];
            devDependencies =
              lib.optionals
                (runTests && packageId == rootPackageId)
                (crateConfig'.devDependencies or []);
            dependencies =
              dependencyDerivations {
                inherit builtByPackageId features target;
                dependencies =
                  (crateConfig.dependencies or [])
                  ++ devDependencies;
              };
            buildDependencies =
              dependencyDerivations {
                inherit builtByPackageId features target;
                dependencies = crateConfig.buildDependencies or [];
              };

            filterEnabledDependenciesForThis = dependencies: filterEnabledDependencies {
              inherit dependencies features target;
            };

            dependenciesWithRenames =
              lib.filter (d: d ? "rename") (
                filterEnabledDependenciesForThis
                  (
                    (crateConfig.buildDependencies or [])
                    ++ (crateConfig.dependencies or [])
                    ++ devDependencies
                  )
              );

            crateRenames =
              builtins.listToAttrs
                (map (d: { name = d.name; value = d.rename; }) dependenciesWithRenames);
          in
            buildRustCrateFunc (
              crateConfig // {
                src = crateConfig.src or (
                  pkgs.fetchurl {
                    name = "${crateConfig.crateName}-${crateConfig.version}.tar.gz";
                    url = "https://crates.io/api/v1/crates/${crateConfig.crateName}/${crateConfig.version}/download";
                    sha256 = crateConfig.sha256;
                  }
                );
                inherit features dependencies buildDependencies crateRenames release;
              }
            );
      in
        builtByPackageId;

  /* Returns the actual derivations for the given dependencies. */
  dependencyDerivations =
    { builtByPackageId
    , features
    , dependencies
    , target
    }:
      assert (builtins.isAttrs builtByPackageId);
      assert (builtins.isList features);
      assert (builtins.isList dependencies);
      assert (builtins.isAttrs target);
      let
        enabledDependencies = filterEnabledDependencies {
          inherit dependencies features target;
        };
        depDerivation = dependency: builtByPackageId.${dependency.packageId};
      in
        map depDerivation enabledDependencies;

  /* Returns a sanitized version of val with all values substituted that cannot
     be serialized as JSON. 
  */
  sanitizeForJson = val:
    if builtins.isAttrs val
    then lib.mapAttrs (n: v: sanitizeForJson v) val
    else if builtins.isList val
    then builtins.map sanitizeForJson val
    else if builtins.isFunction val
    then "function"
    else val;

  /* Returns various tools to debug a crate. */
  debugCrate = { packageId, target ? defaultTarget }:
    assert (builtins.isString packageId);
    let
      debug = rec {
        # The built tree as passed to buildRustCrate.
        buildTree = buildRustCrateWithFeatures {
          buildRustCrateFunc = lib.id;
          inherit packageId;
        };
        sanitizedBuildTree = sanitizeForJson buildTree;
        dependencyTree = sanitizeForJson (
          buildRustCrateWithFeatures {
            buildRustCrateFunc = crate: {
              "01_crateName" = crate.crateName or false;
              "02_features" = crate.features or [];
              "03_dependencies" = crate.dependencies or [];
            };
            inherit packageId;
          }
        );
        mergedPackageFeatures = mergePackageFeatures {
          features = rootFeatures;
          inherit packageId target;
        };
        diffedDefaultPackageFeatures = diffDefaultPackageFeatures {
          inherit packageId target;
        };
      };
    in
      { internal = debug; };

  /* Returns differences between cargo default features and crate2nix default
     features.
   
     This is useful for verifying the feature resolution in crate2nix.
  */
  diffDefaultPackageFeatures =
    { crateConfigs ? crates
    , packageId
    , target
    }:
      assert (builtins.isAttrs crateConfigs);
      let
        prefixValues = prefix: lib.mapAttrs (n: v: { "${prefix}" = v; });
        mergedFeatures =
          prefixValues
            "crate2nix"
            (mergePackageFeatures { inherit crateConfigs packageId target; features = [ "default" ]; });
        configs = prefixValues "cargo" crateConfigs;
        combined = lib.foldAttrs (a: b: a // b) {} [ mergedFeatures configs ];
        onlyInCargo =
          builtins.attrNames
            (lib.filterAttrs (n: v: !(v ? "crate2nix") && (v ? "cargo")) combined);
        onlyInCrate2Nix =
          builtins.attrNames
            (lib.filterAttrs (n: v: (v ? "crate2nix") && !(v ? "cargo")) combined);
        differentFeatures = lib.filterAttrs
          (
            n: v:
              (v ? "crate2nix")
              && (v ? "cargo")
              && (v.crate2nix.features or []) != (v."cargo".resolved_default_features or [])
          )
          combined;
      in
        builtins.toJSON {
          inherit onlyInCargo onlyInCrate2Nix differentFeatures;
        };

  /* Returns an attrset mapping packageId to the list of enabled features.

     If multiple paths to a dependency enable different features, the
     corresponding feature sets are merged. Features in rust are additive.
  */
  mergePackageFeatures =
    { crateConfigs ? crates
    , packageId
    , rootPackageId ? packageId
    , features ? rootFeatures
    , dependencyPath ? [ crates.${packageId}.crateName ]
    , featuresByPackageId ? {}
    , target
      # Adds devDependencies to the crate with rootPackageId.
    , runTests ? false
    , ...
    } @ args:
      assert (builtins.isAttrs crateConfigs);
      assert (builtins.isString packageId);
      assert (builtins.isString rootPackageId);
      assert (builtins.isList features);
      assert (builtins.isList dependencyPath);
      assert (builtins.isAttrs featuresByPackageId);
      assert (builtins.isAttrs target);
      assert (builtins.isBool runTests);
      let
        crateConfig = crateConfigs."${packageId}" or (builtins.throw "Package not found: ${packageId}");
        expandedFeatures = expandFeatures (crateConfig.features or {}) features;

        depWithResolvedFeatures = dependency:
          let
            packageId = dependency.packageId;
            features = dependencyFeatures expandedFeatures dependency;
          in
            { inherit packageId features; };

        resolveDependencies = cache: path: dependencies:
          assert (builtins.isAttrs cache);
          assert (builtins.isList dependencies);
          let
            enabledDependencies = filterEnabledDependencies {
              inherit dependencies target;
              features = expandedFeatures;
            };
            directDependencies = map depWithResolvedFeatures enabledDependencies;
            foldOverCache = op: lib.foldl op cache directDependencies;
          in
            foldOverCache
              (
                cache: { packageId, features }:
                  let
                    cacheFeatures = cache.${packageId} or [];
                    combinedFeatures = sortedUnique (cacheFeatures ++ features);
                  in
                    if cache ? ${packageId} && cache.${packageId} == combinedFeatures
                    then cache
                    else mergePackageFeatures {
                      features = combinedFeatures;
                      featuresByPackageId = cache;
                      inherit crateConfigs packageId target runTests rootPackageId;
                    }
              );

        cacheWithSelf =
          let
            cacheFeatures = featuresByPackageId.${packageId} or [];
            combinedFeatures = sortedUnique (cacheFeatures ++ expandedFeatures);
          in
            featuresByPackageId // {
              "${packageId}" = combinedFeatures;
            };

        cacheWithDependencies =
          resolveDependencies cacheWithSelf "dep" (
            crateConfig.dependencies or []
            ++ lib.optionals
              (runTests && packageId == rootPackageId)
              (crateConfig.devDependencies or [])
          );

        cacheWithAll =
          resolveDependencies
            cacheWithDependencies "build"
            (crateConfig.buildDependencies or []);
      in
        cacheWithAll;

  /* Returns the enabled dependencies given the enabled features. */
  filterEnabledDependencies = { dependencies, features, target }:
    assert (builtins.isList dependencies);
    assert (builtins.isList features);
    assert (builtins.isAttrs target);

    lib.filter
      (
        dep:
          let
            targetFunc = dep.target or (features: true);
          in
            targetFunc { inherit features target; }
            && (
              !(dep.optional or false)
              || builtins.any (doesFeatureEnableDependency dep) features
            )
      )
      dependencies;

  /* Returns whether the given feature should enable the given dependency. */
  doesFeatureEnableDependency = { name, rename ? null, ... }: feature:
    let
      prefix = "${name}/";
      len = builtins.stringLength prefix;
      startsWithPrefix = builtins.substring 0 len feature == prefix;
    in
      (rename == null && feature == name)
      || (rename != null && rename == feature)
      || startsWithPrefix;

  /* Returns the expanded features for the given inputFeatures by applying the
     rules in featureMap.

     featureMap is an attribute set which maps feature names to lists of further
     feature names to enable in case this feature is selected.
  */
  expandFeatures = featureMap: inputFeatures:
    assert (builtins.isAttrs featureMap);
    assert (builtins.isList inputFeatures);
    let
      expandFeature = feature:
        assert (builtins.isString feature);
        [ feature ] ++ (expandFeatures featureMap (featureMap."${feature}" or []));
      outFeatures = builtins.concatMap expandFeature inputFeatures;
    in
      sortedUnique outFeatures;

  /*
     Returns the actual features for the given dependency.
    
     features: The features of the crate that refers this dependency.
  */
  dependencyFeatures = features: dependency:
    assert (builtins.isList features);
    assert (builtins.isAttrs dependency);
    let
      defaultOrNil = if dependency.usesDefaultFeatures or true
      then [ "default" ]
      else [];
      explicitFeatures = dependency.features or [];
      additionalDependencyFeatures =
        let
          dependencyPrefix = (dependency.rename or dependency.name) + "/";
          dependencyFeatures =
            builtins.filter (f: lib.hasPrefix dependencyPrefix f) features;
        in
          builtins.map (lib.removePrefix dependencyPrefix) dependencyFeatures;
    in
      defaultOrNil ++ explicitFeatures ++ additionalDependencyFeatures;

  /* Sorts and removes duplicates from a list of strings. */
  sortedUnique = features:
    assert (builtins.isList features);
    assert (builtins.all builtins.isString features);
    let
      outFeaturesSet = lib.foldl (set: feature: set // { "${feature}" = 1; }) {} features;
      outFeaturesUnique = builtins.attrNames outFeaturesSet;
    in
      builtins.sort (a: b: a < b) outFeaturesUnique;

  deprecationWarning = message: value:
    if strictDeprecation
    then builtins.throw "strictDeprecation enabled, aborting: ${message}"
    else builtins.trace message value;

  #
  # crate2nix/default.nix (excerpt end)
  #

  };
}