Repository: getsentry/symbolic
Pull request #266 (2020-09-17 13:14:50)

build: Reorganize the workspace
Moves the main `symbolic` library into a workspace member and reorganizes all
examples as workspace members. The main readme is temporarily duplicated until
the new version is published.



jan-auer: This is almost ready to merge. Pending tasks:

- [ ] Make the C-ABI a workspace member and update all build scripts
- [ ] Move all member crates either to a `crates/` folder or rename them to `symbolic-*`
- [ ] Generate the `symbolic` crate README with `cargo-readme`
jan-auer: Opening this for review. It's probably best to review commit by commit.

Patch:
diff --git a/.gitignore b/.gitignore
index 9e81fbcf..16f1f625 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,8 +4,7 @@
 # Rust
 target/
 **/*.rs.bk
-# Only ignore the library's lockfile, not for the CABI
-/Cargo.lock
+Cargo.lock
 
 # Python
 *.pyc
diff --git a/.gitmodules b/.gitmodules
index 57ae5d73..4738c99d 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,7 @@
 [submodule "minidump/third_party/breakpad"]
-	path = minidump/third_party/breakpad
+	path = symbolic-minidump/third_party/breakpad
 	url = https://github.com/getsentry/breakpad
 	shallow = true
 [submodule "minidump/third_party/lss"]
-	path = minidump/third_party/lss
+	path = symbolic-minidump/third_party/lss
 	url = https://github.com/getsentry/linux-syscall-support
diff --git a/Cargo.toml b/Cargo.toml
index 799bf20c..4a8b5af5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,80 +1,9 @@
-[package]
-name = "symbolic"
-version = "7.5.0"
-license = "MIT"
-authors = [
-    "Armin Ronacher <armin.ronacher@active-4.com>",
-    "Jan Michael Auer <mail@jauer.org>",
-]
-documentation = "https://docs.rs/symbolic"
-homepage = "https://github.com/getsentry/symbolic"
-repository = "https://github.com/getsentry/symbolic"
-readme = "README.md"
-description = """
-A library to symbolicate and process stack traces from native applications,
-minidumps, Unreal Engine 4, minified JavaScripts or ProGuard optimized Android apps.
-"""
-edition = "2018"
-autoexamples = true
-
-include = [
-    "/src/**/*.rs",
-    "/*.toml",
-    "/.gitmodules",
-    "/LICENSE",
-    "/README.md",
-]
-
-[package.metadata.docs.rs]
-all-features = true
-
 [workspace]
+members = [
+    "symbolic*",
+    "examples/*",
+]
 
-[features]
-default = ["debuginfo"]
-common-serde = ["symbolic-common/serde"]
-debuginfo = ["symbolic-debuginfo"]
-debuginfo-serde = ["debuginfo", "common-serde"]
-demangle = ["symbolic-demangle"]
-minidump = ["symbolic-minidump", "debuginfo"]
-minidump-serde = ["minidump", "debuginfo-serde", "symbolic-minidump/serde"]
-proguard = ["symbolic-proguard"]
-sourcemap = ["symbolic-sourcemap"]
-symcache = ["symbolic-symcache", "debuginfo"]
-unreal = ["symbolic-unreal"]
-unreal-serde = ["unreal", "common-serde", "symbolic-unreal/serde"]
-
-[dependencies]
-symbolic-common = { version = "7.5.0", path = "common" }
-symbolic-debuginfo = { version = "7.5.0", path = "debuginfo", optional = true }
-symbolic-demangle = { version = "7.5.0", path = "demangle", optional = true }
-symbolic-minidump = { version = "7.5.0", path = "minidump", optional = true }
-symbolic-proguard = { version = "7.5.0", path = "proguard", optional = true }
-symbolic-sourcemap = { version = "7.5.0", path = "sourcemap", optional = true }
-symbolic-symcache = { version = "7.5.0", path = "symcache", optional = true }
-symbolic-unreal = { version = "7.5.0", path = "unreal", optional = true }
-
-[dev-dependencies]
-clap = "2.33.0"
-failure = "0.1.7"
-walkdir = "2.3.1"
-
-[[example]]
-name = "addr2line"
-required-features = ["demangle"]
-
-[[example]]
-name = "dump_cfi"
-required-features = ["minidump"]
-
-[[example]]
-name = "minidump_stackwalk"
-required-features = ["minidump", "symcache", "demangle"]
-
-[[example]]
-name = "symcache_debug"
-required-features = ["symcache", "demangle"]
-
-[[example]]
-name = "unreal_engine_crash"
-required-features = ["unreal"]
+[profile.release]
+debug = true
+lto = true
diff --git a/Makefile b/Makefile
index deb07f27..e68d4887 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,6 @@ check: style lint
 
 clean:
 	cargo clean
-	cargo clean --manifest-path cabi/Cargo.toml
 	rm -rf .venv
 .PHONY: clean
 
@@ -36,7 +35,7 @@ test: test-rust test-python
 .PHONY: test
 
 test-rust:
-	cargo test --all --all-features
+	cargo test --workspace --all-features
 .PHONY: test-rust
 
 test-python: .venv/bin/python
@@ -52,8 +51,7 @@ style: style-rust style-python
 
 style-rust:
 	@rustup component add rustfmt --toolchain stable 2> /dev/null
-	cargo +stable fmt -- --check
-	cd cabi && cargo +stable fmt -- --check
+	cargo +stable fmt --all -- --check
 .PHONY: style-rust
 
 style-python: .venv/bin/python
@@ -67,7 +65,7 @@ lint: lint-rust lint-python
 
 lint-rust:
 	@rustup component add clippy --toolchain stable 2> /dev/null
-	cargo +stable clippy --all-features --all --tests --examples -- -D clippy::all
+	cargo +stable clippy --all-features --workspace --tests --examples -- -D clippy::all
 .PHONY: lint-rust
 
 lint-python: .venv/bin/python
@@ -82,8 +80,7 @@ format: format-rust format-python
 
 format-rust:
 	@rustup component add rustfmt --toolchain stable 2> /dev/null
-	cargo +stable fmt
-	cd cabi && cargo +stable fmt
+	cargo +stable fmt --all
 .PHONY: format-rust
 
 format-python: .venv/bin/python
diff --git a/README.md b/README.md
index 82b48e43..8e8c7b62 100644
--- a/README.md
+++ b/README.md
@@ -40,31 +40,7 @@ Symbolic provides the following functionality:
 
 ## Rust Usage
 
-Add `symbolic` as a dependency to your `Cargo.toml`. You will most likely want to activate some of
-the features:
-
-- **`debuginfo`** (default): Contains support for various object file formats and debugging
-  information. Currently, this comprises MachO and ELF (with DWARF debugging), PE and PDB, as well
-  as Breakpad symbols.
-- **`demangle`**: Demangling for Rust, C++, Swift and Objective C symbols. This feature requires a
-  C++14 compiler on the PATH.
-- **`minidump`**: Rust bindings for the Breakpad Minidump processor. Additionally, this includes
-  facilities to extract stack unwinding information (sometimes called CFI) from object files. This
-  feature requires a C++11 compiler on the PATH.
-- **`proguard`**: Processing of Proguard mapping files to look up mangled Java function paths.
-- **`sourcemap`**: Processing and expansion of JavaScript source maps, as well as lookups for
-  minified function names.
-- **`symcache`**: An optimized, platform-independent storage for common debugging information. This
-  allows blazing fast symbolication of instruction addresses to function names and file locations.
-- **`unreal`**: Processing of Unreal Engine 4 crash reports.
-
-There are also alternate versions for some of the above features that additionally add
-implementations for `serde::{Deserialize, Serialize}` on suitable types:
-
-- **`common-serde`**
-- **`debuginfo-serde`**
-- **`minidump-serde`**
-- **`unreal-serde`**
+The Rust crates are published to [Crates.io](https://crates.io/crates/symbolic) and documentation is available on [docs.rs](https://docs.rs/symbolic/latest/symbolic/).
 
 ## Python Usage
 
diff --git a/cabi/Cargo.lock b/cabi/Cargo.lock
deleted file mode 100644
index 55a5fddd..00000000
--- a/cabi/Cargo.lock
+++ /dev/null
@@ -1,1134 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-[[package]]
-name = "addr2line"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "456d75cbb82da1ad150c8a9d97285ffcd21c9931dcb11e995903e7d75141b38b"
-dependencies = [
- "gimli",
-]
-
-[[package]]
-name = "adler32"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
-
-[[package]]
-name = "aho-corasick"
-version = "0.7.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "anylog"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b3677680d7f74e87066850ba07976ad03296b6ec4e17bddef05564438ffb86e"
-dependencies = [
- "chrono",
- "lazy_static",
- "regex",
-]
-
-[[package]]
-name = "apple-crash-report-parser"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a4a2dcbf6f97f12fb3b01b2b46e7d110b0e5bb3da741a36182bc939be365b8e"
-dependencies = [
- "chrono",
- "lazy_static",
- "regex",
- "serde",
- "uuid",
-]
-
-[[package]]
-name = "autocfg"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
-
-[[package]]
-name = "backtrace"
-version = "0.3.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0df2f85c8a2abbe3b7d7e748052fdd9b76a0458fdeb16ad4223f5eca78c7c130"
-dependencies = [
- "addr2line",
- "cfg-if",
- "libc",
- "object",
- "rustc-demangle",
-]
-
-[[package]]
-name = "base64"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
-dependencies = [
- "byteorder",
-]
-
-[[package]]
-name = "bitflags"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-
-[[package]]
-name = "block-buffer"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
-dependencies = [
- "block-padding",
- "byte-tools",
- "byteorder",
- "generic-array",
-]
-
-[[package]]
-name = "block-padding"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
-dependencies = [
- "byte-tools",
-]
-
-[[package]]
-name = "byte-tools"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
-
-[[package]]
-name = "byteorder"
-version = "1.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
-
-[[package]]
-name = "bytes"
-version = "0.4.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
-dependencies = [
- "byteorder",
- "iovec",
-]
-
-[[package]]
-name = "bzip2"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
-dependencies = [
- "bzip2-sys",
- "libc",
-]
-
-[[package]]
-name = "bzip2-sys"
-version = "0.1.8+1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05305b41c5034ff0e93937ac64133d109b5a2660114ec45e9760bc6816d83038"
-dependencies = [
- "cc",
- "libc",
-]
-
-[[package]]
-name = "cc"
-version = "1.0.50"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
-dependencies = [
- "jobserver",
-]
-
-[[package]]
-name = "cfg-if"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-
-[[package]]
-name = "chrono"
-version = "0.4.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2"
-dependencies = [
- "num-integer",
- "num-traits",
- "serde",
- "time",
-]
-
-[[package]]
-name = "cloudabi"
-version = "0.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
-dependencies = [
- "bitflags",
-]
-
-[[package]]
-name = "cpp_demangle"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad49cad3673b9d586bc50cd92fdc0e9205ecd162d4206073d9774c4fe13a8fde"
-dependencies = [
- "cfg-if",
- "glob",
-]
-
-[[package]]
-name = "crc32fast"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "debugid"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36294832663d7747e17832f32492daedb65ae665d5ae1b369edabf52a2a92afc"
-dependencies = [
- "lazy_static",
- "regex",
- "serde",
- "uuid",
-]
-
-[[package]]
-name = "digest"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "dmsort"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfc94b97c995cfd2f02fc3972ae0f385cd441b50bb7610b59c7c779d5aec7444"
-
-[[package]]
-name = "elementtree"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19c5d32d0ab83734d2d7452047ef901c105991044b7b07da30fe82371a149a25"
-dependencies = [
- "string_cache",
- "xml-rs",
-]
-
-[[package]]
-name = "failure"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b"
-dependencies = [
- "backtrace",
- "failure_derive",
-]
-
-[[package]]
-name = "failure_derive"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
- "synstructure",
-]
-
-[[package]]
-name = "fake-simd"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
-
-[[package]]
-name = "fallible-iterator"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
-
-[[package]]
-name = "flate2"
-version = "1.0.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f"
-dependencies = [
- "cfg-if",
- "crc32fast",
- "libc",
- "miniz_oxide",
-]
-
-[[package]]
-name = "fnv"
-version = "1.0.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
-
-[[package]]
-name = "generic-array"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
-dependencies = [
- "typenum",
-]
-
-[[package]]
-name = "gimli"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c"
-dependencies = [
- "fallible-iterator",
- "stable_deref_trait",
-]
-
-[[package]]
-name = "glob"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
-
-[[package]]
-name = "goblin"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d20fd25aa456527ce4f544271ae4fea65d2eda4a6561ea56f39fb3ee4f7e3884"
-dependencies = [
- "log",
- "plain",
- "scroll",
-]
-
-[[package]]
-name = "idna"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
-dependencies = [
- "matches",
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "if_chain"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bac95d9aa0624e7b78187d6fb8ab012b41d9f6f54b1bcb61e61c4845f8357ec"
-
-[[package]]
-name = "iovec"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "itoa"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
-
-[[package]]
-name = "jobserver"
-version = "0.1.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-
-[[package]]
-name = "lazycell"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
-
-[[package]]
-name = "libc"
-version = "0.2.67"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018"
-
-[[package]]
-name = "lock_api"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b"
-dependencies = [
- "scopeguard",
-]
-
-[[package]]
-name = "log"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "maplit"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
-
-[[package]]
-name = "matches"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
-
-[[package]]
-name = "memchr"
-version = "2.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
-
-[[package]]
-name = "memmap"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
-dependencies = [
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "miniz_oxide"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5"
-dependencies = [
- "adler32",
-]
-
-[[package]]
-name = "msvc-demangler"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6584cf122f02fc0396420a116cd395a9a776ec4347dffe1c5119c3fcc917c060"
-dependencies = [
- "bitflags",
-]
-
-[[package]]
-name = "new_debug_unreachable"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
-
-[[package]]
-name = "num"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
-dependencies = [
- "num-bigint",
- "num-complex",
- "num-integer",
- "num-iter",
- "num-rational",
- "num-traits",
-]
-
-[[package]]
-name = "num-bigint"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
-dependencies = [
- "autocfg",
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-complex"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
-dependencies = [
- "autocfg",
- "num-traits",
-]
-
-[[package]]
-name = "num-integer"
-version = "0.1.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
-dependencies = [
- "autocfg",
- "num-traits",
-]
-
-[[package]]
-name = "num-iter"
-version = "0.1.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00"
-dependencies = [
- "autocfg",
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-rational"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3"
-dependencies = [
- "autocfg",
- "num-bigint",
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "object"
-version = "0.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cbca9424c482ee628fa549d9c812e2cd22f1180b9222c9200fdfa6eb31aecb2"
-
-[[package]]
-name = "opaque-debug"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
-
-[[package]]
-name = "parking_lot"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc"
-dependencies = [
- "lock_api",
- "parking_lot_core",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1"
-dependencies = [
- "cfg-if",
- "cloudabi",
- "libc",
- "redox_syscall",
- "smallvec",
- "winapi",
-]
-
-[[package]]
-name = "pdb"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b66be5fcea88b52962d3d6fcc5194f1d77666f5aca256926688743a8de1152e4"
-dependencies = [
- "fallible-iterator",
- "scroll",
- "uuid",
-]
-
-[[package]]
-name = "percent-encoding"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
-
-[[package]]
-name = "pest"
-version = "2.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
-dependencies = [
- "ucd-trie",
-]
-
-[[package]]
-name = "pest_derive"
-version = "2.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
-dependencies = [
- "pest",
- "pest_generator",
-]
-
-[[package]]
-name = "pest_generator"
-version = "2.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
-dependencies = [
- "pest",
- "pest_meta",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "pest_meta"
-version = "2.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
-dependencies = [
- "maplit",
- "pest",
- "sha-1",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
-dependencies = [
- "siphasher",
-]
-
-[[package]]
-name = "plain"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
-
-[[package]]
-name = "podio"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "780fb4b6698bbf9cf2444ea5d22411cef2953f0824b98f33cf454ec5615645bd"
-
-[[package]]
-name = "precomputed-hash"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435"
-dependencies = [
- "unicode-xid",
-]
-
-[[package]]
-name = "proguard"
-version = "4.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a0d8a8e23b9f03fb2d05f7f00431cb671514ab40384a310e41059b0d29e650f"
-dependencies = [
- "lazy_static",
- "uuid",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.1.56"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
-
-[[package]]
-name = "regex"
-version = "1.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8900ebc1363efa7ea1c399ccc32daed870b4002651e0bed86e72d501ebbe0048"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
- "thread_local",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.6.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
-
-[[package]]
-name = "rustc-demangle"
-version = "0.1.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
-
-[[package]]
-name = "rustc_version"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-dependencies = [
- "semver",
-]
-
-[[package]]
-name = "ryu"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
-
-[[package]]
-name = "scopeguard"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-
-[[package]]
-name = "scroll"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abb2332cb595d33f7edd5700f4cbf94892e680c7f0ae56adab58a35190b66cb1"
-dependencies = [
- "scroll_derive",
-]
-
-[[package]]
-name = "scroll_derive"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8584eea9b9ff42825b46faf46a8c24d2cff13ec152fa2a50df788b87c07ee28"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "semver"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-dependencies = [
- "semver-parser",
-]
-
-[[package]]
-name = "semver-parser"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-
-[[package]]
-name = "serde"
-version = "1.0.104"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.104"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9371ade75d4c2d6cb154141b9752cf3781ec9c05e0e5cf35060e1e70ee7b9c25"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "sha-1"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
-dependencies = [
- "block-buffer",
- "digest",
- "fake-simd",
- "opaque-debug",
-]
-
-[[package]]
-name = "sha1"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
-
-[[package]]
-name = "siphasher"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83da420ee8d1a89e640d0948c646c1c088758d3a3c538f943bfa97bdac17929d"
-
-[[package]]
-name = "smallvec"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc"
-
-[[package]]
-name = "sourcemap"
-version = "5.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fd57aa9e5cea41b4a3c26a61039fad5585e2154ffe057a2656540a21b03a2d2"
-dependencies = [
- "base64",
- "if_chain",
- "lazy_static",
- "regex",
- "rustc_version",
- "serde",
- "serde_json",
- "url",
-]
-
-[[package]]
-name = "stable_deref_trait"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
-
-[[package]]
-name = "string_cache"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2940c75beb4e3bf3a494cef919a747a2cb81e52571e212bfbd185074add7208a"
-dependencies = [
- "lazy_static",
- "new_debug_unreachable",
- "phf_shared",
- "precomputed-hash",
- "serde",
-]
-
-[[package]]
-name = "symbolic"
-version = "7.5.0"
-dependencies = [
- "symbolic-common",
- "symbolic-debuginfo",
- "symbolic-demangle",
- "symbolic-minidump",
- "symbolic-proguard",
- "symbolic-sourcemap",
- "symbolic-symcache",
- "symbolic-unreal",
-]
-
-[[package]]
-name = "symbolic-cabi"
-version = "7.5.0"
-dependencies = [
- "apple-crash-report-parser",
- "failure",
- "proguard",
- "serde_json",
- "symbolic",
-]
-
-[[package]]
-name = "symbolic-common"
-version = "7.5.0"
-dependencies = [
- "debugid",
- "failure",
- "memmap",
- "serde",
- "stable_deref_trait",
- "uuid",
-]
-
-[[package]]
-name = "symbolic-debuginfo"
-version = "7.5.0"
-dependencies = [
- "dmsort",
- "failure",
- "fallible-iterator",
- "flate2",
- "gimli",
- "goblin",
- "lazy_static",
- "lazycell",
- "parking_lot",
- "pdb",
- "pest",
- "pest_derive",
- "regex",
- "serde",
- "serde_json",
- "smallvec",
- "symbolic-common",
- "zip",
-]
-
-[[package]]
-name = "symbolic-demangle"
-version = "7.5.0"
-dependencies = [
- "cc",
- "cpp_demangle",
- "msvc-demangler",
- "rustc-demangle",
- "symbolic-common",
-]
-
-[[package]]
-name = "symbolic-minidump"
-version = "7.5.0"
-dependencies = [
- "cc",
- "failure",
- "lazy_static",
- "regex",
- "symbolic-common",
- "symbolic-debuginfo",
-]
-
-[[package]]
-name = "symbolic-proguard"
-version = "7.5.0"
-dependencies = [
- "proguard",
- "symbolic-common",
-]
-
-[[package]]
-name = "symbolic-sourcemap"
-version = "7.5.0"
-dependencies = [
- "failure",
- "sourcemap",
-]
-
-[[package]]
-name = "symbolic-symcache"
-version = "7.5.0"
-dependencies = [
- "dmsort",
- "failure",
- "fnv",
- "num",
- "symbolic-common",
- "symbolic-debuginfo",
-]
-
-[[package]]
-name = "symbolic-unreal"
-version = "7.5.0"
-dependencies = [
- "anylog",
- "bytes",
- "chrono",
- "elementtree",
- "failure",
- "flate2",
- "lazy_static",
- "regex",
- "scroll",
- "serde",
-]
-
-[[package]]
-name = "syn"
-version = "1.0.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-xid",
-]
-
-[[package]]
-name = "synstructure"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
- "unicode-xid",
-]
-
-[[package]]
-name = "thread_local"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
-dependencies = [
- "lazy_static",
-]
-
-[[package]]
-name = "time"
-version = "0.1.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
-dependencies = [
- "libc",
- "redox_syscall",
- "winapi",
-]
-
-[[package]]
-name = "typenum"
-version = "1.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
-
-[[package]]
-name = "ucd-trie"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
-
-[[package]]
-name = "unicode-bidi"
-version = "0.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
-dependencies = [
- "matches",
-]
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
-dependencies = [
- "smallvec",
-]
-
-[[package]]
-name = "unicode-xid"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
-
-[[package]]
-name = "url"
-version = "1.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
-dependencies = [
- "idna",
- "matches",
- "percent-encoding",
-]
-
-[[package]]
-name = "uuid"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11"
-dependencies = [
- "serde",
- "sha1",
-]
-
-[[package]]
-name = "winapi"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
-dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
-]
-
-[[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
-name = "xml-rs"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5"
-
-[[package]]
-name = "zip"
-version = "0.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6df134e83b8f0f8153a094c7b0fd79dfebe437f1d76e7715afa18ed95ebe2fd7"
-dependencies = [
- "bzip2",
- "crc32fast",
- "flate2",
- "podio",
- "time",
-]
diff --git a/examples/addr2line/Cargo.toml b/examples/addr2line/Cargo.toml
new file mode 100644
index 00000000..d11e5a52
--- /dev/null
+++ b/examples/addr2line/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "addr2line"
+version = "0.1.0"
+authors = ["Jan Michael Auer <mail@jauer.org>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+clap = "2.33.0"
+failure = "0.1.7"
+symbolic = { path = "../../symbolic", features = ["demangle"] }
diff --git a/examples/addr2line.rs b/examples/addr2line/src/main.rs
similarity index 100%
rename from examples/addr2line.rs
rename to examples/addr2line/src/main.rs
diff --git a/examples/dump_cfi/Cargo.toml b/examples/dump_cfi/Cargo.toml
new file mode 100644
index 00000000..e8689fe7
--- /dev/null
+++ b/examples/dump_cfi/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "dump_cfi"
+version = "0.1.0"
+authors = ["Jan Michael Auer <mail@jauer.org>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+clap = "2.33.0"
+failure = "0.1.7"
+symbolic = { path = "../../symbolic", features = ["minidump"] }
diff --git a/examples/dump_cfi.rs b/examples/dump_cfi/src/main.rs
similarity index 100%
rename from examples/dump_cfi.rs
rename to examples/dump_cfi/src/main.rs
diff --git a/examples/dump_sources/Cargo.toml b/examples/dump_sources/Cargo.toml
new file mode 100644
index 00000000..047ac75b
--- /dev/null
+++ b/examples/dump_sources/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "dump_sources"
+version = "0.1.0"
+authors = ["Jan Michael Auer <mail@jauer.org>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+clap = "2.33.0"
+failure = "0.1.7"
+symbolic = { path = "../../symbolic" }
diff --git a/examples/dump_sources.rs b/examples/dump_sources/src/main.rs
similarity index 100%
rename from examples/dump_sources.rs
rename to examples/dump_sources/src/main.rs
diff --git a/examples/minidump_stackwalk/Cargo.toml b/examples/minidump_stackwalk/Cargo.toml
new file mode 100644
index 00000000..1fd89e0e
--- /dev/null
+++ b/examples/minidump_stackwalk/Cargo.toml
@@ -0,0 +1,13 @@
+[package]
+name = "minidump_stackwalk"
+version = "0.1.0"
+authors = ["Jan Michael Auer <mail@jauer.org>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+clap = "2.33.0"
+failure = "0.1.7"
+symbolic = { path = "../../symbolic", features = ["minidump", "symcache", "demangle"] }
+walkdir = "2.3.1"
diff --git a/examples/minidump_stackwalk.rs b/examples/minidump_stackwalk/src/main.rs
similarity index 100%
rename from examples/minidump_stackwalk.rs
rename to examples/minidump_stackwalk/src/main.rs
diff --git a/examples/object_debug/Cargo.toml b/examples/object_debug/Cargo.toml
new file mode 100644
index 00000000..2880677f
--- /dev/null
+++ b/examples/object_debug/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "object_debug"
+version = "0.1.0"
+authors = ["Jan Michael Auer <mail@jauer.org>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+clap = "2.33.0"
+failure = "0.1.7"
+symbolic = { path = "../../symbolic" }
diff --git a/examples/object_debug.rs b/examples/object_debug/src/main.rs
similarity index 100%
rename from examples/object_debug.rs
rename to examples/object_debug/src/main.rs
diff --git a/examples/symcache_debug/Cargo.toml b/examples/symcache_debug/Cargo.toml
new file mode 100644
index 00000000..6bb737f7
--- /dev/null
+++ b/examples/symcache_debug/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "symcache_debug"
+version = "0.1.0"
+authors = ["Jan Michael Auer <mail@jauer.org>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+clap = "2.33.0"
+failure = "0.1.7"
+symbolic = { path = "../../symbolic", features = ["symcache", "demangle"] }
diff --git a/examples/symcache_debug.rs b/examples/symcache_debug/src/main.rs
similarity index 100%
rename from examples/symcache_debug.rs
rename to examples/symcache_debug/src/main.rs
diff --git a/examples/unreal_engine_crash/Cargo.toml b/examples/unreal_engine_crash/Cargo.toml
new file mode 100644
index 00000000..3e2c5c44
--- /dev/null
+++ b/examples/unreal_engine_crash/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "unreal_engine_crash"
+version = "0.1.0"
+authors = ["Jan Michael Auer <mail@jauer.org>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+clap = "2.33.0"
+failure = "0.1.7"
+symbolic = { path = "../../symbolic", features = ["unreal"] }
diff --git a/examples/unreal_engine_crash.rs b/examples/unreal_engine_crash/src/main.rs
similarity index 100%
rename from examples/unreal_engine_crash.rs
rename to examples/unreal_engine_crash/src/main.rs
diff --git a/py/setup.py b/py/setup.py
index 4300077b..817dac2e 100644
--- a/py/setup.py
+++ b/py/setup.py
@@ -19,8 +19,8 @@ with open("README") as f:
     readme = f.read()
 
 
-if os.path.isfile("../cabi/Cargo.toml"):
-    with open("../cabi/Cargo.toml") as f:
+if os.path.isfile("../symbolic-cabi/Cargo.toml"):
+    with open("../symbolic-cabi/Cargo.toml") as f:
         version = _version_re.search(f.read()).group(1)
 else:
     with open("version.txt") as f:
@@ -44,7 +44,7 @@ class CustomSDist(sdist):
 
 
 def build_native(spec):
-    cmd = ["cargo", "build"]
+    cmd = ["cargo", "build", "-p", "symbolic-cabi"]
     if not DEBUG_BUILD:
         cmd.append("--release")
         target = "release"
@@ -52,7 +52,7 @@ def build_native(spec):
         target = "debug"
 
     # Step 0: find rust sources
-    if not os.path.isfile("../cabi/Cargo.toml"):
+    if not os.path.isfile("../symbolic-cabi/Cargo.toml"):
         scratchpad = tempfile.mkdtemp()
 
         @atexit.register
@@ -64,9 +64,9 @@ def build_native(spec):
 
         zf = zipfile.ZipFile("rustsrc.zip")
         zf.extractall(scratchpad)
-        rust_path = scratchpad + "/rustsrc/cabi"
+        rust_path = scratchpad + "/rustsrc"
     else:
-        rust_path = "../cabi"
+        rust_path = ".."
         scratchpad = None
 
     # Step 1: build the rust library
@@ -78,8 +78,10 @@ def build_native(spec):
         rtld_flags.append("NODELETE")
     spec.add_cffi_module(
         module_path="symbolic._lowlevel",
-        dylib=lambda: build.find_dylib("symbolic", in_path="target/%s" % target),
-        header_filename=lambda: build.find_header("symbolic.h", in_path="include"),
+        dylib=lambda: build.find_dylib("symbolic_cabi", in_path="target/%s" % target),
+        header_filename=lambda: build.find_header(
+            "symbolic.h", in_path="symbolic-cabi/include"
+        ),
         rtld_flags=rtld_flags,
     )
 
diff --git a/run b/run
index 9eb6c46f..d61b0fb4 100755
--- a/run
+++ b/run
@@ -26,4 +26,4 @@ EXAMPLE="$1";
 shift
 
 set -x
-cargo run --quiet --all-features --example $EXAMPLE $FLAGS -- "$@"
+cargo run --quiet --package $EXAMPLE $FLAGS -- "$@"
diff --git a/scripts/bump-version b/scripts/bump-version
index b598fd3f..1ab8c6a9 100755
--- a/scripts/bump-version
+++ b/scripts/bump-version
@@ -12,6 +12,3 @@ echo "Bumping version: ${NEW_VERSION}"
 find . -name Cargo.toml -type f -exec sed -i '' -e "s/^version.*/version = \"$NEW_VERSION\"/" {} \;
 find . -name Cargo.toml -type f -exec sed -i '' -e "s/^\(symbolic.*version = \)\"[^\"]*\"/\\1\"$NEW_VERSION\"/" {} \;
 cargo update -p symbolic --precise "${NEW_VERSION}"
-
-cd cabi/
-cargo update -p symbolic --precise "${NEW_VERSION}"
diff --git a/scripts/cargo-publish-all b/scripts/cargo-publish-all
deleted file mode 100755
index 38e263cf..00000000
--- a/scripts/cargo-publish-all
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-import os
-import json
-import subprocess
-
-def sort_by_dep(unsorted):
-    sorted = []
-    unsorted = dict(unsorted)
-    while unsorted:
-        for node, edges in unsorted.items():
-            for edge in edges:
-                if edge in unsorted:
-                    break
-            else:
-                del unsorted[node]
-                sorted.append((node, edges))
-    return sorted
-
-
-def load_metadata():
-    return json.loads(subprocess.Popen(
-        'cargo metadata --no-deps --format-version=1',
-        shell=True, stdout=subprocess.PIPE).communicate()[0])
-
-
-def get_packages():
-    metadata = load_metadata()
-    graph = []
-    for pkg in metadata['packages']:
-        graph.append((
-            pkg['name'],
-            [x['name'] for x in pkg['dependencies'] if x['name'].startswith('symbolic-')]
-        ))
-    return sort_by_dep(graph)
-
-for pkg, deps in get_packages():
-    # this is a bit of a hack
-    if os.path.isdir(pkg):
-        subprocess.Popen(['cargo', 'publish'], cwd=pkg).wait()
-    else:
-        subprocess.Popen(['cargo', 'publish']).wait()
diff --git a/src/lib.rs b/src/lib.rs
deleted file mode 100644
index d6306102..00000000
--- a/src/lib.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-//! Symbolic works with symbols and debug info.
-//!
-//! This library implements various utilities to help Sentry
-//! symbolicate stacktraces.  It is built to also be used independently
-//! of Sentry and in parts.
-
-#![warn(missing_docs)]
-
-#[doc(inline)]
-pub use symbolic_common as common;
-#[doc(inline)]
-#[cfg(feature = "debuginfo")]
-pub use symbolic_debuginfo as debuginfo;
-#[doc(inline)]
-#[cfg(feature = "demangle")]
-pub use symbolic_demangle as demangle;
-#[doc(inline)]
-#[cfg(feature = "minidump")]
-pub use symbolic_minidump as minidump;
-#[doc(inline)]
-#[cfg(feature = "proguard")]
-#[deprecated = "use the `proguard` crate directly"]
-pub use symbolic_proguard as proguard;
-#[doc(inline)]
-#[cfg(feature = "sourcemap")]
-pub use symbolic_sourcemap as sourcemap;
-#[doc(inline)]
-#[cfg(feature = "symcache")]
-pub use symbolic_symcache as symcache;
-#[doc(inline)]
-#[cfg(feature = "unreal")]
-pub use symbolic_unreal as unreal;
diff --git a/cabi/Cargo.toml b/symbolic-cabi/Cargo.toml
similarity index 76%
rename from cabi/Cargo.toml
rename to symbolic-cabi/Cargo.toml
index 3771e95c..c8c17085 100644
--- a/cabi/Cargo.toml
+++ b/symbolic-cabi/Cargo.toml
@@ -14,20 +14,14 @@ traces from native applications, minidumps, minified JavaScripts or ProGuard
 optimized Android apps.
 """
 edition = "2018"
+publish = false
 
 [lib]
-name = "symbolic"
 crate-type = ["cdylib"]
 
-[workspace]
-
-[profile.release]
-debug = true
-lto = true
-
 [dependencies]
 serde_json = "1.0.40"
 failure = "0.1.5"
 apple-crash-report-parser = { version = "0.4.0", features = ["with_serde"] }
-symbolic = { version = "7.5.0", path = "..", features = ["debuginfo", "demangle", "minidump", "proguard", "sourcemap", "symcache", "unreal-serde"] }
+symbolic = { version = "7.5.0", path = "../symbolic", features = ["debuginfo", "demangle", "minidump", "proguard", "sourcemap", "symcache", "unreal-serde"] }
 proguard = { version = "4.0.1", features = ["uuid"] }
diff --git a/cabi/Makefile b/symbolic-cabi/Makefile
similarity index 91%
rename from cabi/Makefile
rename to symbolic-cabi/Makefile
index c24f88f1..346ea5c2 100644
--- a/cabi/Makefile
+++ b/symbolic-cabi/Makefile
@@ -31,4 +31,4 @@ include/symbolic.h: *.toml src/*.rs
 
 target/debug/c-tests/%: c-tests/%.c include/symbolic.h
 	@mkdir -p target/debug/c-tests
-	$(CC) -Iinclude -Ltarget/debug -lsymbolic $< -o $@
+	$(CC) -Iinclude -L../target/debug -lsymbolic_cabi $< -o $@
diff --git a/cabi/README.md b/symbolic-cabi/README.md
similarity index 96%
rename from cabi/README.md
rename to symbolic-cabi/README.md
index fcb79a8d..e7f735d3 100644
--- a/cabi/README.md
+++ b/symbolic-cabi/README.md
@@ -14,7 +14,7 @@ Building the dynamic library has the same requirements as building the `symbolic
 - A checkout of this repository and all its GIT submodules.
 
 To build, run `make release` in this directory. This creates a release build of the dynamic library
-in `cabi/target/release/libsymbolic.*`.
+in `target/release/libsymbolic.*`.
 
 ## Usage
 
@@ -41,7 +41,7 @@ int main() {
 In your application, point to the symbolic include directory and specify the symbolic library:
 
 ```bash
-$(CC) -Isymbolic/cabi/include -Lsymbolic/cabi/target/release -lsymbolic -o myprogram main.c
+$(CC) -Isymbolic/symbolic-cabi/include -Lsymbolic/target/release -lsymbolic_cabi -o myprogram main.c
 ```
 
 ## Development
diff --git a/cabi/c-tests/common.c b/symbolic-cabi/c-tests/common.c
similarity index 100%
rename from cabi/c-tests/common.c
rename to symbolic-cabi/c-tests/common.c
diff --git a/cabi/c-tests/demangle b/symbolic-cabi/c-tests/demangle
similarity index 100%
rename from cabi/c-tests/demangle
rename to symbolic-cabi/c-tests/demangle
diff --git a/cabi/c-tests/demangle.c b/symbolic-cabi/c-tests/demangle.c
similarity index 100%
rename from cabi/c-tests/demangle.c
rename to symbolic-cabi/c-tests/demangle.c
diff --git a/cabi/c-tests/object.c b/symbolic-cabi/c-tests/object.c
similarity index 100%
rename from cabi/c-tests/object.c
rename to symbolic-cabi/c-tests/object.c
diff --git a/cabi/cbindgen.toml b/symbolic-cabi/cbindgen.toml
similarity index 100%
rename from cabi/cbindgen.toml
rename to symbolic-cabi/cbindgen.toml
diff --git a/cabi/include/symbolic.h b/symbolic-cabi/include/symbolic.h
similarity index 99%
rename from cabi/include/symbolic.h
rename to symbolic-cabi/include/symbolic.h
index 33814783..59bc2711 100644
--- a/cabi/include/symbolic.h
+++ b/symbolic-cabi/include/symbolic.h
@@ -79,6 +79,7 @@ enum SymbolicErrorCode {
   SYMBOLIC_ERROR_CODE_APPLE_CRASH_REPORT_PARSE_ERROR_INVALID_INCIDENT_IDENTIFIER = 8002,
   SYMBOLIC_ERROR_CODE_APPLE_CRASH_REPORT_PARSE_ERROR_INVALID_REPORT_VERSION = 8003,
   SYMBOLIC_ERROR_CODE_APPLE_CRASH_REPORT_PARSE_ERROR_INVALID_TIMESTAMP = 8004,
+  SYMBOLIC_ERROR_CODE_APPLE_CRASH_REPORT_PARSE_ERROR_INVALID_IMAGE_IDENTIFIER = 8005,
 };
 typedef uint32_t SymbolicErrorCode;
 
diff --git a/cabi/src/common.rs b/symbolic-cabi/src/common.rs
similarity index 100%
rename from cabi/src/common.rs
rename to symbolic-cabi/src/common.rs
diff --git a/cabi/src/core.rs b/symbolic-cabi/src/core.rs
similarity index 98%
rename from cabi/src/core.rs
rename to symbolic-cabi/src/core.rs
index 0b1eadbc..d283a4f9 100644
--- a/cabi/src/core.rs
+++ b/symbolic-cabi/src/core.rs
@@ -218,11 +218,12 @@ pub enum SymbolicErrorCode {
     AppleCrashReportParseErrorInvalidIncidentIdentifier = 8002,
     AppleCrashReportParseErrorInvalidReportVersion = 8003,
     AppleCrashReportParseErrorInvalidTimestamp = 8004,
+    AppleCrashReportParseErrorInvalidImageIdentifier = 8005,
 }
 
 impl SymbolicErrorCode {
     /// This maps all errors that can possibly happen.
-    #[allow(clippy::cyclomatic_complexity)]
+    // #[allow(clippy::cyclomatic_complexity)]
     pub fn from_error(error: &Error) -> SymbolicErrorCode {
         for cause in error.iter_chain() {
             if cause.downcast_ref::<Panic>().is_some() {
@@ -388,6 +389,9 @@ impl SymbolicErrorCode {
                     ParseError::InvalidIncidentIdentifier(_) => {
                         SymbolicErrorCode::AppleCrashReportParseErrorInvalidIncidentIdentifier
                     }
+                    ParseError::InvalidImageIdentifier(_) => {
+                        SymbolicErrorCode::AppleCrashReportParseErrorInvalidImageIdentifier
+                    }
                     ParseError::InvalidReportVersion(_) => {
                         SymbolicErrorCode::AppleCrashReportParseErrorInvalidReportVersion
                     }
diff --git a/cabi/src/debuginfo.rs b/symbolic-cabi/src/debuginfo.rs
similarity index 100%
rename from cabi/src/debuginfo.rs
rename to symbolic-cabi/src/debuginfo.rs
diff --git a/cabi/src/demangle.rs b/symbolic-cabi/src/demangle.rs
similarity index 100%
rename from cabi/src/demangle.rs
rename to symbolic-cabi/src/demangle.rs
diff --git a/cabi/src/lib.rs b/symbolic-cabi/src/lib.rs
similarity index 79%
rename from cabi/src/lib.rs
rename to symbolic-cabi/src/lib.rs
index 519c4f19..7eb1f43f 100644
--- a/cabi/src/lib.rs
+++ b/symbolic-cabi/src/lib.rs
@@ -1,5 +1,6 @@
-//! Exposes a C-ABI for symbolic
-#![allow(clippy::cast_ptr_alignment)]
+//! Exposes a C-ABI for symbolic.
+
+#![allow(clippy::cast_ptr_alignment, clippy::missing_safety_doc)]
 
 #[macro_use]
 mod utils;
diff --git a/cabi/src/minidump.rs b/symbolic-cabi/src/minidump.rs
similarity index 100%
rename from cabi/src/minidump.rs
rename to symbolic-cabi/src/minidump.rs
diff --git a/cabi/src/proguard.rs b/symbolic-cabi/src/proguard.rs
similarity index 100%
rename from cabi/src/proguard.rs
rename to symbolic-cabi/src/proguard.rs
diff --git a/cabi/src/sourcemap.rs b/symbolic-cabi/src/sourcemap.rs
similarity index 100%
rename from cabi/src/sourcemap.rs
rename to symbolic-cabi/src/sourcemap.rs
diff --git a/cabi/src/symcache.rs b/symbolic-cabi/src/symcache.rs
similarity index 100%
rename from cabi/src/symcache.rs
rename to symbolic-cabi/src/symcache.rs
diff --git a/cabi/src/unreal.rs b/symbolic-cabi/src/unreal.rs
similarity index 100%
rename from cabi/src/unreal.rs
rename to symbolic-cabi/src/unreal.rs
diff --git a/cabi/src/utils.rs b/symbolic-cabi/src/utils.rs
similarity index 100%
rename from cabi/src/utils.rs
rename to symbolic-cabi/src/utils.rs
diff --git a/common/Cargo.toml b/symbolic-common/Cargo.toml
similarity index 90%
rename from common/Cargo.toml
rename to symbolic-common/Cargo.toml
index bec72a1a..06fdda02 100644
--- a/common/Cargo.toml
+++ b/symbolic-common/Cargo.toml
@@ -17,6 +17,9 @@ ProGuard optimized Android apps.
 """
 edition = "2018"
 
+[package.metadata.docs.rs]
+all-features = true
+
 [dependencies]
 debugid = "0.7.1"
 failure = "0.1.5"
@@ -26,7 +29,7 @@ serde_ = { package = "serde", version = "1.0.88", optional = true, features = ["
 uuid = "0.8.1"
 
 [dev-dependencies]
-symbolic-testutils = { path = "../testutils" }
+symbolic-testutils = { path = "../symbolic-testutils" }
 tempfile = "3.1.0"
 
 [features]
diff --git a/common/README.md b/symbolic-common/README.md
similarity index 100%
rename from common/README.md
rename to symbolic-common/README.md
diff --git a/common/src/byteview.rs b/symbolic-common/src/byteview.rs
similarity index 100%
rename from common/src/byteview.rs
rename to symbolic-common/src/byteview.rs
diff --git a/common/src/cell.rs b/symbolic-common/src/cell.rs
similarity index 100%
rename from common/src/cell.rs
rename to symbolic-common/src/cell.rs
diff --git a/common/src/fail.rs b/symbolic-common/src/fail.rs
similarity index 100%
rename from common/src/fail.rs
rename to symbolic-common/src/fail.rs
diff --git a/common/src/heuristics.rs b/symbolic-common/src/heuristics.rs
similarity index 100%
rename from common/src/heuristics.rs
rename to symbolic-common/src/heuristics.rs
diff --git a/common/src/lib.rs b/symbolic-common/src/lib.rs
similarity index 100%
rename from common/src/lib.rs
rename to symbolic-common/src/lib.rs
diff --git a/common/src/path.rs b/symbolic-common/src/path.rs
similarity index 100%
rename from common/src/path.rs
rename to symbolic-common/src/path.rs
diff --git a/common/src/types.rs b/symbolic-common/src/types.rs
similarity index 100%
rename from common/src/types.rs
rename to symbolic-common/src/types.rs
diff --git a/debuginfo/Cargo.toml b/symbolic-debuginfo/Cargo.toml
similarity index 85%
rename from debuginfo/Cargo.toml
rename to symbolic-debuginfo/Cargo.toml
index a8d79c3b..0ea3020d 100644
--- a/debuginfo/Cargo.toml
+++ b/symbolic-debuginfo/Cargo.toml
@@ -19,6 +19,9 @@ exclude = [
     "tests/**/*",
 ]
 
+[package.metadata.docs.rs]
+all-features = true
+
 [dependencies]
 dmsort = "1.0.0"
 failure = "0.1.5"
@@ -36,9 +39,9 @@ regex = "1.3.5"
 serde = { version = "1.0.94", features = ["derive"] }
 serde_json = "1.0.40"
 smallvec = "1.2.0"
-symbolic-common = { version = "7.5.0", path = "../common" }
+symbolic-common = { version = "7.5.0", path = "../symbolic-common" }
 zip = "0.5.2"
 
 [dev-dependencies]
 insta = "0.15.0"
-symbolic-testutils = { path = "../testutils" }
+symbolic-testutils = { path = "../symbolic-testutils" }
diff --git a/debuginfo/src/base.rs b/symbolic-debuginfo/src/base.rs
similarity index 100%
rename from debuginfo/src/base.rs
rename to symbolic-debuginfo/src/base.rs
diff --git a/debuginfo/src/breakpad.pest b/symbolic-debuginfo/src/breakpad.pest
similarity index 100%
rename from debuginfo/src/breakpad.pest
rename to symbolic-debuginfo/src/breakpad.pest
diff --git a/debuginfo/src/breakpad.rs b/symbolic-debuginfo/src/breakpad.rs
similarity index 100%
rename from debuginfo/src/breakpad.rs
rename to symbolic-debuginfo/src/breakpad.rs
diff --git a/debuginfo/src/dwarf.rs b/symbolic-debuginfo/src/dwarf.rs
similarity index 100%
rename from debuginfo/src/dwarf.rs
rename to symbolic-debuginfo/src/dwarf.rs
diff --git a/debuginfo/src/elf.rs b/symbolic-debuginfo/src/elf.rs
similarity index 100%
rename from debuginfo/src/elf.rs
rename to symbolic-debuginfo/src/elf.rs
diff --git a/debuginfo/src/lib.rs b/symbolic-debuginfo/src/lib.rs
similarity index 100%
rename from debuginfo/src/lib.rs
rename to symbolic-debuginfo/src/lib.rs
diff --git a/debuginfo/src/macho.rs b/symbolic-debuginfo/src/macho.rs
similarity index 100%
rename from debuginfo/src/macho.rs
rename to symbolic-debuginfo/src/macho.rs
diff --git a/debuginfo/src/object.rs b/symbolic-debuginfo/src/object.rs
similarity index 100%
rename from debuginfo/src/object.rs
rename to symbolic-debuginfo/src/object.rs
diff --git a/debuginfo/src/pdb.rs b/symbolic-debuginfo/src/pdb.rs
similarity index 100%
rename from debuginfo/src/pdb.rs
rename to symbolic-debuginfo/src/pdb.rs
diff --git a/debuginfo/src/pe.rs b/symbolic-debuginfo/src/pe.rs
similarity index 100%
rename from debuginfo/src/pe.rs
rename to symbolic-debuginfo/src/pe.rs
diff --git a/debuginfo/src/private.rs b/symbolic-debuginfo/src/private.rs
similarity index 100%
rename from debuginfo/src/private.rs
rename to symbolic-debuginfo/src/private.rs
diff --git a/debuginfo/src/sourcebundle.rs b/symbolic-debuginfo/src/sourcebundle.rs
similarity index 100%
rename from debuginfo/src/sourcebundle.rs
rename to symbolic-debuginfo/src/sourcebundle.rs
diff --git a/debuginfo/tests/fixtures/CppConsoleApp.exe b/symbolic-debuginfo/tests/fixtures/CppConsoleApp.exe
similarity index 100%
rename from debuginfo/tests/fixtures/CppConsoleApp.exe
rename to symbolic-debuginfo/tests/fixtures/CppConsoleApp.exe
diff --git a/debuginfo/tests/fixtures/CppConsoleApp.pdb b/symbolic-debuginfo/tests/fixtures/CppConsoleApp.pdb
similarity index 100%
rename from debuginfo/tests/fixtures/CppConsoleApp.pdb
rename to symbolic-debuginfo/tests/fixtures/CppConsoleApp.pdb
diff --git a/debuginfo/tests/fixtures/CppConsoleApp.pdb.sym b/symbolic-debuginfo/tests/fixtures/CppConsoleApp.pdb.sym
similarity index 100%
rename from debuginfo/tests/fixtures/CppConsoleApp.pdb.sym
rename to symbolic-debuginfo/tests/fixtures/CppConsoleApp.pdb.sym
diff --git a/debuginfo/tests/fixtures/crash.exe b/symbolic-debuginfo/tests/fixtures/crash.exe
similarity index 100%
rename from debuginfo/tests/fixtures/crash.exe
rename to symbolic-debuginfo/tests/fixtures/crash.exe
diff --git a/debuginfo/tests/fixtures/crash.pdb b/symbolic-debuginfo/tests/fixtures/crash.pdb
similarity index 100%
rename from debuginfo/tests/fixtures/crash.pdb
rename to symbolic-debuginfo/tests/fixtures/crash.pdb
diff --git a/debuginfo/tests/fixtures/crash.sym b/symbolic-debuginfo/tests/fixtures/crash.sym
similarity index 100%
rename from debuginfo/tests/fixtures/crash.sym
rename to symbolic-debuginfo/tests/fixtures/crash.sym
diff --git a/debuginfo/tests/fixtures/msvcrt.dll b/symbolic-debuginfo/tests/fixtures/msvcrt.dll
similarity index 100%
rename from debuginfo/tests/fixtures/msvcrt.dll
rename to symbolic-debuginfo/tests/fixtures/msvcrt.dll
diff --git a/debuginfo/tests/snapshots/test_objects__breakpad_files.snap b/symbolic-debuginfo/tests/snapshots/test_objects__breakpad_files.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__breakpad_files.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__breakpad_files.snap
diff --git a/debuginfo/tests/snapshots/test_objects__breakpad_functions.snap b/symbolic-debuginfo/tests/snapshots/test_objects__breakpad_functions.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__breakpad_functions.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__breakpad_functions.snap
diff --git a/debuginfo/tests/snapshots/test_objects__breakpad_symbols.snap b/symbolic-debuginfo/tests/snapshots/test_objects__breakpad_symbols.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__breakpad_symbols.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__breakpad_symbols.snap
diff --git a/debuginfo/tests/snapshots/test_objects__elf_files.snap b/symbolic-debuginfo/tests/snapshots/test_objects__elf_files.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__elf_files.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__elf_files.snap
diff --git a/debuginfo/tests/snapshots/test_objects__elf_functions.snap b/symbolic-debuginfo/tests/snapshots/test_objects__elf_functions.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__elf_functions.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__elf_functions.snap
diff --git a/debuginfo/tests/snapshots/test_objects__elf_symbols.snap b/symbolic-debuginfo/tests/snapshots/test_objects__elf_symbols.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__elf_symbols.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__elf_symbols.snap
diff --git a/debuginfo/tests/snapshots/test_objects__mach_files.snap b/symbolic-debuginfo/tests/snapshots/test_objects__mach_files.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__mach_files.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__mach_files.snap
diff --git a/debuginfo/tests/snapshots/test_objects__mach_functions.snap b/symbolic-debuginfo/tests/snapshots/test_objects__mach_functions.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__mach_functions.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__mach_functions.snap
diff --git a/debuginfo/tests/snapshots/test_objects__mach_symbols.snap b/symbolic-debuginfo/tests/snapshots/test_objects__mach_symbols.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__mach_symbols.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__mach_symbols.snap
diff --git a/debuginfo/tests/snapshots/test_objects__pdb_files.snap b/symbolic-debuginfo/tests/snapshots/test_objects__pdb_files.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__pdb_files.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__pdb_files.snap
diff --git a/debuginfo/tests/snapshots/test_objects__pdb_functions.snap b/symbolic-debuginfo/tests/snapshots/test_objects__pdb_functions.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__pdb_functions.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__pdb_functions.snap
diff --git a/debuginfo/tests/snapshots/test_objects__pdb_symbols.snap b/symbolic-debuginfo/tests/snapshots/test_objects__pdb_symbols.snap
similarity index 100%
rename from debuginfo/tests/snapshots/test_objects__pdb_symbols.snap
rename to symbolic-debuginfo/tests/snapshots/test_objects__pdb_symbols.snap
diff --git a/debuginfo/tests/test_objects.rs b/symbolic-debuginfo/tests/test_objects.rs
similarity index 100%
rename from debuginfo/tests/test_objects.rs
rename to symbolic-debuginfo/tests/test_objects.rs
diff --git a/demangle/Cargo.toml b/symbolic-demangle/Cargo.toml
similarity index 86%
rename from demangle/Cargo.toml
rename to symbolic-demangle/Cargo.toml
index 269e92cd..2cdb0129 100644
--- a/demangle/Cargo.toml
+++ b/symbolic-demangle/Cargo.toml
@@ -20,11 +20,14 @@ exclude = [
     "tests/**/*",
 ]
 
+[package.metadata.docs.rs]
+all-features = true
+
 [dependencies]
 cpp_demangle = "0.3.0"
 msvc-demangler = "0.8.0"
 rustc-demangle = "0.1.16"
-symbolic-common = { version = "7.5.0", path = "../common" }
+symbolic-common = { version = "7.5.0", path = "../symbolic-common" }
 
 [build-dependencies]
 cc = "1.0.50"
diff --git a/demangle/README.md b/symbolic-demangle/README.md
similarity index 100%
rename from demangle/README.md
rename to symbolic-demangle/README.md
diff --git a/demangle/build.rs b/symbolic-demangle/build.rs
similarity index 100%
rename from demangle/build.rs
rename to symbolic-demangle/build.rs
diff --git a/demangle/src/lib.rs b/symbolic-demangle/src/lib.rs
similarity index 100%
rename from demangle/src/lib.rs
rename to symbolic-demangle/src/lib.rs
diff --git a/demangle/src/swiftdemangle.cpp b/symbolic-demangle/src/swiftdemangle.cpp
similarity index 100%
rename from demangle/src/swiftdemangle.cpp
rename to symbolic-demangle/src/swiftdemangle.cpp
diff --git a/demangle/tests/test_cpp.rs b/symbolic-demangle/tests/test_cpp.rs
similarity index 100%
rename from demangle/tests/test_cpp.rs
rename to symbolic-demangle/tests/test_cpp.rs
diff --git a/demangle/tests/test_detection.rs b/symbolic-demangle/tests/test_detection.rs
similarity index 100%
rename from demangle/tests/test_detection.rs
rename to symbolic-demangle/tests/test_detection.rs
diff --git a/demangle/tests/test_msvc.rs b/symbolic-demangle/tests/test_msvc.rs
similarity index 100%
rename from demangle/tests/test_msvc.rs
rename to symbolic-demangle/tests/test_msvc.rs
diff --git a/demangle/tests/test_objcpp.rs b/symbolic-demangle/tests/test_objcpp.rs
similarity index 100%
rename from demangle/tests/test_objcpp.rs
rename to symbolic-demangle/tests/test_objcpp.rs
diff --git a/demangle/tests/test_swift.rs b/symbolic-demangle/tests/test_swift.rs
similarity index 100%
rename from demangle/tests/test_swift.rs
rename to symbolic-demangle/tests/test_swift.rs
diff --git a/demangle/tests/utils/mod.rs b/symbolic-demangle/tests/utils/mod.rs
similarity index 100%
rename from demangle/tests/utils/mod.rs
rename to symbolic-demangle/tests/utils/mod.rs
diff --git a/demangle/vendor/swift/1-arguments.patch b/symbolic-demangle/vendor/swift/1-arguments.patch
similarity index 100%
rename from demangle/vendor/swift/1-arguments.patch
rename to symbolic-demangle/vendor/swift/1-arguments.patch
diff --git a/demangle/vendor/swift/LICENSE.txt b/symbolic-demangle/vendor/swift/LICENSE.txt
similarity index 100%
rename from demangle/vendor/swift/LICENSE.txt
rename to symbolic-demangle/vendor/swift/LICENSE.txt
diff --git a/demangle/vendor/swift/LICENSE_LLVM.txt b/symbolic-demangle/vendor/swift/LICENSE_LLVM.txt
similarity index 100%
rename from demangle/vendor/swift/LICENSE_LLVM.txt
rename to symbolic-demangle/vendor/swift/LICENSE_LLVM.txt
diff --git a/demangle/vendor/swift/README.md b/symbolic-demangle/vendor/swift/README.md
similarity index 100%
rename from demangle/vendor/swift/README.md
rename to symbolic-demangle/vendor/swift/README.md
diff --git a/demangle/vendor/swift/include/llvm-c/DataTypes.h b/symbolic-demangle/vendor/swift/include/llvm-c/DataTypes.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm-c/DataTypes.h
rename to symbolic-demangle/vendor/swift/include/llvm-c/DataTypes.h
diff --git a/demangle/vendor/swift/include/llvm/ADT/None.h b/symbolic-demangle/vendor/swift/include/llvm/ADT/None.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/ADT/None.h
rename to symbolic-demangle/vendor/swift/include/llvm/ADT/None.h
diff --git a/demangle/vendor/swift/include/llvm/ADT/Optional.h b/symbolic-demangle/vendor/swift/include/llvm/ADT/Optional.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/ADT/Optional.h
rename to symbolic-demangle/vendor/swift/include/llvm/ADT/Optional.h
diff --git a/demangle/vendor/swift/include/llvm/ADT/STLExtras.h b/symbolic-demangle/vendor/swift/include/llvm/ADT/STLExtras.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/ADT/STLExtras.h
rename to symbolic-demangle/vendor/swift/include/llvm/ADT/STLExtras.h
diff --git a/demangle/vendor/swift/include/llvm/ADT/SmallVector.h b/symbolic-demangle/vendor/swift/include/llvm/ADT/SmallVector.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/ADT/SmallVector.h
rename to symbolic-demangle/vendor/swift/include/llvm/ADT/SmallVector.h
diff --git a/demangle/vendor/swift/include/llvm/ADT/StringRef.h b/symbolic-demangle/vendor/swift/include/llvm/ADT/StringRef.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/ADT/StringRef.h
rename to symbolic-demangle/vendor/swift/include/llvm/ADT/StringRef.h
diff --git a/demangle/vendor/swift/include/llvm/ADT/StringSwitch.h b/symbolic-demangle/vendor/swift/include/llvm/ADT/StringSwitch.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/ADT/StringSwitch.h
rename to symbolic-demangle/vendor/swift/include/llvm/ADT/StringSwitch.h
diff --git a/demangle/vendor/swift/include/llvm/ADT/iterator.h b/symbolic-demangle/vendor/swift/include/llvm/ADT/iterator.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/ADT/iterator.h
rename to symbolic-demangle/vendor/swift/include/llvm/ADT/iterator.h
diff --git a/demangle/vendor/swift/include/llvm/ADT/iterator_range.h b/symbolic-demangle/vendor/swift/include/llvm/ADT/iterator_range.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/ADT/iterator_range.h
rename to symbolic-demangle/vendor/swift/include/llvm/ADT/iterator_range.h
diff --git a/demangle/vendor/swift/include/llvm/Config/abi-breaking.h b/symbolic-demangle/vendor/swift/include/llvm/Config/abi-breaking.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Config/abi-breaking.h
rename to symbolic-demangle/vendor/swift/include/llvm/Config/abi-breaking.h
diff --git a/demangle/vendor/swift/include/llvm/Config/llvm-config.h b/symbolic-demangle/vendor/swift/include/llvm/Config/llvm-config.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Config/llvm-config.h
rename to symbolic-demangle/vendor/swift/include/llvm/Config/llvm-config.h
diff --git a/demangle/vendor/swift/include/llvm/Support/AlignOf.h b/symbolic-demangle/vendor/swift/include/llvm/Support/AlignOf.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/AlignOf.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/AlignOf.h
diff --git a/demangle/vendor/swift/include/llvm/Support/Casting.h b/symbolic-demangle/vendor/swift/include/llvm/Support/Casting.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/Casting.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/Casting.h
diff --git a/demangle/vendor/swift/include/llvm/Support/Compiler.h b/symbolic-demangle/vendor/swift/include/llvm/Support/Compiler.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/Compiler.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/Compiler.h
diff --git a/demangle/vendor/swift/include/llvm/Support/DataTypes.h b/symbolic-demangle/vendor/swift/include/llvm/Support/DataTypes.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/DataTypes.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/DataTypes.h
diff --git a/demangle/vendor/swift/include/llvm/Support/ErrorHandling.h b/symbolic-demangle/vendor/swift/include/llvm/Support/ErrorHandling.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/ErrorHandling.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/ErrorHandling.h
diff --git a/demangle/vendor/swift/include/llvm/Support/MathExtras.h b/symbolic-demangle/vendor/swift/include/llvm/Support/MathExtras.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/MathExtras.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/MathExtras.h
diff --git a/demangle/vendor/swift/include/llvm/Support/MemAlloc.h b/symbolic-demangle/vendor/swift/include/llvm/Support/MemAlloc.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/MemAlloc.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/MemAlloc.h
diff --git a/demangle/vendor/swift/include/llvm/Support/SwapByteOrder.h b/symbolic-demangle/vendor/swift/include/llvm/Support/SwapByteOrder.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/SwapByteOrder.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/SwapByteOrder.h
diff --git a/demangle/vendor/swift/include/llvm/Support/raw_ostream.h b/symbolic-demangle/vendor/swift/include/llvm/Support/raw_ostream.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/raw_ostream.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/raw_ostream.h
diff --git a/demangle/vendor/swift/include/llvm/Support/type_traits.h b/symbolic-demangle/vendor/swift/include/llvm/Support/type_traits.h
similarity index 100%
rename from demangle/vendor/swift/include/llvm/Support/type_traits.h
rename to symbolic-demangle/vendor/swift/include/llvm/Support/type_traits.h
diff --git a/demangle/vendor/swift/include/swift/AST/Ownership.h b/symbolic-demangle/vendor/swift/include/swift/AST/Ownership.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/AST/Ownership.h
rename to symbolic-demangle/vendor/swift/include/swift/AST/Ownership.h
diff --git a/demangle/vendor/swift/include/swift/AST/ReferenceStorage.def b/symbolic-demangle/vendor/swift/include/swift/AST/ReferenceStorage.def
similarity index 100%
rename from demangle/vendor/swift/include/swift/AST/ReferenceStorage.def
rename to symbolic-demangle/vendor/swift/include/swift/AST/ReferenceStorage.def
diff --git a/demangle/vendor/swift/include/swift/Basic/InlineBitfield.h b/symbolic-demangle/vendor/swift/include/swift/Basic/InlineBitfield.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Basic/InlineBitfield.h
rename to symbolic-demangle/vendor/swift/include/swift/Basic/InlineBitfield.h
diff --git a/demangle/vendor/swift/include/swift/Basic/LLVM.h b/symbolic-demangle/vendor/swift/include/swift/Basic/LLVM.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Basic/LLVM.h
rename to symbolic-demangle/vendor/swift/include/swift/Basic/LLVM.h
diff --git a/demangle/vendor/swift/include/swift/Basic/STLExtras.h b/symbolic-demangle/vendor/swift/include/swift/Basic/STLExtras.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Basic/STLExtras.h
rename to symbolic-demangle/vendor/swift/include/swift/Basic/STLExtras.h
diff --git a/demangle/vendor/swift/include/swift/Demangling/Demangle.h b/symbolic-demangle/vendor/swift/include/swift/Demangling/Demangle.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Demangling/Demangle.h
rename to symbolic-demangle/vendor/swift/include/swift/Demangling/Demangle.h
diff --git a/demangle/vendor/swift/include/swift/Demangling/DemangleNodes.def b/symbolic-demangle/vendor/swift/include/swift/Demangling/DemangleNodes.def
similarity index 100%
rename from demangle/vendor/swift/include/swift/Demangling/DemangleNodes.def
rename to symbolic-demangle/vendor/swift/include/swift/Demangling/DemangleNodes.def
diff --git a/demangle/vendor/swift/include/swift/Demangling/Demangler.h b/symbolic-demangle/vendor/swift/include/swift/Demangling/Demangler.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Demangling/Demangler.h
rename to symbolic-demangle/vendor/swift/include/swift/Demangling/Demangler.h
diff --git a/demangle/vendor/swift/include/swift/Demangling/ManglingMacros.h b/symbolic-demangle/vendor/swift/include/swift/Demangling/ManglingMacros.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Demangling/ManglingMacros.h
rename to symbolic-demangle/vendor/swift/include/swift/Demangling/ManglingMacros.h
diff --git a/demangle/vendor/swift/include/swift/Demangling/ManglingUtils.h b/symbolic-demangle/vendor/swift/include/swift/Demangling/ManglingUtils.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Demangling/ManglingUtils.h
rename to symbolic-demangle/vendor/swift/include/swift/Demangling/ManglingUtils.h
diff --git a/demangle/vendor/swift/include/swift/Demangling/Punycode.h b/symbolic-demangle/vendor/swift/include/swift/Demangling/Punycode.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Demangling/Punycode.h
rename to symbolic-demangle/vendor/swift/include/swift/Demangling/Punycode.h
diff --git a/demangle/vendor/swift/include/swift/Demangling/StandardTypesMangling.def b/symbolic-demangle/vendor/swift/include/swift/Demangling/StandardTypesMangling.def
similarity index 100%
rename from demangle/vendor/swift/include/swift/Demangling/StandardTypesMangling.def
rename to symbolic-demangle/vendor/swift/include/swift/Demangling/StandardTypesMangling.def
diff --git a/demangle/vendor/swift/include/swift/Demangling/ValueWitnessMangling.def b/symbolic-demangle/vendor/swift/include/swift/Demangling/ValueWitnessMangling.def
similarity index 100%
rename from demangle/vendor/swift/include/swift/Demangling/ValueWitnessMangling.def
rename to symbolic-demangle/vendor/swift/include/swift/Demangling/ValueWitnessMangling.def
diff --git a/demangle/vendor/swift/include/swift/Runtime/BackDeployment.h b/symbolic-demangle/vendor/swift/include/swift/Runtime/BackDeployment.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Runtime/BackDeployment.h
rename to symbolic-demangle/vendor/swift/include/swift/Runtime/BackDeployment.h
diff --git a/demangle/vendor/swift/include/swift/Runtime/CMakeConfig.h b/symbolic-demangle/vendor/swift/include/swift/Runtime/CMakeConfig.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Runtime/CMakeConfig.h
rename to symbolic-demangle/vendor/swift/include/swift/Runtime/CMakeConfig.h
diff --git a/demangle/vendor/swift/include/swift/Runtime/Config.h b/symbolic-demangle/vendor/swift/include/swift/Runtime/Config.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Runtime/Config.h
rename to symbolic-demangle/vendor/swift/include/swift/Runtime/Config.h
diff --git a/demangle/vendor/swift/include/swift/Strings.h b/symbolic-demangle/vendor/swift/include/swift/Strings.h
similarity index 100%
rename from demangle/vendor/swift/include/swift/Strings.h
rename to symbolic-demangle/vendor/swift/include/swift/Strings.h
diff --git a/demangle/vendor/swift/lib/Demangling/CMakeLists.txt b/symbolic-demangle/vendor/swift/lib/Demangling/CMakeLists.txt
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/CMakeLists.txt
rename to symbolic-demangle/vendor/swift/lib/Demangling/CMakeLists.txt
diff --git a/demangle/vendor/swift/lib/Demangling/Context.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/Context.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/Context.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/Context.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/Demangler.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/Demangler.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/Demangler.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/Demangler.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/ManglingUtils.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/ManglingUtils.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/ManglingUtils.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/ManglingUtils.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/NodeDumper.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/NodeDumper.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/NodeDumper.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/NodeDumper.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/NodePrinter.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/NodePrinter.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/NodePrinter.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/NodePrinter.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/OldDemangler.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/OldDemangler.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/OldDemangler.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/OldDemangler.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/OldRemangler.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/OldRemangler.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/OldRemangler.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/OldRemangler.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/Punycode.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/Punycode.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/Punycode.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/Punycode.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/Remangler.cpp b/symbolic-demangle/vendor/swift/lib/Demangling/Remangler.cpp
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/Remangler.cpp
rename to symbolic-demangle/vendor/swift/lib/Demangling/Remangler.cpp
diff --git a/demangle/vendor/swift/lib/Demangling/RemanglerBase.h b/symbolic-demangle/vendor/swift/lib/Demangling/RemanglerBase.h
similarity index 100%
rename from demangle/vendor/swift/lib/Demangling/RemanglerBase.h
rename to symbolic-demangle/vendor/swift/lib/Demangling/RemanglerBase.h
diff --git a/demangle/vendor/swift/stdlib/public/SwiftShims/Visibility.h b/symbolic-demangle/vendor/swift/stdlib/public/SwiftShims/Visibility.h
similarity index 100%
rename from demangle/vendor/swift/stdlib/public/SwiftShims/Visibility.h
rename to symbolic-demangle/vendor/swift/stdlib/public/SwiftShims/Visibility.h
diff --git a/demangle/vendor/swift/update.py b/symbolic-demangle/vendor/swift/update.py
similarity index 100%
rename from demangle/vendor/swift/update.py
rename to symbolic-demangle/vendor/swift/update.py
diff --git a/minidump/Cargo.toml b/symbolic-minidump/Cargo.toml
similarity index 78%
rename from minidump/Cargo.toml
rename to symbolic-minidump/Cargo.toml
index 2a7706b7..9be44855 100644
--- a/minidump/Cargo.toml
+++ b/symbolic-minidump/Cargo.toml
@@ -26,17 +26,20 @@ include = [
     "/Cargo.toml",
 ]
 
+[package.metadata.docs.rs]
+all-features = true
+
 [dependencies]
 failure = "0.1.5"
 lazy_static = "1.4.0"
 regex = "1.3.5"
 serde = { version = "1.0.94", optional = true }
-symbolic-common = { version = "7.5.0", path = "../common" }
-symbolic-debuginfo = { version = "7.5.0", path = "../debuginfo" }
+symbolic-common = { version = "7.5.0", path = "../symbolic-common" }
+symbolic-debuginfo = { version = "7.5.0", path = "../symbolic-debuginfo" }
 
 [build-dependencies]
 cc = { version = "1.0.50", features = ["parallel"] }
 
 [dev-dependencies]
 insta = "0.15.0"
-symbolic-testutils = { path = "../testutils" }
+symbolic-testutils = { path = "../symbolic-testutils" }
diff --git a/minidump/build.rs b/symbolic-minidump/build.rs
similarity index 100%
rename from minidump/build.rs
rename to symbolic-minidump/build.rs
diff --git a/minidump/cpp/c_mapping.h b/symbolic-minidump/cpp/c_mapping.h
similarity index 100%
rename from minidump/cpp/c_mapping.h
rename to symbolic-minidump/cpp/c_mapping.h
diff --git a/minidump/cpp/c_string.cpp b/symbolic-minidump/cpp/c_string.cpp
similarity index 100%
rename from minidump/cpp/c_string.cpp
rename to symbolic-minidump/cpp/c_string.cpp
diff --git a/minidump/cpp/c_string.h b/symbolic-minidump/cpp/c_string.h
similarity index 100%
rename from minidump/cpp/c_string.h
rename to symbolic-minidump/cpp/c_string.h
diff --git a/minidump/cpp/data_definitions.h b/symbolic-minidump/cpp/data_definitions.h
similarity index 100%
rename from minidump/cpp/data_definitions.h
rename to symbolic-minidump/cpp/data_definitions.h
diff --git a/minidump/cpp/data_structures.cpp b/symbolic-minidump/cpp/data_structures.cpp
similarity index 100%
rename from minidump/cpp/data_structures.cpp
rename to symbolic-minidump/cpp/data_structures.cpp
diff --git a/minidump/cpp/data_structures.h b/symbolic-minidump/cpp/data_structures.h
similarity index 100%
rename from minidump/cpp/data_structures.h
rename to symbolic-minidump/cpp/data_structures.h
diff --git a/minidump/cpp/memstream.h b/symbolic-minidump/cpp/memstream.h
similarity index 100%
rename from minidump/cpp/memstream.h
rename to symbolic-minidump/cpp/memstream.h
diff --git a/minidump/cpp/mmap_symbol_supplier.cpp b/symbolic-minidump/cpp/mmap_symbol_supplier.cpp
similarity index 100%
rename from minidump/cpp/mmap_symbol_supplier.cpp
rename to symbolic-minidump/cpp/mmap_symbol_supplier.cpp
diff --git a/minidump/cpp/mmap_symbol_supplier.h b/symbolic-minidump/cpp/mmap_symbol_supplier.h
similarity index 100%
rename from minidump/cpp/mmap_symbol_supplier.h
rename to symbolic-minidump/cpp/mmap_symbol_supplier.h
diff --git a/minidump/cpp/processor.cpp b/symbolic-minidump/cpp/processor.cpp
similarity index 100%
rename from minidump/cpp/processor.cpp
rename to symbolic-minidump/cpp/processor.cpp
diff --git a/minidump/cpp/processor.h b/symbolic-minidump/cpp/processor.h
similarity index 100%
rename from minidump/cpp/processor.h
rename to symbolic-minidump/cpp/processor.h
diff --git a/minidump/src/cfi.rs b/symbolic-minidump/src/cfi.rs
similarity index 100%
rename from minidump/src/cfi.rs
rename to symbolic-minidump/src/cfi.rs
diff --git a/minidump/src/lib.rs b/symbolic-minidump/src/lib.rs
similarity index 100%
rename from minidump/src/lib.rs
rename to symbolic-minidump/src/lib.rs
diff --git a/minidump/src/processor.rs b/symbolic-minidump/src/processor.rs
similarity index 100%
rename from minidump/src/processor.rs
rename to symbolic-minidump/src/processor.rs
diff --git a/minidump/src/utils.rs b/symbolic-minidump/src/utils.rs
similarity index 100%
rename from minidump/src/utils.rs
rename to symbolic-minidump/src/utils.rs
diff --git a/minidump/tests/snapshots/test_cfi__cfi_elf.snap b/symbolic-minidump/tests/snapshots/test_cfi__cfi_elf.snap
similarity index 100%
rename from minidump/tests/snapshots/test_cfi__cfi_elf.snap
rename to symbolic-minidump/tests/snapshots/test_cfi__cfi_elf.snap
diff --git a/minidump/tests/snapshots/test_cfi__cfi_macho.snap b/symbolic-minidump/tests/snapshots/test_cfi__cfi_macho.snap
similarity index 100%
rename from minidump/tests/snapshots/test_cfi__cfi_macho.snap
rename to symbolic-minidump/tests/snapshots/test_cfi__cfi_macho.snap
diff --git a/minidump/tests/snapshots/test_cfi__cfi_pdb_windows.snap b/symbolic-minidump/tests/snapshots/test_cfi__cfi_pdb_windows.snap
similarity index 100%
rename from minidump/tests/snapshots/test_cfi__cfi_pdb_windows.snap
rename to symbolic-minidump/tests/snapshots/test_cfi__cfi_pdb_windows.snap
diff --git a/minidump/tests/snapshots/test_cfi__cfi_pe_windows.snap b/symbolic-minidump/tests/snapshots/test_cfi__cfi_pe_windows.snap
similarity index 100%
rename from minidump/tests/snapshots/test_cfi__cfi_pe_windows.snap
rename to symbolic-minidump/tests/snapshots/test_cfi__cfi_pe_windows.snap
diff --git a/minidump/tests/snapshots/test_cfi__cfi_sym_linux.snap b/symbolic-minidump/tests/snapshots/test_cfi__cfi_sym_linux.snap
similarity index 100%
rename from minidump/tests/snapshots/test_cfi__cfi_sym_linux.snap
rename to symbolic-minidump/tests/snapshots/test_cfi__cfi_sym_linux.snap
diff --git a/minidump/tests/snapshots/test_cfi__cfi_sym_macos.snap b/symbolic-minidump/tests/snapshots/test_cfi__cfi_sym_macos.snap
similarity index 100%
rename from minidump/tests/snapshots/test_cfi__cfi_sym_macos.snap
rename to symbolic-minidump/tests/snapshots/test_cfi__cfi_sym_macos.snap
diff --git a/minidump/tests/snapshots/test_cfi__cfi_sym_windows.snap b/symbolic-minidump/tests/snapshots/test_cfi__cfi_sym_windows.snap
similarity index 100%
rename from minidump/tests/snapshots/test_cfi__cfi_sym_windows.snap
rename to symbolic-minidump/tests/snapshots/test_cfi__cfi_sym_windows.snap
diff --git a/minidump/tests/snapshots/test_processor__process_state_linux.snap b/symbolic-minidump/tests/snapshots/test_processor__process_state_linux.snap
similarity index 100%
rename from minidump/tests/snapshots/test_processor__process_state_linux.snap
rename to symbolic-minidump/tests/snapshots/test_processor__process_state_linux.snap
diff --git a/minidump/tests/snapshots/test_processor__process_state_macos.snap b/symbolic-minidump/tests/snapshots/test_processor__process_state_macos.snap
similarity index 100%
rename from minidump/tests/snapshots/test_processor__process_state_macos.snap
rename to symbolic-minidump/tests/snapshots/test_processor__process_state_macos.snap
diff --git a/minidump/tests/snapshots/test_processor__process_state_windows.snap b/symbolic-minidump/tests/snapshots/test_processor__process_state_windows.snap
similarity index 100%
rename from minidump/tests/snapshots/test_processor__process_state_windows.snap
rename to symbolic-minidump/tests/snapshots/test_processor__process_state_windows.snap
diff --git a/minidump/tests/snapshots/test_processor__referenced_modules_linux.snap b/symbolic-minidump/tests/snapshots/test_processor__referenced_modules_linux.snap
similarity index 100%
rename from minidump/tests/snapshots/test_processor__referenced_modules_linux.snap
rename to symbolic-minidump/tests/snapshots/test_processor__referenced_modules_linux.snap
diff --git a/minidump/tests/snapshots/test_processor__referenced_modules_macos.snap b/symbolic-minidump/tests/snapshots/test_processor__referenced_modules_macos.snap
similarity index 100%
rename from minidump/tests/snapshots/test_processor__referenced_modules_macos.snap
rename to symbolic-minidump/tests/snapshots/test_processor__referenced_modules_macos.snap
diff --git a/minidump/tests/snapshots/test_processor__referenced_modules_windows.snap b/symbolic-minidump/tests/snapshots/test_processor__referenced_modules_windows.snap
similarity index 100%
rename from minidump/tests/snapshots/test_processor__referenced_modules_windows.snap
rename to symbolic-minidump/tests/snapshots/test_processor__referenced_modules_windows.snap
diff --git a/minidump/tests/test_cfi.rs b/symbolic-minidump/tests/test_cfi.rs
similarity index 100%
rename from minidump/tests/test_cfi.rs
rename to symbolic-minidump/tests/test_cfi.rs
diff --git a/minidump/tests/test_processor.rs b/symbolic-minidump/tests/test_processor.rs
similarity index 100%
rename from minidump/tests/test_processor.rs
rename to symbolic-minidump/tests/test_processor.rs
diff --git a/minidump/third_party/breakpad b/symbolic-minidump/third_party/breakpad
similarity index 100%
rename from minidump/third_party/breakpad
rename to symbolic-minidump/third_party/breakpad
diff --git a/minidump/third_party/lss b/symbolic-minidump/third_party/lss
similarity index 100%
rename from minidump/third_party/lss
rename to symbolic-minidump/third_party/lss
diff --git a/proguard/Cargo.toml b/symbolic-proguard/Cargo.toml
similarity index 83%
rename from proguard/Cargo.toml
rename to symbolic-proguard/Cargo.toml
index 1d6653b6..a7e93ff4 100644
--- a/proguard/Cargo.toml
+++ b/symbolic-proguard/Cargo.toml
@@ -16,6 +16,9 @@ optimized applications.
 """
 edition = "2018"
 
+[package.metadata.docs.rs]
+all-features = true
+
 [dependencies]
 proguard = { version = "4.0.1", features = ["uuid"] }
-symbolic-common = { version = "7.5.0", path = "../common" }
+symbolic-common = { version = "7.5.0", path = "../symbolic-common" }
diff --git a/proguard/src/lib.rs b/symbolic-proguard/src/lib.rs
similarity index 100%
rename from proguard/src/lib.rs
rename to symbolic-proguard/src/lib.rs
diff --git a/sourcemap/Cargo.toml b/symbolic-sourcemap/Cargo.toml
similarity index 91%
rename from sourcemap/Cargo.toml
rename to symbolic-sourcemap/Cargo.toml
index 7f781272..426c1bf6 100644
--- a/sourcemap/Cargo.toml
+++ b/symbolic-sourcemap/Cargo.toml
@@ -15,6 +15,9 @@ source code or stack traces.
 """
 edition = "2018"
 
+[package.metadata.docs.rs]
+all-features = true
+
 [dependencies]
 failure = "0.1.5"
 sourcemap = "5.0.0"
diff --git a/sourcemap/src/lib.rs b/symbolic-sourcemap/src/lib.rs
similarity index 100%
rename from sourcemap/src/lib.rs
rename to symbolic-sourcemap/src/lib.rs
diff --git a/sourcemap/tests/fixtures/README.md b/symbolic-sourcemap/tests/fixtures/README.md
similarity index 100%
rename from sourcemap/tests/fixtures/README.md
rename to symbolic-sourcemap/tests/fixtures/README.md
diff --git a/sourcemap/tests/fixtures/react-native-hermes.map b/symbolic-sourcemap/tests/fixtures/react-native-hermes.map
similarity index 100%
rename from sourcemap/tests/fixtures/react-native-hermes.map
rename to symbolic-sourcemap/tests/fixtures/react-native-hermes.map
diff --git a/sourcemap/tests/fixtures/react-native-metro.js b/symbolic-sourcemap/tests/fixtures/react-native-metro.js
similarity index 100%
rename from sourcemap/tests/fixtures/react-native-metro.js
rename to symbolic-sourcemap/tests/fixtures/react-native-metro.js
diff --git a/sourcemap/tests/fixtures/react-native-metro.js.map b/symbolic-sourcemap/tests/fixtures/react-native-metro.js.map
similarity index 100%
rename from sourcemap/tests/fixtures/react-native-metro.js.map
rename to symbolic-sourcemap/tests/fixtures/react-native-metro.js.map
diff --git a/symcache/Cargo.toml b/symbolic-symcache/Cargo.toml
similarity index 74%
rename from symcache/Cargo.toml
rename to symbolic-symcache/Cargo.toml
index c879eb77..9578fac3 100644
--- a/symcache/Cargo.toml
+++ b/symbolic-symcache/Cargo.toml
@@ -19,18 +19,21 @@ exclude = [
     "tests/**/*",
 ]
 
+[package.metadata.docs.rs]
+all-features = true
+
 [dependencies]
 dmsort = "1.0.0"
 failure = "0.1.5"
 fnv = "1.0.6"
 num = "0.2.1"
-symbolic-common = { version = "7.5.0", path = "../common" }
-symbolic-debuginfo = { version = "7.5.0", path = "../debuginfo" }
+symbolic-common = { version = "7.5.0", path = "../symbolic-common" }
+symbolic-debuginfo = { version = "7.5.0", path = "../symbolic-debuginfo" }
 
 [dev-dependencies]
 insta = "0.15.0"
 criterion = "0.3.1"
-symbolic-testutils = { path = "../testutils" }
+symbolic-testutils = { path = "../symbolic-testutils" }
 
 [features]
 bench = []
diff --git a/testutils/fixtures/linux/crash b/symbolic-testutils/fixtures/linux/crash
similarity index 100%
rename from testutils/fixtures/linux/crash
rename to symbolic-testutils/fixtures/linux/crash
diff --git a/testutils/fixtures/linux/crash.debug b/symbolic-testutils/fixtures/linux/crash.debug
similarity index 100%
rename from testutils/fixtures/linux/crash.debug
rename to symbolic-testutils/fixtures/linux/crash.debug
diff --git a/testutils/fixtures/linux/crash.sym b/symbolic-testutils/fixtures/linux/crash.sym
similarity index 100%
rename from testutils/fixtures/linux/crash.sym
rename to symbolic-testutils/fixtures/linux/crash.sym
diff --git a/testutils/fixtures/linux/mini.dmp b/symbolic-testutils/fixtures/linux/mini.dmp
similarity index 100%
rename from testutils/fixtures/linux/mini.dmp
rename to symbolic-testutils/fixtures/linux/mini.dmp
diff --git a/testutils/fixtures/macos/crash b/symbolic-testutils/fixtures/macos/crash
similarity index 100%
rename from testutils/fixtures/macos/crash
rename to symbolic-testutils/fixtures/macos/crash
diff --git a/testutils/fixtures/macos/crash.dSYM/Contents/Info.plist b/symbolic-testutils/fixtures/macos/crash.dSYM/Contents/Info.plist
similarity index 100%
rename from testutils/fixtures/macos/crash.dSYM/Contents/Info.plist
rename to symbolic-testutils/fixtures/macos/crash.dSYM/Contents/Info.plist
diff --git a/testutils/fixtures/macos/crash.dSYM/Contents/Resources/DWARF/crash b/symbolic-testutils/fixtures/macos/crash.dSYM/Contents/Resources/DWARF/crash
similarity index 100%
rename from testutils/fixtures/macos/crash.dSYM/Contents/Resources/DWARF/crash
rename to symbolic-testutils/fixtures/macos/crash.dSYM/Contents/Resources/DWARF/crash
diff --git a/testutils/fixtures/macos/crash.dSYM/Contents/Resources/DWARF/invalid b/symbolic-testutils/fixtures/macos/crash.dSYM/Contents/Resources/DWARF/invalid
similarity index 100%
rename from testutils/fixtures/macos/crash.dSYM/Contents/Resources/DWARF/invalid
rename to symbolic-testutils/fixtures/macos/crash.dSYM/Contents/Resources/DWARF/invalid
diff --git a/testutils/fixtures/macos/crash.sym b/symbolic-testutils/fixtures/macos/crash.sym
similarity index 100%
rename from testutils/fixtures/macos/crash.sym
rename to symbolic-testutils/fixtures/macos/crash.sym
diff --git a/testutils/fixtures/macos/mini.dmp b/symbolic-testutils/fixtures/macos/mini.dmp
similarity index 100%
rename from testutils/fixtures/macos/mini.dmp
rename to symbolic-testutils/fixtures/macos/mini.dmp
diff --git a/testutils/fixtures/macos/other.dSYM/Contents/Resources/DWARF/invalid b/symbolic-testutils/fixtures/macos/other.dSYM/Contents/Resources/DWARF/invalid
similarity index 100%
rename from testutils/fixtures/macos/other.dSYM/Contents/Resources/DWARF/invalid
rename to symbolic-testutils/fixtures/macos/other.dSYM/Contents/Resources/DWARF/invalid
diff --git a/testutils/fixtures/regression/large_symbol.sym b/symbolic-testutils/fixtures/regression/large_symbol.sym
similarity index 100%
rename from testutils/fixtures/regression/large_symbol.sym
rename to symbolic-testutils/fixtures/regression/large_symbol.sym
diff --git a/testutils/fixtures/symcache/compat/v1.symc b/symbolic-testutils/fixtures/symcache/compat/v1.symc
similarity index 100%
rename from testutils/fixtures/symcache/compat/v1.symc
rename to symbolic-testutils/fixtures/symcache/compat/v1.symc
diff --git a/testutils/fixtures/symcache/current/linux.symc b/symbolic-testutils/fixtures/symcache/current/linux.symc
similarity index 100%
rename from testutils/fixtures/symcache/current/linux.symc
rename to symbolic-testutils/fixtures/symcache/current/linux.symc
diff --git a/testutils/fixtures/symcache/current/macos.symc b/symbolic-testutils/fixtures/symcache/current/macos.symc
similarity index 100%
rename from testutils/fixtures/symcache/current/macos.symc
rename to symbolic-testutils/fixtures/symcache/current/macos.symc
diff --git a/testutils/fixtures/unreal/unreal_crash b/symbolic-testutils/fixtures/unreal/unreal_crash
similarity index 100%
rename from testutils/fixtures/unreal/unreal_crash
rename to symbolic-testutils/fixtures/unreal/unreal_crash
diff --git a/testutils/fixtures/unreal/unreal_crash_apple b/symbolic-testutils/fixtures/unreal/unreal_crash_apple
similarity index 100%
rename from testutils/fixtures/unreal/unreal_crash_apple
rename to symbolic-testutils/fixtures/unreal/unreal_crash_apple
diff --git a/testutils/fixtures/windows/CrashWithException.exe b/symbolic-testutils/fixtures/windows/CrashWithException.exe
similarity index 100%
rename from testutils/fixtures/windows/CrashWithException.exe
rename to symbolic-testutils/fixtures/windows/CrashWithException.exe
diff --git a/testutils/fixtures/windows/CrashWithException.pdb b/symbolic-testutils/fixtures/windows/CrashWithException.pdb
similarity index 100%
rename from testutils/fixtures/windows/CrashWithException.pdb
rename to symbolic-testutils/fixtures/windows/CrashWithException.pdb
diff --git a/testutils/fixtures/windows/CrashWithException.pdb.sym b/symbolic-testutils/fixtures/windows/CrashWithException.pdb.sym
similarity index 100%
rename from testutils/fixtures/windows/CrashWithException.pdb.sym
rename to symbolic-testutils/fixtures/windows/CrashWithException.pdb.sym
diff --git a/testutils/fixtures/windows/crash.exe b/symbolic-testutils/fixtures/windows/crash.exe
similarity index 100%
rename from testutils/fixtures/windows/crash.exe
rename to symbolic-testutils/fixtures/windows/crash.exe
diff --git a/testutils/fixtures/windows/crash.pdb b/symbolic-testutils/fixtures/windows/crash.pdb
similarity index 100%
rename from testutils/fixtures/windows/crash.pdb
rename to symbolic-testutils/fixtures/windows/crash.pdb
diff --git a/testutils/fixtures/windows/crash.sym b/symbolic-testutils/fixtures/windows/crash.sym
similarity index 100%
rename from testutils/fixtures/windows/crash.sym
rename to symbolic-testutils/fixtures/windows/crash.sym
diff --git a/testutils/fixtures/windows/mini.dmp b/symbolic-testutils/fixtures/windows/mini.dmp
similarity index 100%
rename from testutils/fixtures/windows/mini.dmp
rename to symbolic-testutils/fixtures/windows/mini.dmp
diff --git a/testutils/src/lib.rs b/symbolic-testutils/src/lib.rs
similarity index 100%
rename from testutils/src/lib.rs
rename to symbolic-testutils/src/lib.rs
diff --git a/unreal/Cargo.toml b/symbolic-unreal/Cargo.toml
similarity index 90%
rename from unreal/Cargo.toml
rename to symbolic-unreal/Cargo.toml
index 4212f6fd..cad0f6b5 100644
--- a/unreal/Cargo.toml
+++ b/symbolic-unreal/Cargo.toml
@@ -19,6 +19,9 @@ exclude = [
     "tests/**/*",
 ]
 
+[package.metadata.docs.rs]
+all-features = true
+
 [features]
 serde = ["serde_", "chrono/serde"]
 
@@ -36,4 +39,4 @@ serde_ = { package = "serde", version = "1.0.94", optional = true, features = ["
 
 [dev-dependencies]
 insta = "0.15.0"
-symbolic-testutils = { path = "../testutils" }
+symbolic-testutils = { path = "../symbolic-testutils" }
diff --git a/unreal/src/container.rs b/symbolic-unreal/src/container.rs
similarity index 100%
rename from unreal/src/container.rs
rename to symbolic-unreal/src/container.rs
diff --git a/unreal/src/context.rs b/symbolic-unreal/src/context.rs
similarity index 100%
rename from unreal/src/context.rs
rename to symbolic-unreal/src/context.rs
diff --git a/unreal/src/error.rs b/symbolic-unreal/src/error.rs
similarity index 100%
rename from unreal/src/error.rs
rename to symbolic-unreal/src/error.rs
diff --git a/unreal/src/lib.rs b/symbolic-unreal/src/lib.rs
similarity index 100%
rename from unreal/src/lib.rs
rename to symbolic-unreal/src/lib.rs
diff --git a/unreal/src/logs.rs b/symbolic-unreal/src/logs.rs
similarity index 100%
rename from unreal/src/logs.rs
rename to symbolic-unreal/src/logs.rs
diff --git a/unreal/tests/snapshots/test_unreal_crash_parse__contexts_runtime_properties.snap b/symbolic-unreal/tests/snapshots/test_unreal_crash_parse__contexts_runtime_properties.snap
similarity index 100%
rename from unreal/tests/snapshots/test_unreal_crash_parse__contexts_runtime_properties.snap
rename to symbolic-unreal/tests/snapshots/test_unreal_crash_parse__contexts_runtime_properties.snap
diff --git a/unreal/tests/test_unreal_crash_parse.rs b/symbolic-unreal/tests/test_unreal_crash_parse.rs
similarity index 100%
rename from unreal/tests/test_unreal_crash_parse.rs
rename to symbolic-unreal/tests/test_unreal_crash_parse.rs
diff --git a/symbolic/Cargo.toml b/symbolic/Cargo.toml
new file mode 100644
index 00000000..2e601d19
--- /dev/null
+++ b/symbolic/Cargo.toml
@@ -0,0 +1,47 @@
+[package]
+name = "symbolic"
+version = "7.5.0"
+license = "MIT"
+authors = [
+    "Armin Ronacher <armin.ronacher@active-4.com>",
+    "Jan Michael Auer <mail@jauer.org>",
+]
+documentation = "https://docs.rs/symbolic"
+homepage = "https://github.com/getsentry/symbolic"
+repository = "https://github.com/getsentry/symbolic"
+readme = "README.md"
+description = """
+A library to symbolicate and process stack traces from native applications,
+minidumps, Unreal Engine 4, minified JavaScripts or ProGuard optimized Android apps.
+"""
+edition = "2018"
+
+[package.metadata.docs.rs]
+all-features = true
+
+[features]
+default = ["debuginfo"]
+common-serde = ["symbolic-common/serde"]
+debuginfo = ["symbolic-debuginfo"]
+debuginfo-serde = ["debuginfo", "common-serde"]
+demangle = ["symbolic-demangle"]
+minidump = ["symbolic-minidump", "debuginfo"]
+minidump-serde = ["minidump", "debuginfo-serde", "symbolic-minidump/serde"]
+proguard = ["symbolic-proguard"]
+sourcemap = ["symbolic-sourcemap"]
+symcache = ["symbolic-symcache", "debuginfo"]
+unreal = ["symbolic-unreal"]
+unreal-serde = ["unreal", "common-serde", "symbolic-unreal/serde"]
+
+[dependencies]
+symbolic-common = { version = "7.5.0", path = "../symbolic-common" }
+symbolic-debuginfo = { version = "7.5.0", path = "../symbolic-debuginfo", optional = true }
+symbolic-demangle = { version = "7.5.0", path = "../symbolic-demangle", optional = true }
+symbolic-minidump = { version = "7.5.0", path = "../symbolic-minidump", optional = true }
+symbolic-proguard = { version = "7.5.0", path = "../symbolic-proguard", optional = true }
+symbolic-sourcemap = { version = "7.5.0", path = "../symbolic-sourcemap", optional = true }
+symbolic-symcache = { version = "7.5.0", path = "../symbolic-symcache", optional = true }
+symbolic-unreal = { version = "7.5.0", path = "../symbolic-unreal", optional = true }
+
+[badges]
+travis-ci = { repository = "getsentry/symbolic", branch = "master" }
diff --git a/symbolic/README.md b/symbolic/README.md
new file mode 100644
index 00000000..14855d41
--- /dev/null
+++ b/symbolic/README.md
@@ -0,0 +1,67 @@
+[![Build Status](https://travis-ci.org/getsentry/symbolic.svg?branch=master)](https://travis-ci.org/getsentry/symbolic)
+
+# symbolic
+
+[Symbolic](https://docs.rs/symbolic) is a library written in Rust which is used at
+[Sentry](https://sentry.io/) to implement symbolication of native stack traces, sourcemap
+handling for minified JavaScript and more. It consists of multiple largely independent crates
+which are bundled together into a C and Python library so it can be used independently of Rust.
+
+## What's in the package
+
+Symbolic provides the following functionality:
+
+- Symbolication based on custom cache files (symcache)
+- Symbol cache file generators from:
+  - Mach, ELF and PE symbol tables
+  - Mach and ELF embedded DWARF data
+  - PDB CodeView debug information
+  - Breakpad symbol files
+- Demangling support
+  - C++ (GCC, clang and MSVC)
+  - Objective C / Objective C++
+  - Rust
+  - Swift
+- JavaScript sourcemap expansion
+  - Basic token mapping
+  - Heuristics to find original function names based on minified sources
+  - Indexed sourcemap to sourcemap merging
+- Proguard function mappings
+- Minidump / Breakpad processing
+  - Generate Breakpad symbol files from Mach, ELF and PDBs
+  - Process Minidumps to retrieve stack traces
+- Convenient C and Python library
+- Processing of Unreal Engine 4 native crash reports
+  - Extract and process minidumps
+  - Expose logs and UE4 context information
+
+## Usage
+
+Add `symbolic` as a dependency to your `Cargo.toml`. You will most likely want to activate some
+of the features:
+
+- **`debuginfo`** (default): Contains support for various object file formats and debugging
+  information. Currently, this comprises MachO and ELF (with DWARF debugging), PE and PDB, as
+  well as Breakpad symbols.
+- **`demangle`**: Demangling for Rust, C++, Swift and Objective C symbols. This feature requires
+  a C++14 compiler on the PATH.
+- **`minidump`**: Rust bindings for the Breakpad Minidump processor. Additionally, this includes
+  facilities to extract stack unwinding information (sometimes called CFI) from object files.
+  This feature requires a C++11 compiler on the PATH.
+- **`proguard`**: Processing of Proguard mapping files to look up mangled Java function paths.
+- **`sourcemap`**: Processing and expansion of JavaScript source maps, as well as lookups for
+  minified function names.
+- **`symcache`**: An optimized, platform-independent storage for common debugging information.
+  This allows blazing fast symbolication of instruction addresses to function names and file
+  locations.
+- **`unreal`**: Processing of Unreal Engine 4 crash reports.
+
+There are also alternate versions for some of the above features that additionally add
+implementations for `serde::{Deserialize, Serialize}` on suitable types:
+
+- **`common-serde`**
+- **`debuginfo-serde`**
+- **`minidump-serde`**
+- **`unreal-serde`**
+
+License: MIT
diff --git a/symbolic/src/lib.rs b/symbolic/src/lib.rs
new file mode 100644
index 00000000..0943f884
--- /dev/null
+++ b/symbolic/src/lib.rs
@@ -0,0 +1,88 @@
+//! [Symbolic](https://docs.rs/symbolic) is a library written in Rust which is used at
+//! [Sentry](https://sentry.io/) to implement symbolication of native stack traces, sourcemap
+//! handling for minified JavaScript and more. It consists of multiple largely independent crates
+//! which are bundled together into a C and Python library so it can be used independently of Rust.
+//!
+//! # What's in the package
+//!
+//! Symbolic provides the following functionality:
+//!
+//! - Symbolication based on custom cache files (symcache)
+//! - Symbol cache file generators from:
+//!   - Mach, ELF and PE symbol tables
+//!   - Mach and ELF embedded DWARF data
+//!   - PDB CodeView debug information
+//!   - Breakpad symbol files
+//! - Demangling support
+//!   - C++ (GCC, clang and MSVC)
+//!   - Objective C / Objective C++
+//!   - Rust
+//!   - Swift
+//! - JavaScript sourcemap expansion
+//!   - Basic token mapping
+//!   - Heuristics to find original function names based on minified sources
+//!   - Indexed sourcemap to sourcemap merging
+//! - Proguard function mappings
+//! - Minidump / Breakpad processing
+//!   - Generate Breakpad symbol files from Mach, ELF and PDBs
+//!   - Process Minidumps to retrieve stack traces
+//! - Convenient C and Python library
+//! - Processing of Unreal Engine 4 native crash reports
+//!   - Extract and process minidumps
+//!   - Expose logs and UE4 context information
+//!
+//! # Usage
+//!
+//! Add `symbolic` as a dependency to your `Cargo.toml`. You will most likely want to activate some
+//! of the features:
+//!
+//! - **`debuginfo`** (default): Contains support for various object file formats and debugging
+//!   information. Currently, this comprises MachO and ELF (with DWARF debugging), PE and PDB, as
+//!   well as Breakpad symbols.
+//! - **`demangle`**: Demangling for Rust, C++, Swift and Objective C symbols. This feature requires
+//!   a C++14 compiler on the PATH.
+//! - **`minidump`**: Rust bindings for the Breakpad Minidump processor. Additionally, this includes
+//!   facilities to extract stack unwinding information (sometimes called CFI) from object files.
+//!   This feature requires a C++11 compiler on the PATH.
+//! - **`proguard`**: Processing of Proguard mapping files to look up mangled Java function paths.
+//! - **`sourcemap`**: Processing and expansion of JavaScript source maps, as well as lookups for
+//!   minified function names.
+//! - **`symcache`**: An optimized, platform-independent storage for common debugging information.
+//!   This allows blazing fast symbolication of instruction addresses to function names and file
+//!   locations.
+//! - **`unreal`**: Processing of Unreal Engine 4 crash reports.
+//!
+//! There are also alternate versions for some of the above features that additionally add
+//! implementations for `serde::{Deserialize, Serialize}` on suitable types:
+//!
+//! - **`common-serde`**
+//! - **`debuginfo-serde`**
+//! - **`minidump-serde`**
+//! - **`unreal-serde`**
+
+#![warn(missing_docs)]
+
+#[doc(inline)]
+pub use symbolic_common as common;
+#[doc(inline)]
+#[cfg(feature = "debuginfo")]
+pub use symbolic_debuginfo as debuginfo;
+#[doc(inline)]
+#[cfg(feature = "demangle")]
+pub use symbolic_demangle as demangle;
+#[doc(inline)]
+#[cfg(feature = "minidump")]
+pub use symbolic_minidump as minidump;
+#[doc(inline)]
+#[cfg(feature = "proguard")]
+#[deprecated = "use the `proguard` crate directly"]
+pub use symbolic_proguard as proguard;
+#[doc(inline)]
+#[cfg(feature = "sourcemap")]
+pub use symbolic_sourcemap as sourcemap;
+#[doc(inline)]
+#[cfg(feature = "symcache")]
+pub use symbolic_symcache as symcache;
+#[doc(inline)]
+#[cfg(feature = "unreal")]
+pub use symbolic_unreal as unreal;


Test patch:
diff --git a/py/tests/test_debug.py b/py/tests/test_debug.py
index c1e1d2ee..e5fd32d6 100644
--- a/py/tests/test_debug.py
+++ b/py/tests/test_debug.py
@@ -89,7 +89,7 @@ def test_normalize_debug_id():
         == "dfb8e43a-f242-3d73-a453-aeb6a777ef75-a"
     )
     assert (
-        normalize_debug_id("dfb8e43af2423d73a453aeb6a777ef75-a")
+        normalize_debug_id("dfb8e43af2423d73a453aeb6a777ef75a")
         == "dfb8e43a-f242-3d73-a453-aeb6a777ef75-a"
     )
     assert (
diff --git a/symcache/benches/bench_writer.rs b/symbolic-symcache/benches/bench_writer.rs
similarity index 100%
rename from symcache/benches/bench_writer.rs
rename to symbolic-symcache/benches/bench_writer.rs
diff --git a/symcache/src/cache.rs b/symbolic-symcache/src/cache.rs
similarity index 100%
rename from symcache/src/cache.rs
rename to symbolic-symcache/src/cache.rs
diff --git a/symcache/src/error.rs b/symbolic-symcache/src/error.rs
similarity index 100%
rename from symcache/src/error.rs
rename to symbolic-symcache/src/error.rs
diff --git a/symcache/src/format.rs b/symbolic-symcache/src/format.rs
similarity index 100%
rename from symcache/src/format.rs
rename to symbolic-symcache/src/format.rs
diff --git a/symcache/src/lib.rs b/symbolic-symcache/src/lib.rs
similarity index 100%
rename from symcache/src/lib.rs
rename to symbolic-symcache/src/lib.rs
diff --git a/symcache/src/writer.rs b/symbolic-symcache/src/writer.rs
similarity index 100%
rename from symcache/src/writer.rs
rename to symbolic-symcache/src/writer.rs
diff --git a/symcache/tests/snapshots/test_cache__functions_linux.snap b/symbolic-symcache/tests/snapshots/test_cache__functions_linux.snap
similarity index 100%
rename from symcache/tests/snapshots/test_cache__functions_linux.snap
rename to symbolic-symcache/tests/snapshots/test_cache__functions_linux.snap
diff --git a/symcache/tests/snapshots/test_cache__functions_macos.snap b/symbolic-symcache/tests/snapshots/test_cache__functions_macos.snap
similarity index 100%
rename from symcache/tests/snapshots/test_cache__functions_macos.snap
rename to symbolic-symcache/tests/snapshots/test_cache__functions_macos.snap
diff --git a/symcache/tests/snapshots/test_cache__lookup.snap b/symbolic-symcache/tests/snapshots/test_cache__lookup.snap
similarity index 100%
rename from symcache/tests/snapshots/test_cache__lookup.snap
rename to symbolic-symcache/tests/snapshots/test_cache__lookup.snap
diff --git a/symcache/tests/snapshots/test_writer__functions_linux.snap b/symbolic-symcache/tests/snapshots/test_writer__functions_linux.snap
similarity index 100%
rename from symcache/tests/snapshots/test_writer__functions_linux.snap
rename to symbolic-symcache/tests/snapshots/test_writer__functions_linux.snap
diff --git a/symcache/tests/snapshots/test_writer__functions_macos.snap b/symbolic-symcache/tests/snapshots/test_writer__functions_macos.snap
similarity index 100%
rename from symcache/tests/snapshots/test_writer__functions_macos.snap
rename to symbolic-symcache/tests/snapshots/test_writer__functions_macos.snap
diff --git a/symcache/tests/test_cache.rs b/symbolic-symcache/tests/test_cache.rs
similarity index 100%
rename from symcache/tests/test_cache.rs
rename to symbolic-symcache/tests/test_cache.rs
diff --git a/symcache/tests/test_compat.rs b/symbolic-symcache/tests/test_compat.rs
similarity index 100%
rename from symcache/tests/test_compat.rs
rename to symbolic-symcache/tests/test_compat.rs
diff --git a/symcache/tests/test_writer.rs b/symbolic-symcache/tests/test_writer.rs
similarity index 100%
rename from symcache/tests/test_writer.rs
rename to symbolic-symcache/tests/test_writer.rs
diff --git a/testutils/Cargo.toml b/symbolic-testutils/Cargo.toml
similarity index 71%
rename from testutils/Cargo.toml
rename to symbolic-testutils/Cargo.toml
index c5bcad86..72babfb5 100644
--- a/testutils/Cargo.toml
+++ b/symbolic-testutils/Cargo.toml
@@ -5,4 +5,7 @@ license = "MIT"
 edition = "2018"
 publish = false
 
+[package.metadata.docs.rs]
+all-features = true
+
 [dependencies]