A Rust command that prettifies the ugly `cargo test` output into a beautiful one.

Overview

Cargo Pretty Test ✨

Testing Crates.io docs.rs

A Rust command-line tool that prettifies the ugly cargo test output into a beautiful output.

This crate can be also used as a library that fully parses the output from cargo test.

$ cargo pretty-test --workspace --no-fail-fast

Error details from `cargo test` if any ... (Omitted here)

Generated by cargo-pretty-test
├── (OK) cargo_pretty_test ... (4 tests in 0.16s: ✅ 4)
│   ├── (OK) tests/golden_master_test.rs ... (1 tests in 0.00s: ✅ 1)
│   │   └─ ✅ golden_master_test
│   ├── (OK) tests/mocking_project.rs ... (2 tests in 0.16s: ✅ 2)
│   │   ├─ ✅ snapshot_testing_for_parsed_output
│   │   └─ ✅ snapshot_testing_for_pretty_output
│   └── (OK) tests/parsing.rs ... (1 tests in 0.00s: ✅ 1)
│       └─ ✅ parse_stderr_stdout
├── (FAIL) integration ... (10 tests in 0.00s: ✅ 6; ❌ 2; 🔕 2)
│   ├── (FAIL) src/lib.rs ... (8 tests in 0.00s: ✅ 4; ❌ 2; 🔕 2)
│   │   ├── submod
│   │   │   ├─ 🔕 ignore
│   │   │   ├─ 🔕 ignore_without_reason
│   │   │   ├─ ✅ normal_test
│   │   │   └── panic
│   │   │       ├─ ❌ panicked
│   │   │       ├─ ✅ should_panic - should panic
│   │   │       ├─ ❌ should_panic_but_didnt - should panic
│   │   │       └─ ✅ should_panic_without_reanson - should panic
│   │   └─ ✅ works
│   ├── (OK) src/main.rs ... (1 tests in 0.00s: ✅ 1)
│   │   └─ ✅ from_main_rs
│   └── (OK) tests/parsing.rs ... (1 tests in 0.00s: ✅ 1)
│       └─ ✅ from_integration
└── (OK) Doc Tests ... (2 tests in 0.41s: ✅ 2)
    ├── (OK) cargo-pretty-test ... (1 tests in 0.20s: ✅ 1)
    │   └─ ✅ src/doc.rs - doc (line 3)
    └── (OK) integration ... (1 tests in 0.21s: ✅ 1)
        └─ ✅ tests/integration/src/lib.rs - doc (line 41)

Status: FAIL; total 16 tests in 0.57s: 12 passed; 2 failed; 2 ignored; 0 measured; 0 filtered out

More screenshots.

Usage

Install:

cargo install cargo-pretty-test

Run in your project:

cargo pretty-test

Note: all the arguments passed to cargo pretty-test are forwarded to cargo test.


Run in CI as a summary: demo

      - id: pretty-test
        name: Run cargo pretty-test
        run: |
          cargo install cargo-pretty-test
          cargo pretty-test --color=always
          echo '```text' >> $GITHUB_STEP_SUMMARY
          echo "$(cargo pretty-test --color=never)" >> $GITHUB_STEP_SUMMARY
          echo '```' >> $GITHUB_STEP_SUMMARY

Note: --color=always produces texts in color when running CI, and --color=never strips ANSI escapes before written to summary.

Credits

Comments
  • Missing doc tests

    Missing doc tests

    $ cargo pretty-test
    thread 'main' panicked at /home/josecelano/.cargo/registry/src/index.crates.io-6f17d22bba15001f/cargo-pretty-test-0.2.0/src/parsing.rs:430:5:
    assertion `left == right` failed: the parsed amount of running tests [265, 0, 96, 31] should equal to the number in stats.total [265, 0, 96, 0]
      left: [265, 0, 96, 31]
     right: [265, 0, 96, 0]
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    

    The whole cargo test output I'm using:

    cargo_test_ouput.txt

    opened by josecelano 8
  • `--color` will control whether the emitted texts should be colored in terminal

    `--color` will control whether the emitted texts should be colored in terminal

    Accepts one of always,never,auto. And support environment variable CARGO_TERM_COLOR from cargo

    e.g.

    --color=never

    --color never

    CARGO_TERM_COLOR=never

    opened by zjp-CN 7
  • Error: the amount of test runners from stderr should equal to that from stdout

    Error: the amount of test runners from stderr should equal to that from stdout

    I'm trying t use the command in a GitHub workflow but I get this error:

    test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
    
    thread 'main' panicked at 'assertion failed: `(left == right)`
      left: `0`,
     right: `2`: the amount of test runners from stderr should equal to that from stdout', /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/cargo-pretty-test-0.2.0/src/parsing.rs:41:5
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    Error: Process completed with exit code 101.
    

    The workflow: https://github.com/torrust/torrust-tracker/actions/runs/6299630094/job/17100743480

    The cargo test output:

    cargo_test_output.txt

    opened by josecelano 6
  • Run the `cargo test` command instead of capturing the input?

    Run the `cargo test` command instead of capturing the input?

    I copied the code from https://www.rustexplorer.com/b/i058g3 in the "first commit". I just realized that the solution here was different:

    fn main() {
        let output = Command::new("cargo").arg("test").output().unwrap();
        let text = String::from_utf8_lossy(&output.stdout);
    
        let re = Regex::new(r"(?m)^test \S+ \.\.\. \S+$").unwrap();
        println!(
            "{}",
            pretty_test(re.find_iter(&text).map(|m| m.as_str())).unwrap()
        );
    }
    

    Instead of capturing the input from the standard input, it runs the cargo test command. I think some people could use different commands, so I guess capturing the input is more generic.

    The current solution is not good because the input cannot be empty.

    opened by josecelano 4
  • Tricks of using cargo-pretty-test in CI

    Tricks of using cargo-pretty-test in CI

    • Install: cargo install cargo-pretty-test

    • Use --color=always to force print in color: e.g. cargo pretty-test --color=always (demo)

    • Use --color=never (to prevent escape chars) and $GITHUB_STEP_SUMMARY to print testing result in workflow summary (demo) Note: $GITHUB_STEP_SUMMARY will take the input as GFM (a markdown format), so you should put the result in text mode, like

      echo -n "<pre>" >> $GITHUB_STEP_SUMMARY
      echo -n "$(cargo pretty-test --color=never)" >> $GITHUB_STEP_SUMMARY
      echo -n "</pre>" >> $GITHUB_STEP_SUMMARY
      
      # or
      echo '```text' >> $GITHUB_STEP_SUMMARY
      echo "$(cargo pretty-test --color=never)" >> $GITHUB_STEP_SUMMARY
      echo '```' >> $GITHUB_STEP_SUMMARY
      

    documentation 
    opened by zjp-CN 3
  • feat: add/set no-color feature for testing

    feat: add/set no-color feature for testing

    fix https://github.com/josecelano/cargo-pretty-test/issues/13 and suppress https://github.com/josecelano/cargo-pretty-test/pull/14

    With this PR, you can use any of these commands to run tests:

    • cargo test --features no-color
    • cargo test -F no-color
    • cargo t
    • cargo test --all-features (which CI does)
    opened by zjp-CN 2
  • feat: show distinct types of testing in one tree

    feat: show distinct types of testing in one tree

    $ cargo r -q
    Generated by cargo-pretty-test
    ├── cargo_pretty_test
    │   ├── tests/golden_master_test.rs
    │   │   └─ ✅ golden_master_test
    │   ├── tests/mocking_project.rs
    │   │   ├─ ✅ snapshot_testing_for_parsed_output
    │   │   └─ ✅ snapshot_testing_for_pretty_output
    │   └── tests/parsing.rs
    │       └─ ✅ parse_stderr_stdout
    └── Doc
        └── cargo-pretty-test
            └─ ✅ src/doc.rs - doc (line 3)
    
    $ cargo r -q -- --workspace --no-fail-fast
    failures:
    
    ---- submod::panic::panicked stdout ----
    thread 'submod::panic::panicked' panicked at tests/integration/src/lib.rs:9:13:
    explicit panic
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    
    ---- submod::panic::should_panic_but_didnt stdout ----
    note: test did not panic as expected
    
    failures:
        submod::panic::panicked
        submod::panic::should_panic_but_didnt
    
    *************************************************************
    
    Generated by cargo-pretty-test
    ├── cargo_pretty_test
    │   ├── tests/golden_master_test.rs
    │   │   └─ ✅ golden_master_test
    │   ├── tests/mocking_project.rs
    │   │   ├─ ✅ snapshot_testing_for_parsed_output
    │   │   └─ ✅ snapshot_testing_for_pretty_output
    │   └── tests/parsing.rs
    │       └─ ✅ parse_stderr_stdout
    ├── integration
    │   ├── src/lib.rs
    │   │   ├── submod
    │   │   │   ├─ 🔕 ignore
    │   │   │   ├─ 🔕 ignore_without_reason
    │   │   │   ├─ ✅ normal_test
    │   │   │   └── panic
    │   │   │       ├─ ❌ panicked
    │   │   │       ├─ ✅ should_panic - should panic
    │   │   │       ├─ ❌ should_panic_but_didnt - should panic
    │   │   │       └─ ✅ should_panic_without_reanson - should panic
    │   │   └─ ✅ works
    │   ├── src/main.rs
    │   │   └─ ✅ from_main_rs
    │   └── tests/parsing.rs
    │       └─ ✅ from_integration
    └── Doc
        ├── cargo-pretty-test
        │   └─ ✅ src/doc.rs - doc (line 3)
        └── integration
            └─ ✅ tests/integration/src/lib.rs - doc (line 41)
    
    opened by zjp-CN 2
  • chore(deps): bump regex-lite from 0.1.0 to 0.1.2

    chore(deps): bump regex-lite from 0.1.0 to 0.1.2

    Bumps regex-lite from 0.1.0 to 0.1.2.

    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 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)
    dependencies rust 
    opened by dependabot[bot] 1
  • chore(deps): bump indexmap from 2.0.1 to 2.0.2

    chore(deps): bump indexmap from 2.0.1 to 2.0.2

    Bumps indexmap from 2.0.1 to 2.0.2.

    Changelog

    Sourced from indexmap's changelog.

    • 2.0.2

      • The hashbrown dependency has been updated to version 0.14.1 to complete the support for Rust 1.63.
    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 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)
    dependencies rust 
    opened by dependabot[bot] 1
  • bump to v0.2.4: better error handling especially in parsing by using Result

    bump to v0.2.4: better error handling especially in parsing by using Result

    close https://github.com/josecelano/cargo-pretty-test/issues/24

    (unfortunately no color)

    e.g. invalid argument

    ✗ cargo pretty-test --w
    Error from cargo-pretty-test:
    "" should contain `running (?P<amount>\d+) tests?` pattern
    
    Error from cargo test:
    error: unexpected argument '--w' found
    
      tip: a similar argument exists: '--workspace'
    
    Usage: cargo test --workspace [TESTNAME] [-- [args]...]
    
    For more information, try '--help'.
    

    e.g. error in source code

    ✗ cargo pretty-test a
    Error from cargo-pretty-test:
    "" should contain `running (?P<amount>\d+) tests?` pattern
    
    Error from cargo test:
       Compiling cargo-pretty-test v0.2.3 (/rust/tmp/urlo/pretty-test)
    error[E0308]: mismatched types
      --> tests/mocking_project.rs:33:29
       |
    33 |         Cache { raw_output, info }
       |                             ^^^^ expected `Vec<TestInfo<'_>>`, found `Result<Vec<TestInfo<'_>>, String>`
       |
       = note: expected struct `Vec<TestInfo<'static>>`
                    found enum `Result<Vec<TestInfo<'_>>, std::string::String>`
    
    For more information about this error, try `rustc --explain E0308`. error: could not compile `cargo-pretty-test` (test "mocking_project") due to previous error
    
    opened by zjp-CN 1
  • better error handling

    better error handling

    When parsing wrong or invalid arguments, forward raw output instead panicking.

    thread 'main' panicked at src/parsing.rs:413:5:
     should contain `running (?P<amount>\d+) tests?` pattern
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    
    opened by zjp-CN 1
  • chore(deps): bump regex-lite from 0.1.0 to 0.1.3

    chore(deps): bump regex-lite from 0.1.0 to 0.1.3

    Bumps regex-lite from 0.1.0 to 0.1.3.

    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 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)
    dependencies rust 
    opened by dependabot[bot] 0
  • chore(deps): bump insta from 1.33.0 to 1.34.0

    chore(deps): bump insta from 1.33.0 to 1.34.0

    Bumps insta from 1.33.0 to 1.34.0.

    Changelog

    Sourced from insta's changelog.

    1.34.0

    • Snapshots are now sorted in the UI on review. (#413)
    • Re-organized repository to move cargo-insta into a workspace. (#410)
    • Fixed handling of --manifest-path with regards to virtual workspaces. (#409)
    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 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)
    dependencies rust 
    opened by dependabot[bot] 0
  • Missing test in docs tests

    Missing test in docs tests

       Doc-tests torrust-serde-bencode
    
    running 5 tests
    test src/ser.rs - ser::to_string (line 390) ... ok
    test src/de.rs - de::from_str (line 347) ... ok
    test src/de.rs - de::from_bytes (line 386) ... ok
    test src/ser.rs - ser::to_bytes (line 353) ... ok
    test src/lib.rs - (line 6) ... ok
    
    test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.30s
    

    I get this error:

    Error from cargo-pretty-test:
    the parsed amount of running tests [19, 53, 5] should equal to the number in stats.total [19, 53, 4]
    

    It's not parsing one of the Doc-tests. I guess it's the last one.

    bug 
    opened by josecelano 0
  • Allow using `cargo-nextest`

    Allow using `cargo-nextest`

    cargo-nextest is faster. Maybe we can include a option to use it instead of cargo test. Besides cargo-nextest produces a XML report so parsing the report could be easier than parsing the output.

    • https://nexte.st/book/junit.html
    opened by josecelano 0
  • feat: reinterpret `-q` or `--quite` to show raw output from cargo test

    feat: reinterpret `-q` or `--quite` to show raw output from cargo test

    Ref: https://github.com/josecelano/cargo-pretty-test/issues/5

    By default, -q is not passed, meaning raw output is forwarded as cargo test is running. If -q is passed in, don't display raw output, show test tree directly.

    Note: this commit also makes --color default to always because not -q is the default, and we want forwarding looks pretty in color.

    Press Enter to clear the screen to show the test tree:

    https://github.com/josecelano/cargo-pretty-test/assets/25300418/a6f392e5-cd9e-4a17-a362-3a53e85f10c4


    Some questions:

    • Do we need this? / Do we need both the outputs from two CLIs?
      • Yes, because watching cargo test prints is fun and it's important to know the execution details in CI as well as unnecessary to run all test twice locally (cargo test + pretty-test)
      • No, why not run cargo test before this tool?
    • Do we need to stop befor viewing the output from pretty-test?
    opened by zjp-CN 4
  • Reinterpret arguments that are forwarded to `cargo test`

    Reinterpret arguments that are forwarded to `cargo test`

    • [x] -- --no-capture for test runners will be discarded because it messes up the output and hinders parsing
    • [x] --help will prepend help info from pretty-test
      expand to see cargo pretty-test --help
    • [x] #25
    opened by zjp-CN 0
Releases(v0.1.0)
Owner
Jose Celano
#rust #python #php #typescript #bitcoin #github-actions @Nautilus-Cyberneering @torrust
Jose Celano
A cargo plugin to shrink cargo's output

cargo single-line A simple cargo plugin that shrinks the visible cargo output to a single line (okay, in the best case scenario). In principle, the pl

Denis 5 Oct 30, 2022
More beautiful HTML reports for llvm-cov/cargo-llvm-cov

?? llvm-cov-pretty More beautiful HTML reports for llvm-cov (cargo-llvm-cov specifically). Dark theme support (switches automatically based on your br

Dominik Nakamura 13 Jun 26, 2023
Dead simple, memoized cargo subcommand to hoist cargo-built binaries into the current working directory, written in Rust.

cargo-hoist Dead simple cargo subcommand to hoist cargo-built binaries into scope. stable Install | User Docs | Crate Docs | Reference | Contributing

refcell.eth 6 Nov 9, 2023
A cargo subcommand that displays ghidra function output through the use of the rizin rz-ghidra project.

cargo-rz-ghidra A cargo subcommand that displays ghidra function output through the use of the rizin rz-ghidra project. Install cargo install --git ht

wcampbell 4 Nov 5, 2022
Coppers is a custom test harnass for Rust that measures the energy usage of your test suite.

Coppers Coppers is a test harness for Rust that can measure the evolution of power consumptions of a Rust program between different versions with the

Thijs Raymakers 175 Dec 4, 2022
A super simple /sbin/init for Linux which allows running one and only one program

Summary High-performance /sbin/init program for Linux This is designed to do literally nothing but accept binaries over the network and run them as a

null 19 Dec 4, 2023
Cargo-eval - A cargo plugin to quickly evaluate some Rust source code.

cargo eval A cargo plugin to quickly evaluate some Rust source code. Installation $ cargo install --git https://github.com/timClicks/cargo-eval.git Us

Tim McNamara 9 Dec 21, 2022
A beautiful, tiny traceback and logging library supporting #![no_std] rust.

breadcrumbs Breadcrumbs is a beautiful, tiny traceback and logging library for Rust that offers seamless integration with #![no_std], multi-threading

Michael 18 Nov 21, 2023
Cargo-about - 📜 Cargo plugin to generate list of all licenses for a crate 🦀

?? cargo-about Cargo plugin for generating a license listing for all dependencies of a crate See the book ?? for in-depth documentation. Please Note:

Embark 281 Jan 1, 2023
Cargo subcommand for running cargo without dev-dependencies.

cargo-no-dev-deps Cargo subcommand for running cargo without dev-dependencies. This is an extraction of the --no-dev-deps flag of cargo-hack to be use

Taiki Endo 5 Jan 12, 2023
:large_orange_diamond: Build beautiful terminal tables with automatic content wrapping

Comfy-table Comfy-table tries to provide utility for building beautiful tables, while being easy to use. Features: Dynamic arrangement of content to a

Arne Beer 525 Jan 8, 2023
Beautiful, minimal, opinionated CLI prompts inspired by the Clack NPM package

Effortlessly build beautiful command-line apps with Rust ?? ✨ Beautiful, minimal, opinionated CLI prompts inspired by the @clack/prompts npm package.

Alexander Fadeev 7 Jul 23, 2023
A beautiful and feature-packed Apple Music CLI

am A beautiful and feature-packed Apple Music CLI! Written in Rust. Installation Nix (recommended) This GitHub repository contains a flake. Add github

Ryan Cao 5 Sep 21, 2023
Make beautiful colored code listings in LaTeX with the power of TreeSitter.

What is this? This is a CLI tool that consumes TreeSitter's output and transforms it into LaTeX code that will produce syntax-colored code listing. If

Tomáš Lebeda 11 Sep 4, 2023
A silly program written in Rust to output nonsensical sentences in the command line interface.

A silly program written in Rust to output nonsensical sentences in the command line interface.

Rachael Ava 1 Dec 13, 2021
Putting the 1992 Putnam Test question A-6 into code.

Problem If you choose 4 points on a sphere and consider the tetrahedron with these points as it's vertices, what is the probability that the center of

Elias 3 Sep 17, 2023
🌌⭐cosmo is a wrapper for Git essentially, allowing you to compress multiple commands into one

❯ Cosmo Git tooling of the future New feature: Cosmo hooks! Click here for more info! ❯ ?? Features Config files (with defaults!) Fast Easy to use Fri

Jack 1 Oct 31, 2021
A crate that allows you to mostly-safely cast one type into another type.

A crate that allows you to mostly-safely cast one type into another type. This is mostly useful for generic functions, e.g. pub fn foo<S>(s: S) {

Bincode 3 Sep 23, 2023