{"id":16760147,"url":"https://github.com/maulingmonkey/bugsalot","last_synced_at":"2025-07-18T16:08:23.722Z","repository":{"id":34969019,"uuid":"192993684","full_name":"MaulingMonkey/bugsalot","owner":"MaulingMonkey","description":"Rust macros for bug wrangling.","archived":false,"fork":false,"pushed_at":"2023-09-03T02:14:24.000Z","size":77,"stargazers_count":10,"open_issues_count":16,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-24T19:49:03.767Z","etag":null,"topics":["android","crate","debug","debugger","linux","macros","rust","wasm","windows"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MaulingMonkey.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-20T22:16:26.000Z","updated_at":"2024-11-18T10:57:01.000Z","dependencies_parsed_at":"2024-10-27T11:52:37.547Z","dependency_job_id":"73b87b99-a64b-46b0-b881-d88fdb43aaa3","html_url":"https://github.com/MaulingMonkey/bugsalot","commit_stats":{"total_commits":80,"total_committers":3,"mean_commits":"26.666666666666668","dds":"0.025000000000000022","last_synced_commit":"ba9984161b35b30eacd4525f98bb86ee21d08322"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/MaulingMonkey/bugsalot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaulingMonkey%2Fbugsalot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaulingMonkey%2Fbugsalot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaulingMonkey%2Fbugsalot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaulingMonkey%2Fbugsalot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MaulingMonkey","download_url":"https://codeload.github.com/MaulingMonkey/bugsalot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaulingMonkey%2Fbugsalot/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265791789,"owners_count":23829165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","crate","debug","debugger","linux","macros","rust","wasm","windows"],"created_at":"2024-10-13T04:22:31.903Z","updated_at":"2025-07-18T16:08:23.694Z","avatar_url":"https://github.com/MaulingMonkey.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# bugsalot\n\n\u003c!-- [![Build status](https://ci.appveyor.com/api/projects/status/nyvlrelifcyjc1l1?svg=true)](https://ci.appveyor.com/project/MaulingMonkey/bugsalot) --\u003e\n[![GitHub](https://img.shields.io/github/stars/MaulingMonkey/bugsalot.svg?label=GitHub\u0026style=social)](https://github.com/MaulingMonkey/bugsalot)\n[![unsafe: yes](https://img.shields.io/github/search/MaulingMonkey/bugsalot/unsafe%2bextension%3Ars?color=yellow\u0026label=unsafe)](https://github.com/MaulingMonkey/bugsalot/search?q=unsafe+extension%3Ars)\n[![rust: 1.36.0+](https://img.shields.io/badge/rust-1.36.0%2B-green.svg)](https://gist.github.com/MaulingMonkey/c81a9f18811079f19326dac4daa5a359#minimum-supported-rust-versions-msrv)\n[![License](https://img.shields.io/crates/l/bugsalot.svg)](https://github.com/MaulingMonkey/bugsalot)\n[![dependency status](https://deps.rs/repo/github/MaulingMonkey/bugsalot/status.svg)](https://deps.rs/repo/github/MaulingMonkey/bugsalot)\n\nThis crate provides macros and methods for bug wrangling.  Specifically, I want all the advantages of crashing (bug\nreports, ease of debugging, etc.) with none of the drawbacks (lost progress, pissed off gamers, etc).  Rust's error\nhandling mechanisms (`Try`, `?`, `Result`s, etc.) are great, but leave something to be desired when it comes to actual\nbugs.  Similarly, Rust's `panic!`, `.unwrap()`, `.expect()`, etc. are decent when it comes to giving context for bugs,\nbut less great for writing stable software.  This crate will attempt to bridge the gap.\n\n| Branch | Badges | Notes |\n| ------ | ------ | ----- |\n| [publish] | [![Crates.io](https://img.shields.io/crates/v/bugsalot.svg)](https://crates.io/crates/bugsalot) [![Docs](https://docs.rs/bugsalot/badge.svg)](https://docs.rs/bugsalot/) | Stable/published version\n| [master]  | [![Build Status](https://travis-ci.org/MaulingMonkey/bugsalot.svg)](https://travis-ci.org/MaulingMonkey/bugsalot) [![Open issues](https://img.shields.io/github/issues-raw/MaulingMonkey/bugsalot.svg)](https://github.com/MaulingMonkey/bugsalot/issues) | \"Completed\" stuff that hasn't been published.\n| wip/*     | | \"Work In Progress\" - incomplete, use at your own risk.\n| dead/*    | | Abandoned threads of work\n\n[publish]:      https://github.com/MaulingMonkey/bugsalot/tree/publish\n[master]:       https://github.com/MaulingMonkey/bugsalot/tree/master\n\n\n\n## Platforms\n\n| Platform  | Breakpoints | Debugger  | CI | Stable | Beta | Nightly |\n| --------- | ----------- | --------- | -- | ------ | ---- | ------- |\n| Windows   | ![Supported] | ![Supported] | ![Tests] | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/4) |\n| Android   | ![Supported] | ![Supported] | ![Build] | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/7) |\n| Linux     | ![Supported] | ![Supported] | ![Tests] | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/2) | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/3) | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/9) |\n| (Release) |              |              |          | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/1) |\n| FreeBSD   | ![Untested]  | ![Untested]  | ![No]    |\n| NetBSD    | ![Untested]  | ![Untested]  | ![No]    |\n| OS X      | ![Untested]  | ![Untested]  | ![Tests] | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/5) |\n| iOS       | ![Untested]  | ![Untested]  | ![Build] | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/6) |\n| WASM      | ![Supported] | ![N/A]       | ![Build] | ![Status](https://travis-matrix-badges.herokuapp.com/repos/MaulingMonkey/bugsalot/branches/wip-travis/8) |\n\n[Supported]:            https://img.shields.io/badge/-supported-green.svg\n[Untested]:             https://img.shields.io/badge/-untested-yellow.svg\n[N/A]:                  https://img.shields.io/badge/-N/A-red.svg\n[Tests]:                https://img.shields.io/badge/-tests-green.svg\n[Build]:                https://img.shields.io/badge/-build-yellow.svg\n[No]:                   https://img.shields.io/badge/-no-red.svg\n\n\n\n## Quick Start\n\nAdd **one** of the following bugsalot dependencies to your Cargo.toml:\n```toml\n[dependencies]\nbugsalot = \"0.2\"                                            # Or...\nbugsalot = { version = \"0.2\", features = [\"wasm-bindgen\"] } # If using: wasm-pack\nbugsalot = { version = \"0.2\", features = [\"stdweb\"]       } # If using: cargo web build\n```\n\nWrite your code (see [examples](examples) and [documentation](https://docs.rs/bugsalot/) for more code):\n```rust\nuse bugsalot::*;\n\nfn main() {\n    let _ = debugger::wait_until_attached(None); // Wait for a debugger to be attached\n\n    loop {\n        let a : Option\u003ci32\u003e = Some(42);\n        let b : Result\u003ci32, \u0026'static str\u003e = Err(\"Unavailable\");\n        let a = expect!(a, \"Unable to do something or other\", return);\n        let b = expect!(b, \"Unable to do something or other\", break);\n        // Debugger will pause on the above line, continuing will break out of the loop\n    }\n\n    expect!(true, \"Booleans work too\");\n}\n```\n\n## License\n\nLicensed under either of\n\n* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n\n\u003c!-- https://doc.rust-lang.org/1.4.0/complement-project-faq.html#why-dual-mit/asl2-license? --\u003e\n\u003c!-- https://rust-lang-nursery.github.io/api-guidelines/necessities.html#crate-and-its-dependencies-have-a-permissive-license-c-permissive --\u003e\n\u003c!-- https://choosealicense.com/licenses/apache-2.0/ --\u003e\n\u003c!-- https://choosealicense.com/licenses/mit/ --\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaulingmonkey%2Fbugsalot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaulingmonkey%2Fbugsalot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaulingmonkey%2Fbugsalot/lists"}