Cargo features alignment tool.

Overview

Cargo Featalign

Cargo features alignment tool.

License Checks Release GitHub tag (latest by date) GitHub code lines GitHub last commit

Introduction

The original version of this project can be found at subalfred check features. Upon further investigation, I have found that this tool is not only compatible with Substrate projects but also works for general Cargo projects, offering even more powerful features than before. Now, cargo-featalign stands out with its enhanced functionality.

The cargo-featalign tool offers the following features:

  • Checking for missing features
  • Printing the dependency path
  • Performing a dry run before overwriting
  • Automatically aligning/fixing missing features
  • Sorting alphabetically while aligning

Installation

Usage

cargo featalign --help
Cargo features alignment tool.

Usage: cargo-featalign [OPTIONS] --features <[NAME]> [PATH]

Arguments:
  [PATH]
          Root `Cargo.toml`'s path.

          If `Cargo.toml` is not provided, it will be searched for under the specified path.

          [default: ./Cargo.toml]

Options:
      --features <[NAME]>
          Features to process

      --thread <NUM>
          Number of threads to use.

          The default value is based on the number of logical cores.

          [default: 32]

      --mode <MODE>
          Running mode.

          Check: Prints the analysis result.
          DryRun: Prints the resolved result without modifying the `Cargo.toml` file.
          DryRun2: creates a `*.cargo-featalign.swap` file.
          Overwrite: Overwrites the original `Cargo.toml` file.

          [default: overwrite]
          [possible values: check, dry-run, dry-run2, overwrite]

      --indent-symbol <INDENT_SYMBOL>
          Use the given symbol for indentation

          [default: tab]
          [possible values: tab, whitespace]

      --indent-size <SIZE>
          The number of spaces used for indentation

          [default: 4]

      --workspace-only
          Determines whether to process only workspace members

      --default-std
          Determines whether to check default features.

          This option is useful when working in a no-std environment. This feature checks if you have set `default-features = false` while also having a `std = ["x/std"]` part to control it separately.

      --depth <NUM>
          Depth of the dependency tree to process.

          Use `-1` to process the entire tree.

          !! Running with this flag under a large project, even with 128 threads configured, is incredibly challenging.

          [default: 0]

      --sort
          Wether to sort the required features while aligning

      --verbose
          Verbose output

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Example

Preparation

cargo install cargo-featalign
git clone https://github.com/hack-ink/cargo-featalign.git
cd cargo-featalign

Only check the features of top-level workspace members

cargo featalign mock --features std,runtime-benchmarks,try-runtime --workspace-only --default-std --depth -1 --mode check | jq
{
  "mock-runtime 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock)": [
    {
      "id": "general-c 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/general/c)",
      "alias": "",
      "dependency-path": "/mock-runtime",
      "problem": "default-features-enabled"
    },
    {
      "id": "pallet-a 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/pallet/a)",
      "alias": "pallet-a",
      "dependency-path": "/mock-runtime",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    },
    {
      "id": "pallet-b 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/pallet/b)",
      "alias": "pallet-b",
      "dependency-path": "/mock-runtime",
      "problem": {
        "missing-features": [
          "runtime-benchmarks"
        ]
      }
    },
    {
      "id": "pallet-c 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/pallet/c)",
      "alias": "pallet-c",
      "dependency-path": "/mock-runtime",
      "problem": {
        "missing-features": [
          "try-runtime"
        ]
      }
    },
    {
      "id": "pallet-d 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/pallet/d)",
      "alias": "pallet-d",
      "dependency-path": "/mock-runtime",
      "problem": {
        "missing-features": [
          "runtime-benchmarks",
          "std",
          "try-runtime"
        ]
      }
    }
  ]
}

Check the features of workspace members recursively

cargo featalign mock --features std,runtime-benchmarks,try-runtime --workspace-only --default-std --depth -1 --mode check | jq
{
  "nested-a 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/nested/a)": [
    {
      "id": "nested-d 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/nested/d)",
      "alias": "",
      "dependency-path": "/mock-runtime/primitive-a/nested-a",
      "problem": "default-features-enabled"
    },
    {
      "id": "nested-b 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/nested/b)",
      "alias": "nested-b",
      "dependency-path": "/mock-runtime/primitive-a/nested-a",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "nested-b 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/nested/b)": [
    {
      "id": "nested-c 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/nested/c)",
      "alias": "nested-c",
      "dependency-path": "/mock-runtime/primitive-a/nested-a/nested-b",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "mock-runtime 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock)": [
    {
      "id": "general-c 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/general/c)",
      "alias": "",
      "dependency-path": "/mock-runtime",
      "problem": "default-features-enabled"
    },
    {
      "id": "pallet-a 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/pallet/a)",
      "alias": "pallet-a",
      "dependency-path": "/mock-runtime",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    },
    {
      "id": "pallet-b 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/pallet/b)",
      "alias": "pallet-b",
      "dependency-path": "/mock-runtime",
      "problem": {
        "missing-features": [
          "runtime-benchmarks"
        ]
      }
    },
    {
      "id": "pallet-c 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/pallet/c)",
      "alias": "pallet-c",
      "dependency-path": "/mock-runtime",
      "problem": {
        "missing-features": [
          "try-runtime"
        ]
      }
    },
    {
      "id": "pallet-d 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/pallet/d)",
      "alias": "pallet-d",
      "dependency-path": "/mock-runtime",
      "problem": {
        "missing-features": [
          "runtime-benchmarks",
          "std",
          "try-runtime"
        ]
      }
    }
  ]
}

Check the features of all dependencies recursively

!! Running this under a large project, even with 128 threads configured, is incredibly challenging.

cargo featalign . --features std --depth -1 --mode check | jq
{
  "semver 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "serde 1.0.176 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "serde",
      "dependency-path": "/cargo-featalign/cargo_metadata/semver",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "tracing-core 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "valuable 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "valuable",
      "dependency-path": "/cargo-featalign/color-eyre/color-spantrace/tracing-core",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    },
    {
      "id": "valuable 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "valuable",
      "dependency-path": "/cargo-featalign/color-eyre/tracing-error/tracing/tracing-core",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    },
    {
      "id": "valuable 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "valuable",
      "dependency-path": "/cargo-featalign/color-eyre/tracing-error/tracing-subscriber/tracing-core",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    },
    {
      "id": "valuable 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "valuable",
      "dependency-path": "/cargo-featalign/color-eyre/color-spantrace/tracing-error/tracing/tracing-core",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    },
    {
      "id": "valuable 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "valuable",
      "dependency-path": "/cargo-featalign/color-eyre/color-spantrace/tracing-error/tracing-subscriber/tracing-core",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "backtrace 0.3.68 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "libc 0.2.147 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "libc",
      "dependency-path": "/cargo-featalign/color-eyre/backtrace",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "rustix 0.38.4 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "libc 0.2.147 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "libc",
      "dependency-path": "/cargo-featalign/clap/clap_builder/anstream/is-terminal/rustix",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "errno 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "libc 0.2.147 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "libc",
      "dependency-path": "/cargo-featalign/clap/clap_builder/anstream/is-terminal/rustix/errno",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "time 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "libc 0.2.147 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "libc",
      "dependency-path": "/cargo-featalign/vergen/time",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    },
    {
      "id": "serde 1.0.176 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "serde",
      "dependency-path": "/cargo-featalign/vergen/time",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "ahash 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "once_cell 1.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "once_cell",
      "dependency-path": "/cargo-featalign/imara-diff/ahash",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "getrandom 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "libc 0.2.147 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "libc",
      "dependency-path": "/cargo-featalign/imara-diff/ahash/getrandom",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ],
  "clap 4.3.19 (registry+https://github.com/rust-lang/crates.io-index)": [
    {
      "id": "once_cell 1.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
      "alias": "once_cell",
      "dependency-path": "/cargo-featalign/clap",
      "problem": {
        "missing-features": [
          "std"
        ]
      }
    }
  ]
}

Dry run of aligning features for workspace members

cargo featalign mock --features std,runtime-benchmarks,try-runtime --workspace-only --default-std --depth -1 --mode dry-run
nested-a 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/nested/a)
@@ -17,4 +17,5 @@
 default = ["std"]
 std = [
    "nested-d/std",
+   "nested-b/std",
 ]

nested-b 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/nested/b)
@@ -14,4 +14,6 @@

 [features]
 default = ["std"]
-std     = []
+std     = [
+   "nested-c/std",
+]

mock-runtime 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock)
@@ -45,18 +45,24 @@
    "pallet-c/std",
    # "pallet-d/std",
    "primitive-a/std",
+   "pallet-a/std",
+   "pallet-d/std",
 ]

 runtime-benchmarks = [
    "pallet-a/runtime-benchmarks",
    # "pallet-b/runtime-benchmarks",
    "pallet-c/runtime-benchmarks",
+   "pallet-b/runtime-benchmarks",
+   "pallet-d/runtime-benchmarks",
    # "pallet-d/runtime-benchmarks",
 ]

 try-runtime = [
    "pallet-a/try-runtime",
    "pallet-b/try-runtime",
+   "pallet-c/try-runtime",
+   "pallet-d/try-runtime",
    # "pallet-c/try-runtime",
    # "pallet-d/try-runtime",
 ]

Dry run V2 of aligning features for workspace members

cargo featalign mock --features std,runtime-benchmarks,try-runtime --workspace-only --default-std --depth -1 --mode dry-run2
diff mock/Cargo.toml mock/Cargo.toml.cargo-featalign.swap

Sorting

cargo featalign mock --features std,runtime-benchmarks,try-runtime --workspace-only --default-std --depth -1 --mode dry-run --sort
@@ -16,5 +16,6 @@
 [features]
 default = ["std"]
 std = [
+   "nested-b/std",
    "nested-d/std",
 ]

nested-b 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock/nested/b)
@@ -14,4 +14,6 @@

 [features]
 default = ["std"]
-std     = []
+std     = [
+   "nested-c/std",
+]

mock-runtime 0.0.0 (path+file:///root/code/hack-ink/cargo-featalign/mock)
@@ -48,24 +48,34 @@
    "pallet-b/std",
    "pallet-c/std",
    # "pallet-d/std",
+   "pallet-a/std",
+   "pallet-d/std",
    "primitive-a/std",
 ]

 runtime-benchmarks = [
    "pallet-a/runtime-benchmarks",
    # "pallet-b/runtime-benchmarks",
+   "pallet-b/runtime-benchmarks",
    "pallet-c/runtime-benchmarks",
+   "pallet-d/runtime-benchmarks",
    # "pallet-d/runtime-benchmarks",
 ]

 try-runtime = [
    "pallet-a/try-runtime",
    "pallet-b/try-runtime",
+   "pallet-c/try-runtime",
+   "pallet-d/try-runtime",
    # "pallet-c/try-runtime",
    # "pallet-d/try-runtime",
 ]

-empty = []
+empty = [
+   "primitive-b/empty",
+   "primitive-c/empty",
+   "primitive-d/empty",
+]

 [workspace]
 resolver = "2"
Comments
  • Rename to tomlalign?

    Rename to tomlalign?

    Since some community members hope to use this for sorting their dependencies, the sorting logic can be reused and applied to other tables like [dependencies].

    opened by AurevoirXavier 3
  • Bump serde from 1.0.177 to 1.0.179

    Bump serde from 1.0.177 to 1.0.179

    Bumps serde from 1.0.177 to 1.0.179.

    Release notes

    Sourced from serde's releases.

    v1.0.179

    • Support serialization of tuple variants inside a flattened field (#2448, thanks @​Mingun)

    v1.0.178

    • Fix build error when using serde with "std" feature turned off and "unstable" feature turned on (#2541)
    Commits
    • c2b16bf Release 1.0.179
    • e7df537 Resolve doc_markdown clippy lint from PR 2448
    • 02c34e4 Resolve redundant_field_names clippy lint from PR 2448
    • 427c839 Merge pull request #2448 from Mingun/ser-flatten-enums
    • 48aa054 Release 1.0.178
    • 3616860 Delete broken symlink from precompiled derive sources
    • 861b0df Consistently list StdError under 'Re-exports' heading of rustdoc
    • 8b3d71a Merge pull request #2541 from dtolnay/de-core-error
    • ff5442c Add no-std unstable build in CI
    • 92d686f Fix serde::de::StdError in no-std unstable build
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 2
  • Bump serde from 1.0.175 to 1.0.176

    Bump serde from 1.0.175 to 1.0.176

    Bumps serde from 1.0.175 to 1.0.176.

    Release notes

    Sourced from serde's releases.

    v1.0.176

    • Allow tag field of an internally tagged enum to have same name as a field inside a skipped struct variant (#2266, thanks @​flisky)
    Commits
    • 85d5c1f Release 1.0.176
    • b789286 Merge pull request #2266 from flisky/master
    • a6a8a33 Add CI on macOS for the non-precompiled codepath
    • 78a11a2 Skip an extra trip through filesystem on the critical path
    • d2d7bad Improve error message on missing serde_derive exe
    • b978854 Eliminate parse_macro_input conflict in precompiled mode
    • 0fb672a Eliminate #[macro_use] from serde_derive
    • dd99136 Ungroup imports
    • 11677ad Merge pull request #2533 from dtolnay/test
    • 25a53f1 Move serde_test out to serde-rs/test
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 2
  • Bump serde_json from 1.0.103 to 1.0.104

    Bump serde_json from 1.0.103 to 1.0.104

    Bumps serde_json from 1.0.103 to 1.0.104.

    Release notes

    Sourced from serde_json's releases.

    v1.0.104

    Commits
    • ab08483 Release 1.0.104
    • f6cc4f3 Merge pull request #1045 from ZetaNumbers/value-ref-into-deserializer
    • 8e8db8c Implement IntoDeserializer for &Value
    • 8f90eac Delete inline attributes throughout test suite
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 2
  • Bump clap from 4.3.19 to 4.3.21

    Bump clap from 4.3.19 to 4.3.21

    Bumps clap from 4.3.19 to 4.3.21.

    Release notes

    Sourced from clap's releases.

    v4.3.21

    [4.3.21] - 2023-08-08

    Features

    • Expose TryMapValueParser so the type can be named

    v4.3.20

    [4.3.20] - 2023-08-08

    Features

    • Expose TryMapValueParser so the type can be named
    • Command::mut_args for modifying all arguments en masse
    Changelog

    Sourced from clap's changelog.

    [4.3.21] - 2023-08-08

    Features

    • Expose TryMapValueParser so the type can be named

    [4.3.20] - 2023-08-08

    Features

    • Command::mut_args for modifying all arguments en masse
    Commits
    • ee1388c chore: Release
    • 3904366 docs: Update changelog
    • 3156e1a Merge pull request #5066 from 9999years/export-trymapvalueparser
    • da19141 chore: Release
    • b96cbaf chore: Release
    • 174f12c docs: Update changelog
    • fe04b3c Merge pull request #5056 from ModProg/dynamic-completions-help
    • aa3f47c test(complete): Help for possible value
    • 65b9c2b test(complete): Helper for asserting dynamic completions
    • c86172e feat: Export builder::TryMapValueParser
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 1
  • Bump serde from 1.0.182 to 1.0.183

    Bump serde from 1.0.182 to 1.0.183

    Bumps serde from 1.0.182 to 1.0.183.

    Release notes

    Sourced from serde's releases.

    v1.0.183

    • Support deserializing Box<OsStr> with an equivalent representation as OsString (#2556, thanks @​DBLouis)
    Commits
    • 05a5b7e Release 1.0.183
    • 3bff326 Merge pull request #2555 from Mingun/field
    • aaadd93 Merge pull request #2556 from DBLouis/master
    • 9c864f0 Add forward impl for OsStr
    • 070cce0 Get rid of temporary variable
    • b58e8ba Replace if let Some(...) = ... to Option::map
    • ada50b0 ignore_variant variable is always None, let's take this into account
    • 5e313a7 Move generiс code out-of-function, create more specialized and simple code
    • 2a36d11 Introduce a dedicated function for generating Field enum
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 1
  • Bump regex from 1.9.1 to 1.9.3

    Bump regex from 1.9.1 to 1.9.3

    Bumps regex from 1.9.1 to 1.9.3.

    Changelog

    Sourced from regex's changelog.

    1.9.3 (2023-08-05)

    This is a patch release that fixes a bug where some searches could result in incorrect match offsets being reported. It is difficult to characterize the types of regexes susceptible to this bug. They generally involve patterns that contain no prefix or suffix literals, but have an inner literal along with a regex prefix that can conditionally match.

    Bug fixes:

    • [BUG #1060](rust-lang/regex#1060): Fix a bug with the reverse inner literal optimization reporting incorrect match offsets.

    1.9.2 (2023-08-05)

    This is a patch release that fixes another memory usage regression. This particular regression occurred only when using a RegexSet. In some cases, much more heap memory (by one or two orders of magnitude) was allocated than in versions prior to 1.9.0.

    Bug fixes:

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 1
  • Bump serde from 1.0.181 to 1.0.182

    Bump serde from 1.0.181 to 1.0.182

    Bumps serde from 1.0.181 to 1.0.182.

    Release notes

    Sourced from serde's releases.

    v1.0.182

    • Render field aliases in sorted order in error messages (#2458, thanks @​Mingun)
    • Support serde(default) on tuple structs (#2553, thanks @​Mingun)
    Commits
    • b6685cf Release 1.0.182
    • fc273c6 Resolve needless_return clippy lint in PR 2553
    • bd7b0e2 Touch up PR 2553
    • 7393169 Merge pull request #2553 from Mingun/default-on-tuples
    • 4d93e9f Keep deserialize aliases as a sorted set
    • da55ed7 Remove some clones of names of things
    • e3617e1 Update explanation of correct_aliases
    • 431636a Merge pull request #2458 from Mingun/identifier
    • 891ced5 Update test suite to nightly-2023-08-05
    • 5c33931 Allow #[serde(default)] on tuple structs
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 1
  • Bump serde from 1.0.180 to 1.0.181

    Bump serde from 1.0.180 to 1.0.181

    Bumps serde from 1.0.180 to 1.0.181.

    Release notes

    Sourced from serde's releases.

    v1.0.181

    • Make serde(alias) work in combination with flatten when using in-place deserialization (#2443, thanks @​Mingun)
    • Improve the representation of adjacently tagged enums in formats where enum tags are serialized by index, as opposed to by string name (#2505, #2496, thanks @​Baptistemontan)
    Commits
    • 57dc0ee Release 1.0.181
    • 5e102c4 Relocate private size_hint module
    • 4aa5422 Delete double reference when setting up adjacently tagged variant seed
    • ef4f860 Improve "expecting" message of adjacently tagged enum variant
    • 9bd52ec Inline AdjacentlyTaggedEnumVariant::new
    • 5cdd82d Remove Serializer from name of private type that is not a Serializer
    • 110bf10 Condense AdjacentlyTaggedEnummVariantVisitor implementation
    • 43035f6 Merge pull request #2505 from Baptistemontan/rework_adjacently_tagged_enum
    • 83b1a3d Merge pull request #2443 from Mingun/deserialize-in-place
    • 878110a Simplify code after dead code elimination
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 1
  • Bump serde from 1.0.177 to 1.0.180

    Bump serde from 1.0.177 to 1.0.180

    Bumps serde from 1.0.177 to 1.0.180.

    Release notes

    Sourced from serde's releases.

    v1.0.180

    • Update to 2018 edition

    v1.0.179

    • Support serialization of tuple variants inside a flattened field (#2448, thanks @​Mingun)

    v1.0.178

    • Fix build error when using serde with "std" feature turned off and "unstable" feature turned on (#2541)
    Commits
    • 033d05f Release 1.0.180
    • fe4e3fd Merge pull request #2547 from dtolnay/tombstone
    • 8a8a8a7 Delete tombstones of the __private module
    • 339dca8 Merge pull request #2546 from dtolnay/edition
    • 0d7349f Resolve ambiguous core import on rustc 1.64 through 1.71
    • 830528d Update to 2018 edition
    • ab90fbc Apply 'cargo fix --edition'
    • 3eec111 Delete support for compilers without crate::-based module system
    • 9388433 Rename 'try!' macro to 'tri!' in preparation for 2018 edition
    • ba12070 Merge pull request #2545 from dtolnay/up
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 1
  • Bump serde from 1.0.176 to 1.0.177

    Bump serde from 1.0.176 to 1.0.177

    Bumps serde from 1.0.176 to 1.0.177.

    Release notes

    Sourced from serde's releases.

    v1.0.177

    • Add serde(rename_all_fields = "...") attribute to apply a rename_all on every struct variant of an enum (#1695, thanks @​jplatte)
    • Improve diagnostics for attribute parse errors (#2536, thanks @​jplatte)
    Commits
    • 0676673 Release 1.0.177
    • 7a4335d Merge pull request #2536 from jplatte/jplatte/error-span
    • 31a0e73 Update error span for attribute / data kind mismatches
    • 74fe708 Ignore return_self_not_must_use pedantic clippy lint
    • e74925b Merge pull request #1695 from jplatte/rename_all_fields
    • 56be1c2 Pass RenameRule, RenameAllRules by value
    • 2f9bf4d Add #[serde(rename_all_fields = "foo")] attribute
    • ad94aed Merge pull request #2535 from dtolnay/baretrait
    • 30db83f Restore bare_trait_objects lint within serde_derive code
    • b0f7b00 Resolve manual_string_new pedantic clippy lint
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 1
Releases(v0.6.0)
Owner
Hack Ink
Hack Ink
A safe implementation of the secure remote password authentication and key-exchange protocol (SRP), SRP6a and legacy are as features available.

Secure Remote Password (SRP 6 / 6a) A safe implementation of the secure remote password authentication and key-exchange protocol (SRP version 6a). Ver

Sven Assmann 10 Nov 3, 2022
Onlyfans-type web service based on TOR with maximum privacy features.

onionfans Onlyfans-type web service based on TOR with maximum privacy features. Features "Vanishing" single-use feed CDN links Landing page No JavaScr

Dowland Aiello 8 Sep 14, 2022
CLI password manager with encryption: AES256, Salsa20 and Chacha20, with cross platform and exclusive features

Keep My House (CLI) CLI password manager with encryption: AES256, Salsa20 and Chacha20, with cross platform and exclusive features Features AES256 GCM

null 4 Sep 7, 2023
A cryptographically verifiable code review system for the cargo (Rust) package manager.

A cryptographically verifiable code review system for the cargo (Rust) package manager.

crev - Code REView system 1.8k Jan 2, 2023
✈️A private, authenticated, permissioned cargo registry

chartered a little dig at creating a private cargo repository with authenticated downloads, the plan is to have git connect to a git server we setup t

Jordan Doyle 121 Dec 26, 2022
Audit Cargo.lock files for dependencies with security vulnerabilities

RustSec Crates ?? ??️ ?? The RustSec Advisory Database is a repository of security advisories filed against Rust crates published via crates.io. The a

RustSec 1.2k Dec 30, 2022
Extends cargo to execute the given command on multiple crates - upstream is at

cargo-multi GitLab CI: master: develop: Travis: master: develop: Extends cargo to execute the given command on multiple crates. Inspired by git multi.

Cyril Plisko 6 Feb 27, 2022
A cargo subcommand for displaying when Rust dependencies are out of date

cargo-outdated Linux: A cargo subcommand for displaying when Rust dependencies are out of date About cargo-outdated is for displaying when dependencie

Kevin K. 911 Dec 30, 2022
A minimal esp-hal application template for use with cargo-generate

{{ project-name }} A minimalist template for use with cargo-generate to create no_std applications targeting Espressif's line of SoCs and modules. At

esp-rs 35 Dec 29, 2022
Formats output of Solana's cargo test-bpf/test-sbf command

solfmt Formats output of Solana's cargo test-bpf/test-sbf command. Installation cargo install solfmt Usage Run the your test command as usual (cargo t

Thorsten Lorenz 4 Dec 22, 2022
cargo-generate template for Criterion benchmarks

Criterion Benchmark Template This is a cargo-generate template for quickly creating benchmarks using the Criterion benchmarking framework. Usage $ car

Lily Mara 4 Jan 19, 2023
Release complex cargo-workspaces automatically with changelog generation, used by `gitoxide`

cargo smart-release Fearlessly release workspace crates and with beautiful semi-handcrafted changelogs. Key Features zero-configuration cargo smart-re

Sebastian Thiel 24 Oct 11, 2023
Ethereum key tool - Lightweight CLI tool to deal with ETH keys written in rust

ekt - Etherum Key Tool ekt is a lightweight tool to generate ethereum keys and addresses. Installation Either clone it and run it with cargo or instal

null 5 May 8, 2023
A fast tool to scan prototype pollution vulnerability written in Rust. 🦀

ppfuzz Prototype Pollution Fuzzer A fast tool to scan prototype pollution vulnerability written in Rust. ?? Installation Binary Source Dependencies Us

Dwi Siswanto 410 Dec 27, 2022
The Metaplex NFT-standard Swiss Army Knife tool.

Metaboss The Solana Metaplex NFT 'Swiss Army Knife' tool. Current supported features: Decode NFT mint account metadata Get a list of mint accounts for

Samuel Vanderwaal 576 Jan 6, 2023
A tool for secret-shared passphrases.

harpo harpo is a tool and library that provides the following functionality: It can generate a seed phrase. Given a seed phrase, it can generate any n

Thomas Locher 11 Jun 30, 2022
🔗 Tool for rebasing a chain of local git branches.

git-chain Tool for rebasing a chain of local git branches. Motivation Suppose you have branches, each depending on a parent branch (usually called "st

Alberto Leal 10 Jul 15, 2022
A command-line tool to export FoundationDB stored protocol buffers to ClickhouseDB

fdb-ch-proto-export A command-line tool to export FoundationDB stored Protocol buffers to ClickhouseDB. Installation N/A Usage fdb-ch [command] fdb-c

Enlay 7 May 26, 2022
CLI tool written in Rust which can be used to generate hashes

rustgenhash rustgenhash is a tool to generate hashes on the commandline from stdio. It can be used to generate single or multiple hashes for usage in

Volker Schwaberow 11 Dec 29, 2022