cargo-bless 0.1.1

Modernize your Rust dependencies with blessed.rs + live intel
Documentation
[
  {
    "pattern": "chrono",
    "replacement": "time",
    "kind": "ModernAlternative",
    "reason": "Smaller footprint, faster compiles for UTC-only use",
    "source": "blessed.rs",
    "condition": "UTC-only usage"
  },
  {
    "pattern": "lazy_static",
    "replacement": "std::sync::LazyLock",
    "kind": "StdReplacement",
    "reason": "Stable since Rust 1.80 \u2014 zero extra dependencies",
    "source": "std docs"
  },
  {
    "pattern": "once_cell",
    "replacement": "std::sync::LazyLock / OnceLock",
    "kind": "StdReplacement",
    "reason": "LazyLock and OnceLock stable since Rust 1.80 \u2014 zero extra dependencies",
    "source": "std docs"
  },
  {
    "pattern": "structopt",
    "replacement": "clap v4 (derive)",
    "kind": "ModernAlternative",
    "reason": "Fully integrated and actively maintained",
    "source": "blessed.rs"
  },
  {
    "pattern": "actix-web",
    "replacement": "axum",
    "kind": "ModernAlternative",
    "reason": "Lightweight, Tokio-native, ergonomic",
    "source": "blessed.rs"
  },
  {
    "pattern": "iron",
    "replacement": "axum",
    "kind": "Unmaintained",
    "reason": "Iron is unmaintained \u2014 axum is the modern Tokio-native choice",
    "source": "blessed.rs"
  },
  {
    "pattern": "memmap",
    "replacement": "memmap2",
    "kind": "Unmaintained",
    "reason": "Original crate unmaintained \u2014 memmap2 is the maintained fork",
    "source": "RustSec"
  },
  {
    "pattern": "failure",
    "replacement": "anyhow + thiserror",
    "kind": "Unmaintained",
    "reason": "failure is deprecated and unmaintained \u2014 anyhow (app) + thiserror (lib) is the standard",
    "source": "blessed.rs"
  },
  {
    "pattern": "log",
    "replacement": "tracing",
    "kind": "ModernAlternative",
    "reason": "Structured, async-aware, span-based \u2014 the modern standard for observability",
    "source": "blessed.rs"
  },
  {
    "pattern": "reqwest+serde_json",
    "replacement": "reqwest with \"json\" feature",
    "kind": "FeatureOptimization",
    "reason": "Built-in deserialization, one fewer dependency",
    "source": "reqwest docs"
  },
  {
    "pattern": "tokio+async-std",
    "replacement": "tokio only",
    "kind": "ComboWin",
    "reason": "Dominant runtime ecosystem \u2014 no need for two runtimes",
    "source": "blessed.rs"
  },
  {
    "pattern": "env_logger",
    "replacement": "tracing-subscriber",
    "kind": "ModernAlternative",
    "reason": "Pairs with tracing \u2014 structured, filterable, async-aware logging",
    "source": "blessed.rs"
  },
  {
    "pattern": "log+env_logger",
    "replacement": "tracing + tracing-subscriber",
    "kind": "ComboWin",
    "reason": "Full modern observability stack \u2014 structured spans + subscriber",
    "source": "blessed.rs"
  },
  {
    "pattern": "warp",
    "replacement": "axum",
    "kind": "ModernAlternative",
    "reason": "axum is the actively maintained Tokio-native web framework",
    "source": "blessed.rs"
  },
  {
    "pattern": "rocket",
    "replacement": "axum",
    "kind": "ModernAlternative",
    "reason": "axum is lighter, Tokio-native, and the blessed.rs pick for new projects",
    "source": "blessed.rs"
  },
  {
    "pattern": "maplit",
    "replacement": "std::collections::HashMap::from / BTreeMap::from",
    "kind": "StdReplacement",
    "reason": "HashMap::from([...]) is stable since Rust 1.56 \u2014 zero extra dependencies",
    "source": "std docs"
  },
  {
    "pattern": "error-chain",
    "replacement": "anyhow + thiserror",
    "kind": "Unmaintained",
    "reason": "error-chain is in maintenance mode \u2014 anyhow (app errors) + thiserror (library errors) is the modern standard",
    "source": "blessed.rs"
  },
  {
    "pattern": "proc-macro-error",
    "replacement": "thiserror",
    "kind": "ModernAlternative",
    "reason": "thiserror handles proc-macro error reporting with less boilerplate and better DX",
    "source": "blessed.rs"
  },
  {
    "pattern": "derivative",
    "replacement": "derive_more",
    "kind": "Unmaintained",
    "reason": "derivative has been unmaintained since 2021 \u2014 derive_more is the actively maintained successor",
    "source": "crates.io"
  },
  {
    "pattern": "anyhow+error-chain",
    "replacement": "anyhow only (app) or thiserror (lib)",
    "kind": "ComboWin",
    "reason": "error-chain and anyhow solve the same problem \u2014 pick one pattern, not both",
    "source": "blessed.rs"
  },
  {
    "pattern": "bytes+try_from_bytes",
    "replacement": "bytes with built-in TryInto<&[u8]>",
    "kind": "FeatureOptimization",
    "reason": "bytes crate provides zero-copy slicing natively \u2014 try_from_bytes is redundant",
    "source": "bytes docs"
  },
  {
    "pattern": "num_cpus",
    "replacement": "std::thread::available_parallelism",
    "kind": "StdReplacement",
    "reason": "Stable since Rust 1.9 \u2014 zero extra dependencies for CPU count queries",
    "source": "std docs"
  },
  {
    "pattern": "rustc-serialize",
    "replacement": "serde",
    "kind": "Unmaintained",
    "reason": "rustc-serialize was removed from rustc in 1.0 and is abandoned \u2014 serde is the universal standard",
    "source": "blessed.rs"
  },
  {
    "pattern": "serde_derive",
    "replacement": "serde with \"derive\" feature",
    "kind": "FeatureOptimization",
    "reason": "serde_derive is a legacy split \u2014 serde's built-in derive feature provides the same macros",
    "source": "serde docs"
  },
  {
    "pattern": "crossbeam-utils",
    "replacement": "std::sync primitives or parking_lot",
    "kind": "ModernAlternative",
    "reason": "Many crossbeam-utils features are now in std (OnceLock, Mutex); parking_lot is lighter for remaining needs",
    "source": "blessed.rs"
  },
  {
    "pattern": "hyper+serde_json",
    "replacement": "axum with built-in JSON support",
    "kind": "ComboWin",
    "reason": "axum bundles serde_json integration natively \u2014 fewer deps, less boilerplate",
    "source": "blessed.rs"
  },
  {
    "pattern": "clap+clap_derive",
    "replacement": "clap with \"derive\" feature",
    "kind": "FeatureOptimization",
    "reason": "clap_derive is a legacy split \u2014 clap's built-in derive feature provides the same macros",
    "source": "clap docs"
  }
]