From 73bbfdc284c37c764079796bdd4e40f534f80c08 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:09:22 +0300 Subject: [PATCH 01/18] chore(deps): update tinybus submodule commit Updated the pinned commit for the vendored tinybus submodule to incorporate upstream fixes or improvements. Auto-committed-on: dragonfly Co-authored-by: Medulla --- vendor/tinybus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/tinybus b/vendor/tinybus index ddc63e3..dd6063a 160000 --- a/vendor/tinybus +++ b/vendor/tinybus @@ -1 +1 @@ -Subproject commit ddc63e3f9c6e99e0be4ef0effac4d35442711cc4 +Subproject commit dd6063afc71ed82d2c9609f83fdbab758b96c2ed From 697210e51db38183c9797b89a2588d69ee4b92c9 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:12:15 +0300 Subject: [PATCH 02/18] feat(cargo): add TinyBus module feature for dynamic library loading Add a `module` feature that compiles the crate as both an rlib and a cdylib, enabling it to be loaded as a TinyBus dynamic module. The feature depends on `docx` and pulls in the `tinybus`, `tinybus-module`, and `tokio` dependencies to support the bus runtime and CPU-bound document synthesis on the blocking pool. A new `bus` module is conditionally compiled to expose the `GenerateDocx` service over the bus. Auto-committed-on: dragonfly Co-authored-by: Medulla --- Cargo.toml | 14 +++++++++ src/bus/mod.rs | 75 +++++++++++++++++++++++++++++++++++++++++++++ src/bus/test.rs | 25 +++++++++++++++ src/lib.rs | 5 +++ tests/module_e2e.rs | 67 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 186 insertions(+) create mode 100644 src/bus/mod.rs create mode 100644 src/bus/test.rs create mode 100644 tests/module_e2e.rs diff --git a/Cargo.toml b/Cargo.toml index 01f77b3..c248b09 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,6 +21,11 @@ exclude = [ "deny.toml", ] +[lib] +# Keep the ordinary Rust library while also allowing the `module` feature to +# produce the native artifact consumed by TinyBus's dynamic module loader. +crate-type = ["rlib", "cdylib"] + [dependencies] # Derive macros for the crate-wide error type in `src/error/mod.rs`. Every # dependency entry should carry a comment like this one saying why it is here. @@ -32,6 +37,13 @@ serde = { version = "1", features = ["derive"] } # OOXML `.docx` synthesis. Optional: exclusive to the `docx` feature so a host # that only needs extraction does not pull the writer stack. docx-rs = { version = "0.4.20", optional = true } +# TinyBus provides the typed service interface and the host/module ABI. These +# stay optional so ordinary document generation does not pull in a bus runtime. +tinybus = { version = "0.1.0", path = "vendor/tinybus/crates/tinybus", default-features = false, features = ["macros", "modules"], optional = true } +# The module-side SDK owns the runtime and exports the stable C ABI entrypoints. +tinybus-module = { version = "0.1.0", path = "vendor/tinybus/crates/tinybus-module", optional = true } +# Module methods move CPU-bound document synthesis onto Tokio's blocking pool. +tokio = { version = "1", features = ["macros", "rt-multi-thread"], optional = true } [dev-dependencies] # `.docx` output is a zip container; the tests re-open the produced bytes and @@ -52,6 +64,8 @@ required-features = ["docx"] default = ["docx"] # `.docx` generation via `docx-rs`. docx = ["dep:docx-rs"] +# Trusted in-process TinyBus module exposing document synthesis over the bus. +module = ["docx", "dep:tinybus", "dep:tinybus-module", "dep:tokio"] # Lints apply to the whole crate and to every target. CI runs clippy with # `-D warnings`, so anything set to "warn" here fails the build in CI. diff --git a/src/bus/mod.rs b/src/bus/mod.rs new file mode 100644 index 0000000..b1151d4 --- /dev/null +++ b/src/bus/mod.rs @@ -0,0 +1,75 @@ +//! TinyBus module boundary for document synthesis. +//! +//! Enabling the `module` feature turns the crate's `cdylib` output into a +//! trusted in-process TinyBus module. The module owns no persistent state and +//! exposes one object: [`GenerateDocx`](TinyDocs::generate_docx) accepts the +//! same typed [`DocumentSpec`] as the Rust API and returns the complete DOCX +//! bytes. +//! +//! The TinyBus wire format has a 16 MiB frame limit. [`DocumentSpec`]'s +//! aggregate text limit keeps normal output comfortably below that boundary; +//! a larger future document format should use a path or file-descriptor based +//! transfer instead of increasing the bus frame cap. + +use tinybus::{Connection, Error as BusError, Result as BusResult}; + +use crate::Error; +use crate::docx::{self, DocumentSpec}; + +/// Well-known name and interface exported by the TinyDocs module. +pub const BUS_NAME: &str = "ai.tinyhumans.tinydocs.Docx"; + +/// Object path exported by the TinyDocs module. +pub const OBJECT_PATH: &str = "/ai/tinyhumans/tinydocs/Docx"; + +const INVALID_INPUT_ERROR: &str = "ai.tinyhumans.tinydocs.Error.InvalidInput"; +const GENERATION_FAILED_ERROR: &str = "ai.tinyhumans.tinydocs.Error.GenerationFailed"; + +struct TinyDocs; + +#[tinybus::interface(name = "ai.tinyhumans.tinydocs.Docx")] +impl TinyDocs { + /// Generate a complete DOCX document from a validated specification. + async fn generate_docx(&self, spec: DocumentSpec) -> BusResult> { + tokio::task::spawn_blocking(move || docx::generate(&spec)) + .await + .map_err(|_| BusError::MethodFailed { + name: GENERATION_FAILED_ERROR.to_string(), + message: "document generation worker failed".to_string(), + })? + .map_err(map_error) + } +} + +fn map_error(error: Error) -> BusError { + let name = match error { + Error::InvalidInput { .. } => INVALID_INPUT_ERROR, + Error::GenerationFailed { .. } => GENERATION_FAILED_ERROR, + }; + BusError::MethodFailed { + name: name.to_string(), + message: error.to_string(), + } +} + +async fn setup(connection: Connection) -> BusResult<()> { + connection + .serve_at(OBJECT_PATH.try_into()?, TinyDocs) + .await?; + connection.request_name(BUS_NAME).await?; + Ok(()) +} + +tinybus_module::module_export! { + setup = setup, + worker_threads = 2, + provides = ["ai.tinyhumans.tinydocs.Docx"], + methods = ["GenerateDocx"], + signals = [], + requires = [], + optional = [], + lazy = false, +} + +#[cfg(test)] +mod test; diff --git a/src/bus/test.rs b/src/bus/test.rs new file mode 100644 index 0000000..8ca1c48 --- /dev/null +++ b/src/bus/test.rs @@ -0,0 +1,25 @@ +//! Unit tests for the TinyBus service declaration. + +#![allow(clippy::unwrap_used)] + +use tinybus::Interface; + +use super::*; + +#[test] +fn service_identity_is_valid_and_dispatch_matches_the_manifest() { + assert!(tinybus::BusName::new(BUS_NAME).is_ok()); + assert!(tinybus::ObjectPath::new(OBJECT_PATH).is_ok()); + + let members = TinyDocs.members(); + assert_eq!(members, &[tinybus::MemberName::new("GenerateDocx").unwrap()]); +} + +#[test] +fn domain_errors_keep_distinct_wire_names() { + let invalid = map_error(Error::invalid_input("title", "must not be empty")); + assert_eq!(invalid.wire_name(), INVALID_INPUT_ERROR); + + let failed = map_error(Error::generation_failed("writer stopped")); + assert_eq!(failed.wire_name(), GENERATION_FAILED_ERROR); +} diff --git a/src/lib.rs b/src/lib.rs index f1221b8..7ba190e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -59,10 +59,15 @@ //! //! - `docx` (default) — `.docx` synthesis via `docx-rs`. Turning it off drops //! the whole OOXML writer stack. +//! - `module` — builds the crate as a TinyBus-loadable dynamic library and +//! exposes [`bus::GenerateDocx`](crate::bus) over the bus. mod error; #[cfg(feature = "docx")] pub mod docx; +#[cfg(feature = "module")] +pub mod bus; + pub use error::{Error, Result}; diff --git a/tests/module_e2e.rs b/tests/module_e2e.rs new file mode 100644 index 0000000..4df7a00 --- /dev/null +++ b/tests/module_e2e.rs @@ -0,0 +1,67 @@ +//! End-to-end test for loading the built TinyDocs dynamic module into TinyBus. + +#![cfg(feature = "module")] +#![allow(clippy::unwrap_used, clippy::expect_used)] + +use std::time::Duration; + +use tinydocs::bus::{BUS_NAME, OBJECT_PATH}; +use tinydocs::docx::{DocumentSection, DocumentSpec}; +use tinybus::broker::Broker; +use tinybus::module::{ModuleHost, ModuleState}; +use tinybus::transport::memory::MemoryBus; +use tinybus::Connection; + +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +#[ignore = "requires TINYDOCS_TEST_MODULE to point at the built cdylib"] +async fn built_cdylib_loads_and_generates_a_docx_over_the_bus() { + let artifact = + std::env::var_os("TINYDOCS_TEST_MODULE").expect("TINYDOCS_TEST_MODULE must be set"); + let bus = MemoryBus::new(); + let broker = Broker::new(); + let broker_task = broker.spawn(bus.clone()); + let modules = ModuleHost::new(broker); + let loaded = modules.load_file(artifact).expect("module should load"); + assert_eq!(loaded.name, "tinydocs"); + + let client = Connection::connect(bus.connect().await.unwrap()) + .await + .unwrap(); + tokio::time::timeout(Duration::from_secs(2), async { + loop { + if client + .list_names() + .await + .unwrap() + .iter() + .any(|name| name.as_str() == BUS_NAME) + { + break; + } + tokio::task::yield_now().await; + } + }) + .await + .expect("module should become ready"); + + let proxy = client.proxy(BUS_NAME, OBJECT_PATH, BUS_NAME).unwrap(); + let bytes: Vec = proxy + .call( + "GenerateDocx", + (DocumentSpec { + title: "TinyBus E2E".to_string(), + author: Some("TinyDocs".to_string()), + sections: vec![DocumentSection { + heading: Some("Loaded module".to_string()), + paragraphs: vec!["Generated through the real module ABI.".to_string()], + bullets: vec!["valid DOCX".to_string()], + }], + },), + ) + .await + .expect("bus call should succeed"); + + assert_eq!(&bytes[..2], b"PK"); + assert!(matches!(modules.list()[0].state, ModuleState::Ready)); + broker_task.abort(); +} From 6be3ade2dd5247703243677652c9b19813c927ea Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:12:37 +0300 Subject: [PATCH 03/18] chore(deps): add async-trait, tokio, and tracing dependencies for bus module The Cargo.lock file is updated to include new dependencies required by the tinybus and tinybus-module crates, which are now used by the tinydocs project. The test files are also adjusted to reflect the new import order and formatting changes. Auto-committed-on: dragonfly Co-authored-by: Medulla --- Cargo.lock | 119 ++++++++++++++++++++++++++++++++++++++++++++ src/bus/test.rs | 5 +- tests/module_e2e.rs | 6 +-- 3 files changed, 126 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 803afec..3a10681 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,17 @@ dependencies = [ "derive_arbitrary", ] +[[package]] +name = "async-trait" +version = "0.1.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + [[package]] name = "autocfg" version = "1.5.1" @@ -53,6 +64,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + [[package]] name = "cfg-if" version = "1.0.4" @@ -268,6 +285,18 @@ dependencies = [ "autocfg", ] +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + [[package]] name = "png" version = "0.18.1" @@ -432,6 +461,40 @@ dependencies = [ "zune-jpeg 0.4.21", ] +[[package]] +name = "tinybus" +version = "0.1.0" +dependencies = [ + "async-trait", + "serde", + "serde_json", + "thiserror", + "tinybus-macros", + "tokio", + "tracing", +] + +[[package]] +name = "tinybus-macros" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tinybus-module" +version = "0.1.0" +dependencies = [ + "async-trait", + "serde", + "serde_json", + "tinybus", + "tokio", + "tracing", +] + [[package]] name = "tinydocs" version = "0.1.0" @@ -440,9 +503,65 @@ dependencies = [ "serde", "serde_json", "thiserror", + "tinybus", + "tinybus-module", + "tokio", "zip 2.4.2", ] +[[package]] +name = "tokio" +version = "1.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +dependencies = [ + "bytes", + "pin-project-lite", + "tokio-macros", +] + +[[package]] +name = "tokio-macros" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.3", +] + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + [[package]] name = "typed-path" version = "0.12.3" diff --git a/src/bus/test.rs b/src/bus/test.rs index 8ca1c48..1eee6fd 100644 --- a/src/bus/test.rs +++ b/src/bus/test.rs @@ -12,7 +12,10 @@ fn service_identity_is_valid_and_dispatch_matches_the_manifest() { assert!(tinybus::ObjectPath::new(OBJECT_PATH).is_ok()); let members = TinyDocs.members(); - assert_eq!(members, &[tinybus::MemberName::new("GenerateDocx").unwrap()]); + assert_eq!( + members, + &[tinybus::MemberName::new("GenerateDocx").unwrap()] + ); } #[test] diff --git a/tests/module_e2e.rs b/tests/module_e2e.rs index 4df7a00..053487d 100644 --- a/tests/module_e2e.rs +++ b/tests/module_e2e.rs @@ -5,12 +5,12 @@ use std::time::Duration; -use tinydocs::bus::{BUS_NAME, OBJECT_PATH}; -use tinydocs::docx::{DocumentSection, DocumentSpec}; +use tinybus::Connection; use tinybus::broker::Broker; use tinybus::module::{ModuleHost, ModuleState}; use tinybus::transport::memory::MemoryBus; -use tinybus::Connection; +use tinydocs::bus::{BUS_NAME, OBJECT_PATH}; +use tinydocs::docx::{DocumentSection, DocumentSpec}; #[tokio::test(flavor = "multi_thread", worker_threads = 2)] #[ignore = "requires TINYDOCS_TEST_MODULE to point at the built cdylib"] From bf7b69d5063029678fd4aac9859f699735a10d89 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:14:05 +0300 Subject: [PATCH 04/18] feat(bus): add TinyBus module support with CI and release automation Introduce an optional `module` feature that builds TinyDocs as a loadable TinyBus dynamic library, exposing DOCX generation through the TinyBus ABI. Add a CI job that builds the module and runs an end-to-end test against the real TinyBus loader, and extend the release workflow to build native modules for Linux, macOS, and Windows, attaching them as assets to GitHub releases. Update documentation and roadmap to reflect the new capability. Auto-committed-on: dragonfly Co-authored-by: Medulla --- .github/workflows/ci.yml | 21 +++++++++++ .github/workflows/release.yml | 68 +++++++++++++++++++++++++++++++++ AGENTS.md | 1 + README.md | 36 +++++++++++++++++- ROADMAP.md | 8 +++- docs/plans/tinybus-module.md | 31 +++++++++++++++ docs/specs/tinybus-module.md | 71 +++++++++++++++++++++++++++++++++++ src/bus/mod.rs | 6 +++ 8 files changed, 239 insertions(+), 3 deletions(-) create mode 100644 docs/plans/tinybus-module.md create mode 100644 docs/specs/tinybus-module.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62625b2..771c36b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,6 +49,27 @@ jobs: - name: Test default features run: cargo test + module-e2e: + name: TinyBus module E2E + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + with: + persist-credentials: false + submodules: true + + - uses: dtolnay/rust-toolchain@stable + + - uses: Swatinem/rust-cache@v2 + + - name: Build the loadable module + run: cargo build --locked --release --features module + + - name: Load the module and call GenerateDocx + env: + TINYDOCS_TEST_MODULE: ${{ github.workspace }}/target/release/libtinydocs.so + run: cargo test --locked --all-features --test module_e2e -- --ignored + docs: name: Docs runs-on: ubuntu-latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4c60ed4..f267631 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,6 +25,8 @@ jobs: if: ${{ github.ref == 'refs/heads/main' }} runs-on: ubuntu-latest environment: Production + outputs: + tag: ${{ steps.version.outputs.tag }} steps: - uses: actions/checkout@v7 with: @@ -136,3 +138,69 @@ jobs: run: cargo publish --locked env: CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + + build-modules: + name: Build module (${{ matrix.os }}) + needs: publish + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + library: libtinydocs.so + - os: macos-latest + library: libtinydocs.dylib + - os: windows-latest + library: tinydocs.dll + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v7 + with: + ref: ${{ needs.publish.outputs.tag }} + persist-credentials: false + submodules: true + + - uses: dtolnay/rust-toolchain@stable + + - uses: Swatinem/rust-cache@v2 + + - name: Build loadable module + run: cargo build --locked --release --features module + + - name: Name release asset + id: asset + shell: bash + env: + RELEASE_TAG: ${{ needs.publish.outputs.tag }} + SOURCE_LIBRARY: ${{ matrix.library }} + run: | + set -euo pipefail + host_target="$(rustc -vV | sed -n 's/^host: //p')" + extension="${SOURCE_LIBRARY##*.}" + asset="tinydocs-${RELEASE_TAG}-${host_target}.${extension}" + cp "target/release/${SOURCE_LIBRARY}" "$asset" + echo "path=${asset}" >> "$GITHUB_OUTPUT" + + - uses: actions/upload-artifact@v4 + with: + name: tinydocs-module-${{ runner.os }} + path: ${{ steps.asset.outputs.path }} + if-no-files-found: error + + github-release: + name: Upload module binaries + needs: [publish, build-modules] + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@v5 + with: + pattern: tinydocs-module-* + merge-multiple: true + path: release-assets + + - name: Create GitHub release + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ needs.publish.outputs.tag }} + GH_REPO: ${{ github.repository }} + run: gh release create "$RELEASE_TAG" release-assets/* --verify-tag --generate-notes diff --git a/AGENTS.md b/AGENTS.md index 93479ff..c52495b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -33,6 +33,7 @@ This is a Rust 2024 library crate rooted at `Cargo.toml`. src/ ├── lib.rs # crate docs + the entire public re-export surface ├── error/mod.rs # crate-wide `Error` and `Result` +├── bus/ # optional TinyBus service and module ABI exports └── / # one directory per feature area ├── mod.rs # module docs, wiring, smallest useful public API ├── types.rs # substantial type definitions diff --git a/README.md b/README.md index b0292c1..1f5d707 100644 --- a/README.md +++ b/README.md @@ -68,11 +68,41 @@ multi-hundred-megabyte document in memory. `DocumentSpec::validate` is public and runs before any synthesis, so a host can reject a bad tool call at its own boundary without paying for a blocking hop. +## TinyBus module + +The opt-in `module` feature builds TinyDocs as a trusted in-process TinyBus +module while retaining the ordinary Rust library: + +```sh +cargo build --release --features module +``` + +The native artifact is `target/release/libtinydocs.so` on Linux, +`libtinydocs.dylib` on macOS, or `tinydocs.dll` on Windows. Load it with a +TinyBus host built with its `modules` feature. It claims +`ai.tinyhumans.tinydocs.Docx` at `/ai/tinyhumans/tinydocs/Docx` and exposes: + +```text +GenerateDocx(DocumentSpec) -> Vec +``` + +The release workflow attaches a native module for Linux, macOS, and Windows to +each GitHub release. TinyBus modules are target-specific and trusted: download +the artifact matching the host, and install it only from a trusted release. + +Run the real loader test locally after building the release artifact: + +```sh +TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs.so" \ + cargo test --all-features --test module_e2e -- --ignored +``` + ## Feature flags | Feature | Default | Gates | | --- | --- | --- | | `docx` | on | `.docx` synthesis via `docx-rs` | +| `module` | off | TinyBus ABI, runtime, and loadable dynamic library | ## Layout @@ -86,8 +116,12 @@ src/ ├── mod.rs # `generate` + spec validation ├── types.rs # `DocumentSpec`, `DocumentSection`, limits └── test.rs +├── bus/ +│ ├── mod.rs # TinyBus service + module ABI exports +│ └── test.rs tests/ -└── public_api.rs # integration tests against the public API only +├── public_api.rs # integration tests against the public API only +└── module_e2e.rs # real TinyBus dynamic-loader test examples/ └── basic.rs # compiled and linted in CI ``` diff --git a/ROADMAP.md b/ROADMAP.md index 3c2032d..6e5da84 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -12,11 +12,15 @@ out of scope. A roadmap that lists everything is a roadmap nobody trusts. - lint configuration in `[lints]`, enforced identically locally and in CI - CI: format, clippy, build, test, rustdoc, MSRV, and supply-chain checks - a manual release workflow that versions, tags, and publishes to crates.io +- a TinyBus-loadable native module exposing DOCX generation +- native Linux, macOS, and Windows module assets on GitHub releases +- end-to-end coverage through TinyBus's real dynamic loader and broker ## Next -- the first real feature area, replacing the placeholder `greeting` module -- module-level `README.md` and `docs/spec/` entries as modules grow +- path or file-descriptor transfer for document formats that outgrow the bus + frame limit +- additional document formats behind focused feature flags ## Out Of Scope diff --git a/docs/plans/tinybus-module.md b/docs/plans/tinybus-module.md new file mode 100644 index 0000000..912b166 --- /dev/null +++ b/docs/plans/tinybus-module.md @@ -0,0 +1,31 @@ +# TinyBus module implementation plan + +Specification: [`../specs/tinybus-module.md`](../specs/tinybus-module.md) + +Goal: ship TinyDocs as a tested TinyBus dynamic module without changing the +default library dependency graph. + +## Completed work + +- [x] Advance `vendor/tinybus` to canonical `main` with module ABI v1. +- [x] Add optional TinyBus SDK, host, macro, and runtime dependencies. +- [x] Emit both `rlib` and `cdylib` crate types. +- [x] Add the typed DOCX service and stable bus identity. +- [x] Preserve domain-specific errors at the wire boundary. +- [x] Add unit coverage for identity, dispatch, and error mapping. +- [x] Add an ignored integration test that loads the built native artifact. +- [x] Run that real-loader test in CI. +- [x] Build and upload Linux, macOS, and Windows assets during release. +- [x] Document build, loading, trust, and payload constraints. + +## Verification + +```sh +cargo fmt --all -- --check +cargo clippy --all-targets --all-features -- -D warnings +cargo build --all-targets --all-features +cargo test --all-features +cargo build --locked --release --features module +TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs.so" \ + cargo test --locked --all-features --test module_e2e -- --ignored +``` diff --git a/docs/specs/tinybus-module.md b/docs/specs/tinybus-module.md new file mode 100644 index 0000000..5fdb8e4 --- /dev/null +++ b/docs/specs/tinybus-module.md @@ -0,0 +1,71 @@ +# TinyBus module + +Status: Implemented + +Owner: TinyDocs maintainers + +## Problem + +TinyDocs must be installable as a compiled TinyBus module so a host can use +document generation without linking the document stack into its own binary. +The released artifact must exercise the same ABI and loading path used in +production. + +## Goals + +- Preserve the existing pure Rust library API. +- Build a target-specific dynamic library implementing TinyBus module ABI v1. +- Expose typed DOCX generation through a stable bus identity. +- Publish native module artifacts with each GitHub release. +- Test loading and calling the compiled artifact through a real broker. + +## Non-goals + +- Loading untrusted third-party modules safely. +- Stable ABI compatibility across TinyBus ABI revisions. +- Streaming or file-descriptor transfer in this first interface. +- Running TinyDocs as a separate socket process. + +## Behavior + +The `module` Cargo feature implies `docx` and builds the library as a `cdylib`. +The module claims `ai.tinyhumans.tinydocs.Docx`, serves the object path +`/ai/tinyhumans/tinydocs/Docx`, and exports one method: + +```text +GenerateDocx(DocumentSpec) -> Vec +``` + +The argument is the same Serde document contract used by the Rust API. A +successful response contains a complete DOCX zip container. Invalid input and +writer failures use the distinct wire names +`ai.tinyhumans.tinydocs.Error.InvalidInput` and +`ai.tinyhumans.tinydocs.Error.GenerationFailed`. + +Generation is CPU-bound and runs on the module runtime's blocking pool. The +module itself retains no document state between calls. + +## Invariants and constraints + +- The vendored TinyBus gitlink is the ABI source of truth. +- Manifest methods and generated dispatch members must remain identical. +- No Rust value crosses the dynamic-library ABI boundary. +- The native artifact must match the host target and TinyBus compatibility + gate. +- Message payloads remain subject to TinyBus's 16 MiB frame cap. A future + format that can exceed it must use path or file-descriptor transfer. +- Dynamic modules are trusted code with the host process's privileges. + +## Acceptance criteria + +- `cargo build --release --features module` emits the platform dynamic library. +- TinyBus `ModuleHost` admits that artifact and reaches `ready` state. +- A proxy call to `GenerateDocx` returns bytes beginning with the DOCX `PK` + signature. +- CI executes that loader test on Linux. +- A release uploads one native module asset from each supported runner OS. + +## Open questions + +None blocking this version. Bulk transfer becomes a separate protocol change +if a future format approaches the frame cap. diff --git a/src/bus/mod.rs b/src/bus/mod.rs index b1151d4..c1c02d3 100644 --- a/src/bus/mod.rs +++ b/src/bus/mod.rs @@ -60,6 +60,12 @@ async fn setup(connection: Connection) -> BusResult<()> { Ok(()) } +// The SDK generates three public, revisioned C ABI symbols. Their contract is +// documented by TinyBus rather than as Rust-callable API items in this crate. +#[expect( + missing_docs, + reason = "generated TinyBus ABI symbols are documented by the module SDK" +)] tinybus_module::module_export! { setup = setup, worker_threads = 2, From 0cc97207dc8905ec45c08cc8c3e6c390c1c229ac Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:14:27 +0300 Subject: [PATCH 05/18] =?UTF-8?q?fix(diagram):=20correct=20tree=E2=80=91dr?= =?UTF-8?q?awing=20character=20for=20docx=20directory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ASCII tree in the README used a closing corner character for the docx directory entry, which made it appear as the last item in the listing. The character has been changed to a tee junction so the tree correctly indicates that additional entries follow below. Auto-committed-on: dragonfly Co-authored-by: Medulla --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f5d707..2f06624 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ src/ ├── error/ │ ├── mod.rs # crate-wide `Error` and `Result` │ └── test.rs -└── docx/ +├── docx/ ├── mod.rs # `generate` + spec validation ├── types.rs # `DocumentSpec`, `DocumentSection`, limits └── test.rs From 665ad2fc88de40b5f2024853c4741f9f3f9f1b4f Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:15:11 +0300 Subject: [PATCH 06/18] fix(bus): wrap generated C ABI symbols in a private module The `module_export!` macro now lives inside a private `mod exports` block so the `#[allow]` lint exception cannot accidentally suppress warnings for undocumented Rust API items. The `map_error` helper was changed to accept a reference instead of an owned value, and the test was updated accordingly. Auto-committed-on: dragonfly Co-authored-by: Medulla --- src/bus/mod.rs | 44 ++++++++++++++++++++++++-------------------- src/bus/test.rs | 8 +++++--- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/bus/mod.rs b/src/bus/mod.rs index c1c02d3..d04ff54 100644 --- a/src/bus/mod.rs +++ b/src/bus/mod.rs @@ -1,12 +1,12 @@ -//! TinyBus module boundary for document synthesis. +//! `TinyBus` module boundary for document synthesis. //! //! Enabling the `module` feature turns the crate's `cdylib` output into a -//! trusted in-process TinyBus module. The module owns no persistent state and +//! trusted in-process `TinyBus` module. The module owns no persistent state and //! exposes one object: [`GenerateDocx`](TinyDocs::generate_docx) accepts the //! same typed [`DocumentSpec`] as the Rust API and returns the complete DOCX //! bytes. //! -//! The TinyBus wire format has a 16 MiB frame limit. [`DocumentSpec`]'s +//! The `TinyBus` wire format has a 16 MiB frame limit. [`DocumentSpec`]'s //! aggregate text limit keeps normal output comfortably below that boundary; //! a larger future document format should use a path or file-descriptor based //! transfer instead of increasing the bus frame cap. @@ -16,10 +16,10 @@ use tinybus::{Connection, Error as BusError, Result as BusResult}; use crate::Error; use crate::docx::{self, DocumentSpec}; -/// Well-known name and interface exported by the TinyDocs module. +/// Well-known name and interface exported by the `TinyDocs` module. pub const BUS_NAME: &str = "ai.tinyhumans.tinydocs.Docx"; -/// Object path exported by the TinyDocs module. +/// Object path exported by the `TinyDocs` module. pub const OBJECT_PATH: &str = "/ai/tinyhumans/tinydocs/Docx"; const INVALID_INPUT_ERROR: &str = "ai.tinyhumans.tinydocs.Error.InvalidInput"; @@ -37,11 +37,11 @@ impl TinyDocs { name: GENERATION_FAILED_ERROR.to_string(), message: "document generation worker failed".to_string(), })? - .map_err(map_error) + .map_err(|error| map_error(&error)) } } -fn map_error(error: Error) -> BusError { +fn map_error(error: &Error) -> BusError { let name = match error { Error::InvalidInput { .. } => INVALID_INPUT_ERROR, Error::GenerationFailed { .. } => GENERATION_FAILED_ERROR, @@ -60,21 +60,25 @@ async fn setup(connection: Connection) -> BusResult<()> { Ok(()) } -// The SDK generates three public, revisioned C ABI symbols. Their contract is -// documented by TinyBus rather than as Rust-callable API items in this crate. -#[expect( +// Isolate the three generated public C symbols so the lint exception cannot +// hide undocumented Rust API. Their contract is TinyBus ABI v1, and none is a +// Rust-callable export from this private module. +#[allow( missing_docs, - reason = "generated TinyBus ABI symbols are documented by the module SDK" + unreachable_pub, + reason = "generated C ABI symbols are documented by the TinyBus module SDK" )] -tinybus_module::module_export! { - setup = setup, - worker_threads = 2, - provides = ["ai.tinyhumans.tinydocs.Docx"], - methods = ["GenerateDocx"], - signals = [], - requires = [], - optional = [], - lazy = false, +mod exports { + tinybus_module::module_export! { + setup = super::setup, + worker_threads = 2, + provides = ["ai.tinyhumans.tinydocs.Docx"], + methods = ["GenerateDocx"], + signals = [], + requires = [], + optional = [], + lazy = false, + } } #[cfg(test)] diff --git a/src/bus/test.rs b/src/bus/test.rs index 1eee6fd..327ee4c 100644 --- a/src/bus/test.rs +++ b/src/bus/test.rs @@ -1,4 +1,4 @@ -//! Unit tests for the TinyBus service declaration. +//! Unit tests for the `TinyBus` service declaration. #![allow(clippy::unwrap_used)] @@ -20,9 +20,11 @@ fn service_identity_is_valid_and_dispatch_matches_the_manifest() { #[test] fn domain_errors_keep_distinct_wire_names() { - let invalid = map_error(Error::invalid_input("title", "must not be empty")); + let invalid_error = Error::invalid_input("title", "must not be empty"); + let invalid = map_error(&invalid_error); assert_eq!(invalid.wire_name(), INVALID_INPUT_ERROR); - let failed = map_error(Error::generation_failed("writer stopped")); + let generation_error = Error::generation_failed("writer stopped"); + let failed = map_error(&generation_error); assert_eq!(failed.wire_name(), GENERATION_FAILED_ERROR); } From 682d01dcf48d144a1b383f72cba368130e342628 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:15:26 +0300 Subject: [PATCH 07/18] fix(test): backtick-quote module and bus names in e2e test doc comment The module-level doc comment in the end-to-end test now wraps `TinyDocs` and `TinyBus` in backticks so that the names are rendered as code in generated documentation, improving readability. Auto-committed-on: dragonfly Co-authored-by: Medulla --- tests/module_e2e.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/module_e2e.rs b/tests/module_e2e.rs index 053487d..747bb62 100644 --- a/tests/module_e2e.rs +++ b/tests/module_e2e.rs @@ -1,4 +1,4 @@ -//! End-to-end test for loading the built TinyDocs dynamic module into TinyBus. +//! End-to-end test for loading the built `TinyDocs` dynamic module into `TinyBus`. #![cfg(feature = "module")] #![allow(clippy::unwrap_used, clippy::expect_used)] From ade31531734b3c7635938f88466f479e80f965d3 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:17:29 +0300 Subject: [PATCH 08/18] fix(bus): remove broken intra-doc link in module docs The module-level documentation contained a Rust intra-doc link that could not resolve, causing a documentation build warning. The link has been replaced with plain backtick formatting to keep the reference readable without relying on a broken cross-reference. Auto-committed-on: dragonfly Co-authored-by: Medulla --- src/bus/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bus/mod.rs b/src/bus/mod.rs index d04ff54..eab613a 100644 --- a/src/bus/mod.rs +++ b/src/bus/mod.rs @@ -2,7 +2,7 @@ //! //! Enabling the `module` feature turns the crate's `cdylib` output into a //! trusted in-process `TinyBus` module. The module owns no persistent state and -//! exposes one object: [`GenerateDocx`](TinyDocs::generate_docx) accepts the +//! exposes one object: `GenerateDocx` accepts the //! same typed [`DocumentSpec`] as the Rust API and returns the complete DOCX //! bytes. //! From d27f28eedc257cb956293965c991e7fad64af05d Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:19:20 +0300 Subject: [PATCH 09/18] refactor: extract TinyBus module into a separate workspace crate The TinyBus module code and its associated tests have been moved from the main library into a dedicated `crates/tinydocs-module` workspace member. This removes the `module` feature flag and the `tinybus`, `tinybus-module`, and `tokio` dependencies from the root crate, keeping the core library focused on document generation without the bus runtime. Auto-committed-on: dragonfly Co-authored-by: Medulla --- Cargo.toml | 26 +++++++------------ crates/tinydocs-module/Cargo.toml | 25 ++++++++++++++++++ crates/tinydocs-module/src/lib.rs | 9 +++++++ .../tinydocs-module/src/service}/mod.rs | 15 +++++------ .../tinydocs-module/src/service}/test.rs | 5 +--- .../tinydocs-module/tests}/module_e2e.rs | 9 +++---- src/lib.rs | 5 ---- 7 files changed, 55 insertions(+), 39 deletions(-) create mode 100644 crates/tinydocs-module/Cargo.toml create mode 100644 crates/tinydocs-module/src/lib.rs rename {src/bus => crates/tinydocs-module/src/service}/mod.rs (86%) rename {src/bus => crates/tinydocs-module/src/service}/test.rs (88%) rename {tests => crates/tinydocs-module/tests}/module_e2e.rs (91%) diff --git a/Cargo.toml b/Cargo.toml index c248b09..9cbd79a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,10 +21,10 @@ exclude = [ "deny.toml", ] -[lib] -# Keep the ordinary Rust library while also allowing the `module` feature to -# produce the native artifact consumed by TinyBus's dynamic module loader. -crate-type = ["rlib", "cdylib"] +[workspace] +members = ["crates/tinydocs-module"] +default-members = [".", "crates/tinydocs-module"] +resolver = "3" [dependencies] # Derive macros for the crate-wide error type in `src/error/mod.rs`. Every @@ -37,13 +37,6 @@ serde = { version = "1", features = ["derive"] } # OOXML `.docx` synthesis. Optional: exclusive to the `docx` feature so a host # that only needs extraction does not pull the writer stack. docx-rs = { version = "0.4.20", optional = true } -# TinyBus provides the typed service interface and the host/module ABI. These -# stay optional so ordinary document generation does not pull in a bus runtime. -tinybus = { version = "0.1.0", path = "vendor/tinybus/crates/tinybus", default-features = false, features = ["macros", "modules"], optional = true } -# The module-side SDK owns the runtime and exports the stable C ABI entrypoints. -tinybus-module = { version = "0.1.0", path = "vendor/tinybus/crates/tinybus-module", optional = true } -# Module methods move CPU-bound document synthesis onto Tokio's blocking pool. -tokio = { version = "1", features = ["macros", "rt-multi-thread"], optional = true } [dev-dependencies] # `.docx` output is a zip container; the tests re-open the produced bytes and @@ -64,19 +57,17 @@ required-features = ["docx"] default = ["docx"] # `.docx` generation via `docx-rs`. docx = ["dep:docx-rs"] -# Trusted in-process TinyBus module exposing document synthesis over the bus. -module = ["docx", "dep:tinybus", "dep:tinybus-module", "dep:tokio"] # Lints apply to the whole crate and to every target. CI runs clippy with # `-D warnings`, so anything set to "warn" here fails the build in CI. -[lints.rust] +[workspace.lints.rust] unsafe_code = "forbid" missing_docs = "warn" missing_debug_implementations = "warn" unreachable_pub = "warn" rust_2018_idioms = { level = "warn", priority = -1 } -[lints.clippy] +[workspace.lints.clippy] all = { level = "warn", priority = -1 } pedantic = { level = "warn", priority = -1 } # Library code must not panic on its own; tests and examples may. @@ -93,10 +84,13 @@ doc_markdown = "warn" # `#[must_use]` on pure public functions. must_use_candidate = "warn" -[lints.rustdoc] +[workspace.lints.rustdoc] broken_intra_doc_links = "warn" private_intra_doc_links = "warn" +[lints] +workspace = true + [profile.release] # Cross-crate optimization and smaller, faster binaries for release builds. lto = "thin" diff --git a/crates/tinydocs-module/Cargo.toml b/crates/tinydocs-module/Cargo.toml new file mode 100644 index 0000000..41c0441 --- /dev/null +++ b/crates/tinydocs-module/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "tinydocs-module" +version = "0.1.0" +edition = "2024" +rust-version = "1.88" +license = "GPL-3.0-only" +description = "Trusted TinyBus module adapter for TinyDocs." +repository = "https://github.com/tinyhumansai/tinydocs" +publish = false + +[lib] +crate-type = ["rlib", "cdylib"] + +[dependencies] +# The pure document library remains independently publishable and bus-agnostic. +tinydocs = { path = "../..", default-features = false, features = ["docx"] } +# TinyBus provides the typed service interface and dynamic module host ABI. +tinybus = { version = "0.1.0", path = "../../vendor/tinybus/crates/tinybus", default-features = false, features = ["macros", "modules"] } +# The module-side SDK owns its runtime and exports the stable C entrypoints. +tinybus-module = { version = "0.1.0", path = "../../vendor/tinybus/crates/tinybus-module" } +# Module methods move CPU-bound document synthesis onto Tokio's blocking pool. +tokio = { version = "1", features = ["macros", "rt-multi-thread"] } + +[lints] +workspace = true diff --git a/crates/tinydocs-module/src/lib.rs b/crates/tinydocs-module/src/lib.rs new file mode 100644 index 0000000..86d9943 --- /dev/null +++ b/crates/tinydocs-module/src/lib.rs @@ -0,0 +1,9 @@ +//! Loadable `TinyBus` module adapter for `TinyDocs`. +//! +//! This private workspace crate keeps the vendored `TinyBus` dependency out of +//! the independently published `tinydocs` crate. Its `cdylib` output is the +//! target-specific binary distributed in GitHub releases. + +mod service; + +pub use service::{BUS_NAME, OBJECT_PATH}; diff --git a/src/bus/mod.rs b/crates/tinydocs-module/src/service/mod.rs similarity index 86% rename from src/bus/mod.rs rename to crates/tinydocs-module/src/service/mod.rs index eab613a..32a5166 100644 --- a/src/bus/mod.rs +++ b/crates/tinydocs-module/src/service/mod.rs @@ -1,21 +1,18 @@ -//! `TinyBus` module boundary for document synthesis. +//! `TinyBus` service boundary for document synthesis. //! -//! Enabling the `module` feature turns the crate's `cdylib` output into a -//! trusted in-process `TinyBus` module. The module owns no persistent state and -//! exposes one object: `GenerateDocx` accepts the -//! same typed [`DocumentSpec`] as the Rust API and returns the complete DOCX -//! bytes. +//! The module owns no persistent state and exposes one object: `GenerateDocx` +//! accepts the same typed [`DocumentSpec`] as the Rust API and returns the +//! complete DOCX bytes. //! //! The `TinyBus` wire format has a 16 MiB frame limit. [`DocumentSpec`]'s //! aggregate text limit keeps normal output comfortably below that boundary; //! a larger future document format should use a path or file-descriptor based //! transfer instead of increasing the bus frame cap. +use tinydocs::Error; +use tinydocs::docx::{self, DocumentSpec}; use tinybus::{Connection, Error as BusError, Result as BusResult}; -use crate::Error; -use crate::docx::{self, DocumentSpec}; - /// Well-known name and interface exported by the `TinyDocs` module. pub const BUS_NAME: &str = "ai.tinyhumans.tinydocs.Docx"; diff --git a/src/bus/test.rs b/crates/tinydocs-module/src/service/test.rs similarity index 88% rename from src/bus/test.rs rename to crates/tinydocs-module/src/service/test.rs index 327ee4c..b2920b1 100644 --- a/src/bus/test.rs +++ b/crates/tinydocs-module/src/service/test.rs @@ -12,10 +12,7 @@ fn service_identity_is_valid_and_dispatch_matches_the_manifest() { assert!(tinybus::ObjectPath::new(OBJECT_PATH).is_ok()); let members = TinyDocs.members(); - assert_eq!( - members, - &[tinybus::MemberName::new("GenerateDocx").unwrap()] - ); + assert_eq!(members, &[tinybus::MemberName::new("GenerateDocx").unwrap()]); } #[test] diff --git a/tests/module_e2e.rs b/crates/tinydocs-module/tests/module_e2e.rs similarity index 91% rename from tests/module_e2e.rs rename to crates/tinydocs-module/tests/module_e2e.rs index 747bb62..d6411c8 100644 --- a/tests/module_e2e.rs +++ b/crates/tinydocs-module/tests/module_e2e.rs @@ -1,16 +1,15 @@ -//! End-to-end test for loading the built `TinyDocs` dynamic module into `TinyBus`. +//! End-to-end test for loading the built `TinyDocs` module into `TinyBus`. -#![cfg(feature = "module")] #![allow(clippy::unwrap_used, clippy::expect_used)] use std::time::Duration; +use tinydocs::docx::{DocumentSection, DocumentSpec}; +use tinydocs_module::{BUS_NAME, OBJECT_PATH}; use tinybus::Connection; use tinybus::broker::Broker; use tinybus::module::{ModuleHost, ModuleState}; use tinybus::transport::memory::MemoryBus; -use tinydocs::bus::{BUS_NAME, OBJECT_PATH}; -use tinydocs::docx::{DocumentSection, DocumentSpec}; #[tokio::test(flavor = "multi_thread", worker_threads = 2)] #[ignore = "requires TINYDOCS_TEST_MODULE to point at the built cdylib"] @@ -22,7 +21,7 @@ async fn built_cdylib_loads_and_generates_a_docx_over_the_bus() { let broker_task = broker.spawn(bus.clone()); let modules = ModuleHost::new(broker); let loaded = modules.load_file(artifact).expect("module should load"); - assert_eq!(loaded.name, "tinydocs"); + assert_eq!(loaded.name, "tinydocs-module"); let client = Connection::connect(bus.connect().await.unwrap()) .await diff --git a/src/lib.rs b/src/lib.rs index 7ba190e..f1221b8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -59,15 +59,10 @@ //! //! - `docx` (default) — `.docx` synthesis via `docx-rs`. Turning it off drops //! the whole OOXML writer stack. -//! - `module` — builds the crate as a TinyBus-loadable dynamic library and -//! exposes [`bus::GenerateDocx`](crate::bus) over the bus. mod error; #[cfg(feature = "docx")] pub mod docx; -#[cfg(feature = "module")] -pub mod bus; - pub use error::{Error, Result}; From 90568539e75830ba1f6d3911b505c56ab2e87d6d Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:19:59 +0300 Subject: [PATCH 10/18] refactor: extract TinyBus module into a private workspace crate Extract the TinyBus cdylib adapter from the main library into a private `tinydocs-module` workspace crate, removing the `module` feature flag and the `src/bus/` directory. This keeps vendored TinyBus dependencies out of the published crate's manifest while preserving the same build and test commands, now scoped with `--package tinydocs-module`. The shared library artifact is renamed from `libtinydocs` to `libtinydocs_module` to match the new crate name. Auto-committed-on: dragonfly Co-authored-by: Medulla --- .github/workflows/ci.yml | 6 +++--- .github/workflows/release.yml | 19 ++++++++++--------- AGENTS.md | 2 +- README.md | 25 +++++++++++-------------- docs/plans/tinybus-module.md | 11 ++++++----- docs/specs/tinybus-module.md | 9 ++++++--- 6 files changed, 37 insertions(+), 35 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 771c36b..df4db0c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,12 +63,12 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build the loadable module - run: cargo build --locked --release --features module + run: cargo build --locked --release --package tinydocs-module - name: Load the module and call GenerateDocx env: - TINYDOCS_TEST_MODULE: ${{ github.workspace }}/target/release/libtinydocs.so - run: cargo test --locked --all-features --test module_e2e -- --ignored + TINYDOCS_TEST_MODULE: ${{ github.workspace }}/target/release/libtinydocs_module.so + run: cargo test --locked --package tinydocs-module --test module_e2e -- --ignored docs: name: Docs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f267631..9757818 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -60,8 +60,8 @@ jobs: set -euo pipefail metadata="$(cargo metadata --format-version 1 --no-deps)" - crate_name="$(jq -r '.packages[0].name' <<< "$metadata")" - current_version="$(jq -r '.packages[0].version' <<< "$metadata")" + crate_name="tinydocs" + current_version="$(jq -r '.packages[] | select(.name == "tinydocs") | .version' <<< "$metadata")" if [[ -z "$current_version" || "$current_version" == "null" ]]; then echo "Could not resolve the current crate version" >&2 exit 1 @@ -110,6 +110,7 @@ jobs: run: | set -euo pipefail perl -0pi -e 's/(\[package\][\s\S]*?\nversion = ")[^"]+(")/$1$ENV{NEXT_VERSION}$2/' Cargo.toml + perl -0pi -e 's/(\[package\][\s\S]*?\nversion = ")[^"]+(")/$1$ENV{NEXT_VERSION}$2/' crates/tinydocs-module/Cargo.toml cargo update -p "$CRATE_NAME" --precise "$NEXT_VERSION" - name: Commit version bump and tag @@ -119,12 +120,12 @@ jobs: set -euo pipefail git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add Cargo.toml Cargo.lock + git add Cargo.toml Cargo.lock crates/tinydocs-module/Cargo.toml git commit -m "Release ${RELEASE_TAG}" git tag -a "${RELEASE_TAG}" -m "Release ${RELEASE_TAG}" - name: Package crate - run: cargo package --locked + run: cargo package --locked --package tinydocs - name: Push release commit and tag env: @@ -135,7 +136,7 @@ jobs: git push origin "${RELEASE_TAG}" - name: Publish to crates.io - run: cargo publish --locked + run: cargo publish --locked --package tinydocs env: CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} @@ -147,11 +148,11 @@ jobs: matrix: include: - os: ubuntu-latest - library: libtinydocs.so + library: libtinydocs_module.so - os: macos-latest - library: libtinydocs.dylib + library: libtinydocs_module.dylib - os: windows-latest - library: tinydocs.dll + library: tinydocs_module.dll runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v7 @@ -165,7 +166,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Build loadable module - run: cargo build --locked --release --features module + run: cargo build --locked --release --package tinydocs-module - name: Name release asset id: asset diff --git a/AGENTS.md b/AGENTS.md index c52495b..e659e85 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -33,13 +33,13 @@ This is a Rust 2024 library crate rooted at `Cargo.toml`. src/ ├── lib.rs # crate docs + the entire public re-export surface ├── error/mod.rs # crate-wide `Error` and `Result` -├── bus/ # optional TinyBus service and module ABI exports └── / # one directory per feature area ├── mod.rs # module docs, wiring, smallest useful public API ├── types.rs # substantial type definitions └── test.rs # module-local unit tests tests/ # integration tests against the public API only examples/ # runnable, compiled-in-CI usage examples +crates/tinydocs-module/ # private TinyBus cdylib adapter vendor/tinybus/ # pinned TinyBus source; optional until wired by a project docs/ ├── specs/ # behavior and architecture specifications diff --git a/README.md b/README.md index 2f06624..2992b18 100644 --- a/README.md +++ b/README.md @@ -70,16 +70,16 @@ reject a bad tool call at its own boundary without paying for a blocking hop. ## TinyBus module -The opt-in `module` feature builds TinyDocs as a trusted in-process TinyBus -module while retaining the ordinary Rust library: +The private `tinydocs-module` workspace crate builds TinyDocs as a trusted +in-process TinyBus module while keeping the published library bus-agnostic: ```sh -cargo build --release --features module +cargo build --release --package tinydocs-module ``` -The native artifact is `target/release/libtinydocs.so` on Linux, -`libtinydocs.dylib` on macOS, or `tinydocs.dll` on Windows. Load it with a -TinyBus host built with its `modules` feature. It claims +The native artifact is `target/release/libtinydocs_module.so` on Linux, +`libtinydocs_module.dylib` on macOS, or `tinydocs_module.dll` on Windows. Load +it with a TinyBus host built with its `modules` feature. It claims `ai.tinyhumans.tinydocs.Docx` at `/ai/tinyhumans/tinydocs/Docx` and exposes: ```text @@ -93,8 +93,8 @@ the artifact matching the host, and install it only from a trusted release. Run the real loader test locally after building the release artifact: ```sh -TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs.so" \ - cargo test --all-features --test module_e2e -- --ignored +TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs_module.so" \ + cargo test --package tinydocs-module --test module_e2e -- --ignored ``` ## Feature flags @@ -102,7 +102,6 @@ TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs.so" \ | Feature | Default | Gates | | --- | --- | --- | | `docx` | on | `.docx` synthesis via `docx-rs` | -| `module` | off | TinyBus ABI, runtime, and loadable dynamic library | ## Layout @@ -116,12 +115,10 @@ src/ ├── mod.rs # `generate` + spec validation ├── types.rs # `DocumentSpec`, `DocumentSection`, limits └── test.rs -├── bus/ -│ ├── mod.rs # TinyBus service + module ABI exports -│ └── test.rs tests/ -├── public_api.rs # integration tests against the public API only -└── module_e2e.rs # real TinyBus dynamic-loader test +└── public_api.rs # integration tests against the public API only +crates/ +└── tinydocs-module/ # private TinyBus cdylib adapter + loader E2E test examples/ └── basic.rs # compiled and linted in CI ``` diff --git a/docs/plans/tinybus-module.md b/docs/plans/tinybus-module.md index 912b166..ba8c48e 100644 --- a/docs/plans/tinybus-module.md +++ b/docs/plans/tinybus-module.md @@ -8,8 +8,9 @@ default library dependency graph. ## Completed work - [x] Advance `vendor/tinybus` to canonical `main` with module ABI v1. -- [x] Add optional TinyBus SDK, host, macro, and runtime dependencies. -- [x] Emit both `rlib` and `cdylib` crate types. +- [x] Add a private adapter crate with TinyBus SDK, host, macro, and runtime + dependencies so `tinydocs` remains publishable. +- [x] Emit both `rlib` and `cdylib` adapter crate types. - [x] Add the typed DOCX service and stable bus identity. - [x] Preserve domain-specific errors at the wire boundary. - [x] Add unit coverage for identity, dispatch, and error mapping. @@ -25,7 +26,7 @@ cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo build --all-targets --all-features cargo test --all-features -cargo build --locked --release --features module -TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs.so" \ - cargo test --locked --all-features --test module_e2e -- --ignored +cargo build --locked --release --package tinydocs-module +TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs_module.so" \ + cargo test --locked --package tinydocs-module --test module_e2e -- --ignored ``` diff --git a/docs/specs/tinybus-module.md b/docs/specs/tinybus-module.md index 5fdb8e4..3d9f5aa 100644 --- a/docs/specs/tinybus-module.md +++ b/docs/specs/tinybus-module.md @@ -28,8 +28,10 @@ production. ## Behavior -The `module` Cargo feature implies `docx` and builds the library as a `cdylib`. -The module claims `ai.tinyhumans.tinydocs.Docx`, serves the object path +The private `tinydocs-module` workspace crate depends on the public library's +`docx` feature and builds as a `cdylib`. This separation keeps unpublished, +vendored TinyBus packages out of the crates.io package manifest. The module +claims `ai.tinyhumans.tinydocs.Docx`, serves the object path `/ai/tinyhumans/tinydocs/Docx`, and exports one method: ```text @@ -58,7 +60,8 @@ module itself retains no document state between calls. ## Acceptance criteria -- `cargo build --release --features module` emits the platform dynamic library. +- `cargo build --release --package tinydocs-module` emits the platform dynamic + library. - TinyBus `ModuleHost` admits that artifact and reaches `ready` state. - A proxy call to `GenerateDocx` returns bytes beginning with the DOCX `PK` signature. From 547baeafdfbd85770d73ea6583717ca408be1da5 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:20:14 +0300 Subject: [PATCH 11/18] chore: files changed Cargo.toml Auto-committed-on: dragonfly Co-authored-by: Medulla --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 9cbd79a..7ce60b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ exclude = [ [workspace] members = ["crates/tinydocs-module"] default-members = [".", "crates/tinydocs-module"] +exclude = ["vendor/tinybus"] resolver = "3" [dependencies] From 9302965b8449c9c35b41bc9056d372b4d6247567 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:20:22 +0300 Subject: [PATCH 12/18] chore(tinydocs-module): reorder imports and update dependencies The import order in service and test files has been adjusted to follow the convention of grouping external crate imports before internal ones, and the Cargo.lock reflects the addition of the `tinydocs` dependency alongside the `zip` crate for the module. Auto-committed-on: dragonfly Co-authored-by: Medulla --- Cargo.lock | 9 ++++++++- crates/tinydocs-module/src/service/mod.rs | 2 +- crates/tinydocs-module/src/service/test.rs | 5 ++++- crates/tinydocs-module/tests/module_e2e.rs | 4 ++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3a10681..5783deb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -503,10 +503,17 @@ dependencies = [ "serde", "serde_json", "thiserror", + "zip 2.4.2", +] + +[[package]] +name = "tinydocs-module" +version = "0.1.0" +dependencies = [ "tinybus", "tinybus-module", + "tinydocs", "tokio", - "zip 2.4.2", ] [[package]] diff --git a/crates/tinydocs-module/src/service/mod.rs b/crates/tinydocs-module/src/service/mod.rs index 32a5166..947a185 100644 --- a/crates/tinydocs-module/src/service/mod.rs +++ b/crates/tinydocs-module/src/service/mod.rs @@ -9,9 +9,9 @@ //! a larger future document format should use a path or file-descriptor based //! transfer instead of increasing the bus frame cap. +use tinybus::{Connection, Error as BusError, Result as BusResult}; use tinydocs::Error; use tinydocs::docx::{self, DocumentSpec}; -use tinybus::{Connection, Error as BusError, Result as BusResult}; /// Well-known name and interface exported by the `TinyDocs` module. pub const BUS_NAME: &str = "ai.tinyhumans.tinydocs.Docx"; diff --git a/crates/tinydocs-module/src/service/test.rs b/crates/tinydocs-module/src/service/test.rs index b2920b1..327ee4c 100644 --- a/crates/tinydocs-module/src/service/test.rs +++ b/crates/tinydocs-module/src/service/test.rs @@ -12,7 +12,10 @@ fn service_identity_is_valid_and_dispatch_matches_the_manifest() { assert!(tinybus::ObjectPath::new(OBJECT_PATH).is_ok()); let members = TinyDocs.members(); - assert_eq!(members, &[tinybus::MemberName::new("GenerateDocx").unwrap()]); + assert_eq!( + members, + &[tinybus::MemberName::new("GenerateDocx").unwrap()] + ); } #[test] diff --git a/crates/tinydocs-module/tests/module_e2e.rs b/crates/tinydocs-module/tests/module_e2e.rs index d6411c8..f346bc9 100644 --- a/crates/tinydocs-module/tests/module_e2e.rs +++ b/crates/tinydocs-module/tests/module_e2e.rs @@ -4,12 +4,12 @@ use std::time::Duration; -use tinydocs::docx::{DocumentSection, DocumentSpec}; -use tinydocs_module::{BUS_NAME, OBJECT_PATH}; use tinybus::Connection; use tinybus::broker::Broker; use tinybus::module::{ModuleHost, ModuleState}; use tinybus::transport::memory::MemoryBus; +use tinydocs::docx::{DocumentSection, DocumentSpec}; +use tinydocs_module::{BUS_NAME, OBJECT_PATH}; #[tokio::test(flavor = "multi_thread", worker_threads = 2)] #[ignore = "requires TINYDOCS_TEST_MODULE to point at the built cdylib"] From 6fd5f559739a5bd0591e4964d7376d0642833a47 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:20:33 +0300 Subject: [PATCH 13/18] feat(service): add catch-all error mapping for unknown errors Added a new error constant `MODULE_FAILED_ERROR` and a catch-all arm in the `map_error` function to handle any error variants not explicitly matched, ensuring that all errors are mapped to a valid D-Bus error name instead of causing a panic at runtime. Auto-committed-on: dragonfly Co-authored-by: Medulla --- crates/tinydocs-module/src/service/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/tinydocs-module/src/service/mod.rs b/crates/tinydocs-module/src/service/mod.rs index 947a185..5a36969 100644 --- a/crates/tinydocs-module/src/service/mod.rs +++ b/crates/tinydocs-module/src/service/mod.rs @@ -21,6 +21,7 @@ pub const OBJECT_PATH: &str = "/ai/tinyhumans/tinydocs/Docx"; const INVALID_INPUT_ERROR: &str = "ai.tinyhumans.tinydocs.Error.InvalidInput"; const GENERATION_FAILED_ERROR: &str = "ai.tinyhumans.tinydocs.Error.GenerationFailed"; +const MODULE_FAILED_ERROR: &str = "ai.tinyhumans.tinydocs.Error.ModuleFailed"; struct TinyDocs; @@ -42,6 +43,7 @@ fn map_error(error: &Error) -> BusError { let name = match error { Error::InvalidInput { .. } => INVALID_INPUT_ERROR, Error::GenerationFailed { .. } => GENERATION_FAILED_ERROR, + _ => MODULE_FAILED_ERROR, }; BusError::MethodFailed { name: name.to_string(), From 64e8b9ca7a196230b6fe22229c6ab5c0c877013b Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:32:59 +0300 Subject: [PATCH 14/18] ci: add file-level coverage enforcement and extend release pipeline Add a per-file 90% line coverage check to the CI workflow and extend the release pipeline to package TinyBus source and native bundles, replacing the previous per-platform module artifact uploads with a unified bundle that includes the TinyBus host binary, module, checksums, and documentation. Auto-committed-on: dragonfly Co-authored-by: Medulla --- .github/scripts/check-file-coverage.sh | 73 ++++++++++++++ .github/workflows/ci.yml | 13 +++ .github/workflows/release.yml | 134 +++++++++++++++++++------ 3 files changed, 190 insertions(+), 30 deletions(-) create mode 100644 .github/scripts/check-file-coverage.sh diff --git a/.github/scripts/check-file-coverage.sh b/.github/scripts/check-file-coverage.sh new file mode 100644 index 0000000..95da178 --- /dev/null +++ b/.github/scripts/check-file-coverage.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +set -euo pipefail + +minimum="${1:-90}" +report="${2:-coverage.json}" +workspace_root="$(pwd -P)/" +source_root="${workspace_root}src/" + +cargo llvm-cov \ + --locked \ + --all-targets \ + --all-features \ + --json \ + --output-path "$report" + +covered_files="$(jq --arg source_root "$source_root" ' + [ + .data[].files[] + | select(.filename | startswith($source_root)) + | select(.summary.lines.count > 0) + ] + | length +' "$report")" + +if [[ "$covered_files" -eq 0 ]]; then + echo "coverage report contains no files with executable lines under src/" >&2 + exit 1 +fi + +summary="$(jq -r --arg workspace_root "$workspace_root" --arg source_root "$source_root" ' + .data[].files[] + | select(.filename | startswith($source_root)) + | select(.summary.lines.count > 0) + | [ + (.filename | ltrimstr($workspace_root)), + (.summary.lines.percent | tostring), + (.summary.lines.covered | tostring), + (.summary.lines.count | tostring) + ] + | @tsv +' "$report")" + +printf 'File\tLine coverage\tCovered lines\tCoverable lines\n' +while IFS=$'\t' read -r file percent covered count; do + printf '%s\t%.2f%%\t%s\t%s\n' "$file" "$percent" "$covered" "$count" +done <<< "$summary" + +if [[ -n "${GITHUB_STEP_SUMMARY:-}" ]]; then + { + printf '### Per-file line coverage\n\n' + printf '| File | Coverage | Lines |\n' + printf '| --- | ---: | ---: |\n' + while IFS=$'\t' read -r file percent covered count; do + printf '| %s | %.2f%% | %s/%s |\n' "$file" "$percent" "$covered" "$count" + done <<< "$summary" + } >> "$GITHUB_STEP_SUMMARY" +fi + +failures="$(jq -r \ + --arg workspace_root "$workspace_root" \ + --arg source_root "$source_root" \ + --argjson minimum "$minimum" ' + .data[].files[] + | select(.filename | startswith($source_root)) + | select(.summary.lines.count > 0) + | select(.summary.lines.percent < $minimum) + | "\(.filename | ltrimstr($workspace_root)): \(.summary.lines.percent)%" + ' "$report")" + +if [[ -n "$failures" ]]; then + printf '\nFiles below %s%% line coverage:\n%s\n' "$minimum" "$failures" >&2 + exit 1 +fi diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index df4db0c..a8b8c72 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,8 @@ jobs: with: components: rustfmt, clippy + - uses: taiki-e/install-action@cargo-llvm-cov + - uses: Swatinem/rust-cache@v2 - name: Check formatting @@ -49,6 +51,17 @@ jobs: - name: Test default features run: cargo test + - name: Require 90% line coverage in every source file + run: .github/scripts/check-file-coverage.sh 90 coverage.json + + - name: Upload coverage report + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: coverage-json + path: coverage.json + if-no-files-found: ignore + module-e2e: name: TinyBus module E2E runs-on: ubuntu-latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9757818..c3c20cc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,10 @@ jobs: runs-on: ubuntu-latest environment: Production outputs: + crate_name: ${{ steps.version.outputs.crate_name }} + next_version: ${{ steps.version.outputs.next_version }} tag: ${{ steps.version.outputs.tag }} + tinybus_version: ${{ steps.version.outputs.tinybus_version }} steps: - uses: actions/checkout@v7 with: @@ -37,6 +40,8 @@ jobs: with: components: rustfmt, clippy + - uses: taiki-e/install-action@cargo-llvm-cov + - uses: Swatinem/rust-cache@v2 - name: Check formatting @@ -48,6 +53,9 @@ jobs: - name: Test run: cargo test --all-features + - name: Require 90% line coverage in every source file + run: .github/scripts/check-file-coverage.sh 90 coverage.json + - name: Build documentation env: RUSTDOCFLAGS: -D warnings @@ -62,10 +70,21 @@ jobs: metadata="$(cargo metadata --format-version 1 --no-deps)" crate_name="tinydocs" current_version="$(jq -r '.packages[] | select(.name == "tinydocs") | .version' <<< "$metadata")" + tinybus_version="$([ + cargo metadata \ + --manifest-path vendor/tinybus/Cargo.toml \ + --format-version 1 \ + --no-deps \ + | jq -r '.packages[] | select(.name == "tinybus") | .version' + )" if [[ -z "$current_version" || "$current_version" == "null" ]]; then echo "Could not resolve the current crate version" >&2 exit 1 fi + if [[ -z "$tinybus_version" || "$tinybus_version" == "null" ]]; then + echo "Could not resolve the TinyBus version" >&2 + exit 1 + fi IFS=. read -r major minor patch <<< "$current_version" case "${{ inputs.bump }}" in @@ -101,6 +120,7 @@ jobs: echo "current_version=${current_version}" echo "next_version=${next_version}" echo "tag=${tag}" + echo "tinybus_version=${tinybus_version}" } >> "$GITHUB_OUTPUT" - name: Update crate version @@ -127,6 +147,25 @@ jobs: - name: Package crate run: cargo package --locked --package tinydocs + - name: Package TinyBus source and module SDK + run: | + set -euo pipefail + tinybus_revision="$(git -C vendor/tinybus rev-parse --short=12 HEAD)" + git -C vendor/tinybus archive \ + --format=tar.gz \ + --prefix="tinybus-${tinybus_revision}/" \ + --output="$PWD/target/package/tinybus-source-${tinybus_revision}.tar.gz" \ + HEAD + + - name: Upload source packages + uses: actions/upload-artifact@v4 + with: + name: source-packages + path: | + target/package/${{ steps.version.outputs.crate_name }}-${{ steps.version.outputs.next_version }}.crate + target/package/tinybus-source-*.tar.gz + if-no-files-found: error + - name: Push release commit and tag env: RELEASE_TAG: ${{ steps.version.outputs.tag }} @@ -140,19 +179,15 @@ jobs: env: CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} - build-modules: - name: Build module (${{ matrix.os }}) + native-bundles: + name: Native bundle (${{ matrix.os }}) needs: publish strategy: fail-fast: false matrix: - include: - - os: ubuntu-latest - library: libtinydocs_module.so - - os: macos-latest - library: libtinydocs_module.dylib - - os: windows-latest - library: tinydocs_module.dll + os: + - ubuntu-latest + - macos-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v7 @@ -164,44 +199,83 @@ jobs: - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 + with: + workspaces: | + . -> target + vendor/tinybus -> target + + - name: Build TinyBus host + working-directory: vendor/tinybus + run: cargo build --locked --release --package tinybus --all-features --bin tinybus - - name: Build loadable module + - name: Build TinyDocs module run: cargo build --locked --release --package tinydocs-module - - name: Name release asset - id: asset + - name: Assemble native bundle + id: bundle shell: bash env: - RELEASE_TAG: ${{ needs.publish.outputs.tag }} - SOURCE_LIBRARY: ${{ matrix.library }} + TINYBUS_VERSION: ${{ needs.publish.outputs.tinybus_version }} + TINYDOCS_VERSION: ${{ needs.publish.outputs.next_version }} run: | set -euo pipefail - host_target="$(rustc -vV | sed -n 's/^host: //p')" - extension="${SOURCE_LIBRARY##*.}" - asset="tinydocs-${RELEASE_TAG}-${host_target}.${extension}" - cp "target/release/${SOURCE_LIBRARY}" "$asset" - echo "path=${asset}" >> "$GITHUB_OUTPUT" - - uses: actions/upload-artifact@v4 + target_triple="$(rustc -vV | sed -n 's/^host: //p')" + bundle_name="tinydocs-${TINYDOCS_VERSION}-tinybus-${TINYBUS_VERSION}-${target_triple}" + bundle_root="dist/${bundle_name}" + module_root="${bundle_root}/modules" + mkdir -p "${bundle_root}/bin" "$module_root" "${bundle_root}/docs" + + install -m 755 vendor/tinybus/target/release/tinybus "${bundle_root}/bin/tinybus" + + module_artifact="$(find target/release -maxdepth 1 -type f \( -name 'libtinydocs_module.so' -o -name 'libtinydocs_module.dylib' \) -print -quit)" + if [[ -z "$module_artifact" || ! -f "$module_artifact" ]]; then + echo "the TinyDocs module artifact is missing" >&2 + exit 1 + fi + install -m 644 "$module_artifact" "$module_root/" + + module_name="$(basename "$module_artifact")" + module_hash="$(shasum -a 256 "${module_root}/${module_name}" | awk '{print $1}')" + printf '"%s" = "%s"\n' "$module_name" "$module_hash" > "${module_root}/modules.toml" + + install -m 644 LICENSE "${bundle_root}/LICENSE" + install -m 644 README.md "${bundle_root}/README.md" + install -m 644 docs/specs/tinybus-module.md "${bundle_root}/docs/tinydocs-module.md" + install -m 644 vendor/tinybus/docs/protocol.md "${bundle_root}/docs/tinybus-protocol.md" + cp -R vendor/tinybus/docs/modules "${bundle_root}/docs/tinybus-modules" + + tar -C dist -czf "dist/${bundle_name}.tar.gz" "$bundle_name" + echo "archive=dist/${bundle_name}.tar.gz" >> "$GITHUB_OUTPUT" + + - name: Upload native bundle + uses: actions/upload-artifact@v4 with: - name: tinydocs-module-${{ runner.os }} - path: ${{ steps.asset.outputs.path }} + name: tinydocs-${{ runner.os }} + path: ${{ steps.bundle.outputs.archive }} if-no-files-found: error github-release: - name: Upload module binaries - needs: [publish, build-modules] + name: Create GitHub release + needs: + - publish + - native-bundles runs-on: ubuntu-latest steps: - - uses: actions/download-artifact@v5 + - uses: actions/download-artifact@v4 with: - pattern: tinydocs-module-* - merge-multiple: true + pattern: '*' path: release-assets + merge-multiple: true - - name: Create GitHub release + - name: Create release and upload assets env: GH_TOKEN: ${{ github.token }} RELEASE_TAG: ${{ needs.publish.outputs.tag }} - GH_REPO: ${{ github.repository }} - run: gh release create "$RELEASE_TAG" release-assets/* --verify-tag --generate-notes + REPOSITORY: ${{ github.repository }} + run: >- + gh release create "$RELEASE_TAG" release-assets/* + --repo "$REPOSITORY" + --verify-tag + --title "$RELEASE_TAG" + --generate-notes From 873d19359b975e3feedc108cc6da82fc01baf142 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:33:07 +0300 Subject: [PATCH 15/18] chore: files changed .github/workflows/release.yml Auto-committed-on: dragonfly Co-authored-by: Medulla --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c3c20cc..d9efe52 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -70,7 +70,7 @@ jobs: metadata="$(cargo metadata --format-version 1 --no-deps)" crate_name="tinydocs" current_version="$(jq -r '.packages[] | select(.name == "tinydocs") | .version' <<< "$metadata")" - tinybus_version="$([ + tinybus_version="$( cargo metadata \ --manifest-path vendor/tinybus/Cargo.toml \ --format-version 1 \ From 9e438d799f5925a1dc3ada40c5b048e495ce91b1 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:33:28 +0300 Subject: [PATCH 16/18] chore(ci): make check-file-coverage.sh executable The shell script for checking file coverage was not marked as executable, which prevented it from running in CI workflows. Changing the file mode to 100755 ensures it can be executed directly. Auto-committed-on: dragonfly Co-authored-by: Medulla --- .github/scripts/check-file-coverage.sh | 0 coverage.json | 1 + 2 files changed, 1 insertion(+) mode change 100644 => 100755 .github/scripts/check-file-coverage.sh create mode 100644 coverage.json diff --git a/.github/scripts/check-file-coverage.sh b/.github/scripts/check-file-coverage.sh old mode 100644 new mode 100755 diff --git a/coverage.json b/coverage.json new file mode 100644 index 0000000..92b912e --- /dev/null +++ b/coverage.json @@ -0,0 +1 @@ +{"data":[{"files":[{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/docx/mod.rs","segments":[[71,5,22,true,true,false],[71,41,0,false,false,false],[72,12,22,true,true,false],[72,29,0,false,false,false],[72,30,22,true,true,false],[72,38,0,false,false,false],[73,20,3,true,true,false],[73,75,0,false,false,false],[74,9,19,true,true,false],[74,10,0,false,false,false],[75,12,19,true,true,false],[75,55,0,false,false,false],[76,20,2,true,true,false],[79,15,0,false,false,false],[80,9,17,true,true,false],[80,10,0,false,false,false],[86,13,17,true,true,false],[86,24,0,false,false,false],[86,30,1,true,true,false],[86,31,0,false,false,false],[87,13,1,true,true,false],[87,33,0,false,false,false],[89,17,1,true,true,false],[89,24,0,false,false,false],[91,9,1,true,true,false],[91,10,0,false,false,false],[92,13,17,true,true,false],[92,22,0,false,false,false],[92,25,17,true,true,false],[92,43,0,false,false,false],[92,44,17,true,true,false],[92,49,0,false,false,false],[93,21,13,true,true,false],[93,27,0,false,false,false],[93,31,17,true,true,false],[93,53,0,false,false,false],[94,16,13,true,true,false],[94,22,13,true,false,false],[94,55,0,false,false,false],[95,24,1,true,true,false],[98,19,0,false,false,false],[99,13,12,true,true,false],[99,14,0,false,false,false],[100,13,12,true,true,false],[100,21,12,true,true,false],[100,26,12,true,false,false],[100,27,12,true,true,false],[100,41,12,true,false,false],[100,42,12,true,true,false],[100,48,12,true,false,false],[100,65,0,false,false,false],[101,9,4,true,true,false],[101,10,0,false,false,false],[102,12,16,true,true,false],[102,25,0,false,false,false],[102,26,16,true,true,false],[102,34,0,false,false,false],[103,20,2,true,true,false],[106,15,0,false,false,false],[107,9,14,true,true,false],[107,10,0,false,false,false],[108,12,14,true,true,false],[108,46,0,false,false,false],[109,20,1,true,true,false],[112,15,0,false,false,false],[113,9,13,true,true,false],[113,10,0,false,false,false],[115,14,15,true,true,false],[115,15,0,false,false,false],[115,17,15,true,true,false],[115,24,0,false,false,false],[115,29,13,true,true,false],[115,49,0,false,false,false],[115,50,13,true,true,false],[115,59,0,false,false,false],[116,16,15,true,true,false],[116,23,0,false,false,false],[116,24,15,true,true,false],[116,32,0,false,false,false],[117,24,1,true,true,false],[120,19,0,false,false,false],[121,13,14,true,true,false],[121,14,0,false,false,false],[122,25,14,true,true,false],[122,32,0,false,false,false],[122,36,14,true,true,false],[122,62,0,false,false,false],[123,20,14,true,true,false],[123,27,14,true,false,false],[123,60,0,false,false,false],[124,28,1,true,true,false],[124,32,1,true,true,false],[124,52,1,true,false,false],[127,23,0,false,false,false],[128,17,13,true,true,false],[128,18,0,false,false,false],[129,17,13,true,true,false],[129,25,13,true,true,false],[129,30,13,true,false,false],[129,31,13,true,true,false],[129,45,13,true,false,false],[129,46,13,true,true,false],[129,53,13,true,false,false],[129,70,0,false,false,false],[130,20,13,true,true,false],[130,43,0,false,false,false],[131,28,0,true,true,false],[131,46,0,false,false,false],[132,17,13,true,true,false],[132,18,0,false,false,false],[133,13,0,true,true,false],[133,14,0,false,false,false],[134,16,13,true,true,false],[134,69,0,false,false,false],[135,24,1,true,true,false],[135,28,1,true,true,false],[135,48,1,true,false,false],[138,19,0,false,false,false],[139,13,12,true,true,false],[139,14,0,false,false,false],[140,18,113,true,true,false],[140,19,0,false,false,false],[140,21,113,true,true,false],[140,30,0,false,false,false],[140,35,12,true,true,false],[140,60,0,false,false,false],[140,61,12,true,true,false],[140,70,0,false,false,false],[141,20,113,true,true,false],[141,67,0,false,false,false],[142,28,1,true,true,false],[142,32,1,true,true,false],[142,52,1,true,false,false],[145,23,0,false,false,false],[146,17,112,true,true,false],[146,18,0,false,false,false],[147,17,112,true,true,false],[147,25,112,true,true,false],[147,30,112,true,false,false],[147,31,112,true,true,false],[147,45,112,true,false,false],[147,72,0,false,false,false],[148,20,112,true,true,false],[148,43,0,false,false,false],[149,28,1,true,true,false],[149,46,0,false,false,false],[150,17,111,true,true,false],[150,18,0,false,false,false],[152,16,10,true,true,false],[152,63,0,false,false,false],[153,24,1,true,true,false],[153,28,1,true,true,false],[153,48,1,true,false,false],[156,19,0,false,false,false],[157,13,9,true,true,false],[157,14,0,false,false,false],[158,18,11,true,true,false],[158,19,0,false,false,false],[158,21,11,true,true,false],[158,27,0,false,false,false],[158,32,9,true,true,false],[158,54,0,false,false,false],[158,55,9,true,true,false],[158,64,0,false,false,false],[159,20,11,true,true,false],[159,64,0,false,false,false],[160,28,1,true,true,false],[160,32,1,true,true,false],[160,52,1,true,false,false],[163,23,0,false,false,false],[164,17,10,true,true,false],[164,18,0,false,false,false],[165,17,10,true,true,false],[165,25,10,true,true,false],[165,30,10,true,false,false],[165,31,10,true,true,false],[165,45,10,true,false,false],[165,69,0,false,false,false],[166,20,10,true,true,false],[166,43,0,false,false,false],[167,28,0,true,true,false],[167,46,0,false,false,false],[168,17,10,true,true,false],[168,18,0,false,false,false],[171,9,6,true,true,false],[171,15,0,false,false,false],[172,5,22,true,true,false],[172,6,0,false,false,false],[209,1,6,true,true,false],[209,56,0,false,false,false],[210,5,6,true,true,false],[210,9,0,false,false,false],[210,10,6,true,true,false],[210,18,0,false,false,false],[210,20,2,true,true,false],[210,21,0,false,false,false],[215,9,4,true,true,false],[215,19,0,false,false,false],[215,22,4,true,true,false],[215,42,0,false,false,false],[215,43,4,true,true,false],[215,57,0,false,false,false],[216,5,4,true,true,false],[216,10,0,false,false,false],[216,11,4,true,true,false],[216,15,0,false,false,false],[217,10,4,true,true,false],[217,15,0,false,false,false],[218,10,4,true,true,false],[218,14,0,false,false,false],[218,15,4,true,true,false],[218,26,0,false,false,false],[219,10,4,true,true,false],[219,17,0,false,false,false],[219,24,0,true,true,false],[219,48,0,false,false,false],[219,49,0,true,true,false],[219,65,0,false,false,false],[219,67,0,true,true,false],[219,68,0,false,false,false],[220,5,4,true,true,false],[220,28,0,false,false,false],[221,1,6,true,true,false],[221,2,0,false,false,false],[227,1,4,true,true,false],[227,38,0,false,false,false],[231,9,4,true,true,false],[231,17,0,false,false,false],[231,20,4,true,true,false],[231,29,0,false,false,false],[232,10,4,true,true,false],[232,32,0,false,false,false],[233,13,4,true,true,false],[233,35,0,false,false,false],[233,57,4,true,true,false],[233,66,0,false,false,false],[233,67,4,true,true,false],[233,77,0,false,false,false],[235,17,4,true,true,false],[235,27,0,false,false,false],[236,17,4,true,true,false],[236,34,0,false,false,false],[237,17,4,true,true,false],[237,31,0,false,false,false],[238,17,4,true,true,false],[238,29,0,false,false,false],[241,10,4,true,true,false],[241,23,0,false,false,false],[241,24,4,true,true,false],[241,38,0,false,false,false],[244,5,4,true,true,false],[244,9,0,false,false,false],[244,12,4,true,true,false],[244,16,0,false,false,false],[244,17,4,true,true,false],[244,30,0,false,false,false],[245,9,4,true,true,false],[245,23,0,false,false,false],[245,26,4,true,true,false],[245,31,0,false,false,false],[245,32,4,true,true,false],[245,39,0,false,false,false],[245,41,4,true,true,false],[245,48,0,false,false,false],[246,13,4,true,true,false],[246,21,0,false,false,false],[247,18,4,true,true,false],[247,26,0,false,false,false],[247,27,4,true,true,false],[247,44,0,false,false,false],[248,18,4,true,true,false],[248,22,0,false,false,false],[249,18,4,true,true,false],[249,22,0,false,false,false],[254,17,2,true,true,false],[254,23,0,false,false,false],[254,27,4,true,true,false],[254,38,0,false,false,false],[254,39,4,true,true,false],[254,47,0,false,false,false],[254,50,4,true,true,false],[254,56,0,false,false,false],[254,62,3,true,true,false],[254,70,0,false,false,false],[254,71,3,true,true,false],[254,79,0,false,false,false],[254,83,2,true,true,false],[255,9,2,true,true,false],[255,13,2,true,false,false],[255,16,2,true,true,false],[255,20,2,true,false,false],[255,21,2,true,true,false],[255,34,2,true,false,false],[256,13,2,true,true,false],[256,27,2,true,false,false],[256,30,2,true,true,false],[256,37,2,true,false,false],[257,17,2,true,true,false],[257,25,2,true,false,false],[258,22,2,true,true,false],[258,30,2,true,false,false],[258,31,2,true,true,false],[258,37,2,true,false,false],[258,38,2,true,true,false],[258,42,2,true,false,false],[263,5,2,true,true,false],[263,6,0,false,false,false],[265,9,5,true,true,false],[265,16,0,false,false,false],[265,20,4,true,true,false],[265,34,0,false,false,false],[266,21,5,true,true,false],[266,28,0,false,false,false],[266,32,5,true,true,false],[266,47,0,false,false,false],[266,48,5,true,true,false],[266,56,0,false,false,false],[266,59,5,true,true,false],[266,65,0,false,false,false],[266,71,5,true,true,false],[266,79,0,false,false,false],[266,80,5,true,true,false],[266,88,0,false,false,false],[266,92,5,true,true,false],[267,13,5,true,true,false],[267,17,5,true,false,false],[267,20,5,true,true,false],[267,24,5,true,false,false],[267,25,5,true,true,false],[267,38,5,true,false,false],[268,17,5,true,true,false],[268,31,5,true,false,false],[268,34,5,true,true,false],[268,39,5,true,false,false],[268,40,5,true,true,false],[268,50,5,true,false,false],[268,52,5,true,true,false],[268,59,5,true,false,false],[269,21,5,true,true,false],[269,29,5,true,false,false],[270,26,5,true,true,false],[270,34,5,true,false,false],[270,35,5,true,true,false],[270,42,5,true,false,false],[270,43,5,true,true,false],[270,47,5,true,false,false],[275,9,0,true,true,false],[275,10,0,false,false,false],[276,13,6,true,true,false],[276,22,0,false,false,false],[276,26,5,true,true,false],[276,45,0,false,false,false],[277,17,6,true,true,false],[277,21,0,false,false,false],[277,24,6,true,true,false],[277,40,0,false,false,false],[278,16,6,true,true,false],[278,32,0,false,false,false],[278,33,4,true,true,false],[279,17,4,true,true,false],[279,21,4,true,false,false],[279,24,4,true,true,false],[279,28,4,true,false,false],[279,29,4,true,true,false],[279,42,4,true,false,false],[279,43,4,true,true,false],[279,57,4,true,false,false],[279,60,4,true,true,false],[279,67,4,true,false,false],[279,68,4,true,true,false],[279,76,4,true,false,false],[280,13,2,true,true,false],[280,14,0,false,false,false],[282,13,6,true,true,false],[282,19,0,false,false,false],[282,23,5,true,true,false],[282,39,0,false,false,false],[283,17,6,true,true,false],[283,21,0,false,false,false],[283,24,6,true,true,false],[283,37,0,false,false,false],[284,16,6,true,true,false],[284,32,0,false,false,false],[284,33,5,true,true,false],[285,17,5,true,true,false],[285,21,5,true,false,false],[285,24,5,true,true,false],[285,28,5,true,false,false],[285,29,5,true,true,false],[285,42,5,true,false,false],[286,21,5,true,true,false],[286,35,5,true,false,false],[287,26,5,true,true,false],[287,33,5,true,false,false],[287,34,5,true,true,false],[287,42,5,true,false,false],[287,45,5,true,true,false],[287,53,5,true,false,false],[287,54,5,true,true,false],[287,58,5,true,false,false],[288,26,5,true,true,false],[288,35,5,true,false,false],[290,13,1,true,true,false],[290,14,0,false,false,false],[294,5,4,true,true,false],[294,9,0,false,false,false],[295,1,4,true,true,false],[295,2,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":7,"covered":6,"percent":85.71428571428571},"instantiations":{"count":14,"covered":10,"percent":71.42857142857143},"lines":{"count":156,"covered":152,"percent":97.43589743589743},"regions":{"count":207,"covered":200,"notcovered":7,"percent":96.61835748792271}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/docx/test.rs","segments":[[12,1,18,true,true,false],[12,32,0,false,false,false],[13,5,18,true,true,false],[14,18,18,true,true,false],[14,46,18,true,false,false],[15,21,18,true,true,false],[15,25,18,true,false,false],[15,26,18,true,true,false],[15,45,18,true,false,false],[15,46,18,true,true,false],[15,55,18,true,false,false],[16,18,18,true,true,false],[16,22,18,true,false,false],[17,6,0,false,false,false],[18,1,18,true,true,false],[18,2,0,false,false,false],[21,1,15,true,true,false],[21,26,0,false,false,false],[22,5,15,true,true,false],[23,16,15,true,true,false],[23,25,15,true,false,false],[23,26,15,true,true,false],[23,35,15,true,false,false],[24,17,15,true,true,false],[24,42,15,true,false,false],[26,6,0,false,false,false],[27,1,15,true,true,false],[27,2,0,false,false,false],[30,1,12,true,true,false],[30,52,0,false,false,false],[31,11,12,true,true,false],[31,15,0,false,false,false],[31,16,12,true,true,false],[31,24,0,false,false,false],[32,42,12,true,true,false],[32,43,0,false,false,false],[33,13,12,true,true,false],[33,23,0,false,false,false],[35,9,0,true,true,false],[35,14,0,false,false,false],[35,18,0,true,true,false],[35,24,0,false,false,false],[37,1,12,true,true,false],[37,2,0,false,false,false],[40,1,1,true,true,false],[40,44,0,false,false,false],[41,9,1,true,true,false],[41,16,0,false,false,false],[42,9,1,true,true,false],[42,29,0,false,false,false],[42,30,1,true,true,false],[42,50,0,false,false,false],[42,51,1,true,true,false],[42,56,0,false,false,false],[42,57,1,true,true,false],[42,63,0,false,false,false],[42,68,1,true,true,false],[42,74,0,false,false,false],[42,75,1,true,true,false],[42,98,0,false,false,false],[43,6,1,true,true,false],[43,18,0,false,false,false],[44,10,1,true,true,false],[44,13,0,false,false,false],[44,18,18,true,true,false],[44,21,18,true,false,false],[44,22,18,true,true,false],[44,30,18,true,false,false],[44,49,0,false,false,false],[44,50,18,true,true,false],[44,59,0,false,false,false],[45,10,1,true,true,false],[45,17,0,false,false,false],[46,1,1,true,true,false],[46,2,0,false,false,false],[49,1,2,true,true,false],[49,50,0,false,false,false],[50,9,2,true,true,false],[50,16,0,false,false,false],[51,9,2,true,true,false],[51,29,0,false,false,false],[51,30,2,true,true,false],[51,50,0,false,false,false],[51,51,2,true,true,false],[51,56,0,false,false,false],[51,57,2,true,true,false],[51,63,0,false,false,false],[51,68,2,true,true,false],[51,74,0,false,false,false],[51,75,2,true,true,false],[51,98,0,false,false,false],[52,9,2,true,true,false],[52,18,0,false,false,false],[52,21,2,true,true,false],[52,24,0,false,false,false],[52,25,2,true,true,false],[52,32,0,false,false,false],[52,33,2,true,true,false],[52,37,0,false,false,false],[52,39,2,true,true,false],[52,45,0,false,false,false],[52,46,2,true,true,false],[52,61,0,false,false,false],[53,9,2,true,true,false],[53,17,0,false,false,false],[53,20,2,true,true,false],[53,31,0,false,false,false],[54,5,2,true,true,false],[54,34,0,false,false,false],[54,35,2,true,true,false],[54,45,0,false,false,false],[54,47,2,true,true,false],[54,56,0,false,false,false],[54,58,2,true,true,false],[54,64,0,false,false,false],[55,5,2,true,true,false],[55,9,0,false,false,false],[56,1,2,true,true,false],[56,2,0,false,false,false],[59,1,1,true,true,false],[59,32,0,false,false,false],[60,5,1,true,true,false],[60,12,0,false,false,false],[60,13,1,true,true,false],[60,30,0,false,false,false],[60,31,1,true,true,false],[60,36,0,false,false,false],[61,1,1,true,true,false],[61,2,0,false,false,false],[64,1,1,true,true,false],[64,27,0,false,false,false],[65,9,1,true,true,false],[65,14,0,false,false,false],[65,17,1,true,true,false],[65,21,0,false,false,false],[66,5,1,true,true,false],[66,12,0,false,false,false],[66,15,1,true,true,false],[66,20,0,false,false,false],[66,21,1,true,true,false],[66,30,0,false,false,false],[67,5,1,true,true,false],[67,19,0,false,false,false],[67,20,1,true,true,false],[67,22,0,false,false,false],[67,24,1,true,true,false],[67,31,0,false,false,false],[68,1,1,true,true,false],[68,2,0,false,false,false],[71,1,1,true,true,false],[71,32,0,false,false,false],[72,9,1,true,true,false],[72,14,0,false,false,false],[72,17,1,true,true,false],[72,21,0,false,false,false],[73,5,1,true,true,false],[73,12,0,false,false,false],[73,15,1,true,true,false],[73,18,0,false,false,false],[73,19,1,true,true,false],[73,25,0,false,false,false],[73,26,1,true,true,false],[73,44,0,false,false,false],[74,5,1,true,true,false],[74,19,0,false,false,false],[74,20,1,true,true,false],[74,22,0,false,false,false],[74,24,1,true,true,false],[74,31,0,false,false,false],[75,1,1,true,true,false],[75,2,0,false,false,false],[78,1,1,true,true,false],[78,33,0,false,false,false],[79,9,1,true,true,false],[79,14,0,false,false,false],[79,17,1,true,true,false],[79,21,0,false,false,false],[80,5,1,true,true,false],[80,13,0,false,false,false],[80,16,1,true,true,false],[80,21,1,true,true,false],[80,24,1,true,false,false],[80,52,0,false,false,false],[81,5,1,true,true,false],[81,19,0,false,false,false],[81,20,1,true,true,false],[81,22,0,false,false,false],[81,24,1,true,true,false],[81,32,0,false,false,false],[82,1,1,true,true,false],[82,2,0,false,false,false],[85,1,1,true,true,false],[85,37,0,false,false,false],[86,9,1,true,true,false],[86,14,0,false,false,false],[86,17,1,true,true,false],[86,21,0,false,false,false],[87,5,1,true,true,false],[87,15,0,false,false,false],[87,16,1,true,true,false],[87,21,0,false,false,false],[88,5,1,true,true,false],[88,19,0,false,false,false],[88,20,1,true,true,false],[88,22,0,false,false,false],[88,24,1,true,true,false],[88,34,0,false,false,false],[89,1,1,true,true,false],[89,2,0,false,false,false],[92,1,1,true,true,false],[92,31,0,false,false,false],[93,9,1,true,true,false],[93,14,0,false,false,false],[93,17,1,true,true,false],[93,21,0,false,false,false],[94,5,1,true,true,false],[94,15,0,false,false,false],[94,18,1,true,true,false],[94,22,0,false,false,false],[94,23,1,true,true,false],[94,30,0,false,false,false],[94,34,1,true,true,false],[94,50,0,false,false,false],[95,5,1,true,true,false],[95,19,0,false,false,false],[95,20,1,true,true,false],[95,22,0,false,false,false],[95,24,1,true,true,false],[95,34,0,false,false,false],[96,1,1,true,true,false],[96,2,0,false,false,false],[99,1,1,true,true,false],[99,36,0,false,false,false],[102,9,1,true,true,false],[102,14,0,false,false,false],[102,17,1,true,true,false],[102,21,0,false,false,false],[103,5,1,true,true,false],[103,15,0,false,false,false],[103,18,1,true,true,false],[103,22,0,false,false,false],[103,23,1,true,true,false],[104,18,1,true,true,false],[104,40,1,true,false,false],[105,21,1,true,true,false],[105,25,1,true,false,false],[105,26,1,true,true,false],[105,30,1,true,false,false],[105,31,1,true,true,false],[105,40,1,true,false,false],[107,6,0,false,false,false],[108,5,1,true,true,false],[108,19,0,false,false,false],[108,20,1,true,true,false],[108,22,0,false,false,false],[108,24,1,true,true,false],[108,37,0,false,false,false],[109,1,1,true,true,false],[109,2,0,false,false,false],[112,1,1,true,true,false],[112,51,0,false,false,false],[113,9,1,true,true,false],[113,14,0,false,false,false],[113,17,1,true,true,false],[113,21,0,false,false,false],[114,5,1,true,true,false],[114,15,0,false,false,false],[114,16,1,true,true,false],[114,20,0,false,false,false],[114,21,1,true,true,false],[115,23,1,true,true,false],[115,26,1,true,false,false],[117,6,0,false,false,false],[118,5,1,true,true,false],[118,19,0,false,false,false],[118,20,1,true,true,false],[118,22,0,false,false,false],[118,24,1,true,true,false],[118,45,0,false,false,false],[119,1,1,true,true,false],[119,2,0,false,false,false],[122,1,1,true,true,false],[122,33,0,false,false,false],[123,9,1,true,true,false],[123,14,0,false,false,false],[123,17,1,true,true,false],[123,21,0,false,false,false],[124,5,1,true,true,false],[124,29,0,false,false,false],[124,32,1,true,true,false],[124,36,0,false,false,false],[124,37,1,true,true,false],[124,40,0,false,false,false],[124,41,1,true,true,false],[124,50,0,false,false,false],[124,54,1,true,true,false],[124,84,0,false,false,false],[125,5,1,true,true,false],[125,19,0,false,false,false],[125,20,1,true,true,false],[125,22,0,false,false,false],[125,24,1,true,true,false],[125,48,0,false,false,false],[126,1,1,true,true,false],[126,2,0,false,false,false],[129,1,1,true,true,false],[129,53,0,false,false,false],[130,9,1,true,true,false],[130,14,0,false,false,false],[130,17,1,true,true,false],[130,21,0,false,false,false],[131,5,1,true,true,false],[131,29,0,false,false,false],[131,32,1,true,true,false],[131,36,0,false,false,false],[131,37,1,true,true,false],[131,41,0,false,false,false],[131,42,1,true,true,false],[131,51,0,false,false,false],[131,55,1,true,true,false],[131,58,0,false,false,false],[131,59,1,true,true,false],[131,65,0,false,false,false],[131,66,1,true,true,false],[131,89,0,false,false,false],[132,5,1,true,true,false],[132,19,0,false,false,false],[132,20,1,true,true,false],[132,22,0,false,false,false],[132,24,1,true,true,false],[132,51,0,false,false,false],[133,1,1,true,true,false],[133,2,0,false,false,false],[136,1,1,true,true,false],[136,30,0,false,false,false],[137,9,1,true,true,false],[137,14,0,false,false,false],[137,17,1,true,true,false],[137,21,0,false,false,false],[138,5,1,true,true,false],[138,26,0,false,false,false],[138,29,1,true,true,false],[138,33,0,false,false,false],[138,34,1,true,true,false],[138,37,0,false,false,false],[138,38,1,true,true,false],[138,47,0,false,false,false],[138,51,1,true,true,false],[138,78,0,false,false,false],[139,5,1,true,true,false],[139,19,0,false,false,false],[139,20,1,true,true,false],[139,22,0,false,false,false],[139,24,1,true,true,false],[139,45,0,false,false,false],[140,1,1,true,true,false],[140,2,0,false,false,false],[143,1,1,true,true,false],[143,50,0,false,false,false],[144,9,1,true,true,false],[144,14,0,false,false,false],[144,17,1,true,true,false],[144,21,0,false,false,false],[145,5,1,true,true,false],[145,26,0,false,false,false],[145,29,1,true,true,false],[145,33,0,false,false,false],[145,34,1,true,true,false],[145,38,0,false,false,false],[145,39,1,true,true,false],[145,48,0,false,false,false],[145,52,1,true,true,false],[145,55,0,false,false,false],[145,56,1,true,true,false],[145,62,0,false,false,false],[145,63,1,true,true,false],[145,86,0,false,false,false],[146,5,1,true,true,false],[146,19,0,false,false,false],[146,20,1,true,true,false],[146,22,0,false,false,false],[146,24,1,true,true,false],[146,48,0,false,false,false],[147,1,1,true,true,false],[147,2,0,false,false,false],[150,1,1,true,true,false],[150,56,0,false,false,false],[156,9,1,true,true,false],[156,24,0,false,false,false],[156,27,1,true,true,false],[156,68,0,false,false,false],[157,5,1,true,true,false],[157,12,0,false,false,false],[157,13,1,true,true,false],[157,58,0,false,false,false],[158,9,1,true,true,false],[158,18,0,false,false,false],[158,21,1,true,true,false],[158,24,0,false,false,false],[158,25,1,true,true,false],[158,31,0,false,false,false],[159,9,1,true,true,false],[159,12,0,false,false,false],[159,15,1,true,true,false],[160,18,1,true,true,false],[160,45,1,true,false,false],[161,21,1,true,true,false],[161,25,1,true,false,false],[161,26,1,true,true,false],[161,35,1,true,false,false],[163,6,0,false,false,false],[164,9,1,true,true,false],[164,10,0,false,false,false],[164,13,1,true,true,false],[165,16,1,true,true,false],[165,22,1,true,false,false],[165,23,1,true,true,false],[165,32,1,true,false,false],[166,17,1,true,true,false],[166,21,1,true,false,false],[168,6,0,false,false,false],[170,5,1,true,true,false],[170,12,0,false,false,false],[170,13,1,true,true,false],[170,45,0,false,false,false],[171,5,1,true,true,false],[171,19,0,false,false,false],[171,20,1,true,true,false],[171,22,0,false,false,false],[171,24,1,true,true,false],[171,34,0,false,false,false],[172,1,1,true,true,false],[172,2,0,false,false,false],[175,1,1,true,true,false],[175,40,0,false,false,false],[176,5,1,true,true,false],[176,12,0,false,false,false],[176,13,1,true,true,false],[176,34,0,false,false,false],[177,5,1,true,true,false],[177,12,0,false,false,false],[178,9,1,true,true,false],[179,22,1,true,true,false],[179,26,1,true,false,false],[182,10,0,false,false,false],[183,10,1,true,true,false],[183,18,0,false,false,false],[186,5,1,true,true,false],[186,12,0,false,false,false],[187,9,1,true,true,false],[188,22,1,true,true,false],[188,56,1,true,false,false],[192,20,0,false,false,false],[194,1,1,true,true,false],[194,2,0,false,false,false],[197,1,1,true,true,false],[197,39,0,false,false,false],[198,9,1,true,true,false],[198,10,0,false,false,false],[198,13,1,true,true,false],[199,16,1,true,true,false],[199,22,1,true,false,false],[199,23,1,true,true,false],[199,32,1,true,false,false],[200,17,1,true,true,false],[200,39,1,true,false,false],[201,19,1,true,true,false],[201,23,1,true,false,false],[202,22,1,true,true,false],[202,45,1,true,false,false],[203,25,1,true,true,false],[203,29,1,true,false,false],[203,30,1,true,true,false],[203,34,1,true,false,false],[203,35,1,true,true,false],[203,44,1,true,false,false],[204,22,1,true,true,false],[204,26,1,true,false,false],[206,6,0,false,false,false],[207,5,1,true,true,false],[207,15,0,false,false,false],[207,16,1,true,true,false],[207,17,0,false,false,false],[207,18,1,true,true,false],[207,29,0,false,false,false],[208,1,1,true,true,false],[208,2,0,false,false,false],[211,1,1,true,true,false],[211,50,0,false,false,false],[212,9,1,true,true,false],[212,14,0,false,false,false],[212,17,1,true,true,false],[212,25,0,false,false,false],[212,26,1,true,true,false],[212,33,0,false,false,false],[212,35,1,true,true,false],[212,41,0,false,false,false],[212,42,1,true,true,false],[212,69,0,false,false,false],[216,5,1,true,true,false],[216,15,0,false,false,false],[216,16,1,true,true,false],[216,28,0,false,false,false],[217,5,1,true,true,false],[217,12,0,false,false,false],[218,9,1,true,true,false],[218,26,0,false,false,false],[220,9,0,true,true,false],[220,14,0,false,false,false],[220,15,0,true,true,false],[220,18,0,false,false,false],[223,9,1,true,true,false],[223,14,0,false,false,false],[223,17,1,true,true,false],[223,28,0,false,false,false],[223,29,1,true,true,false],[223,35,0,false,false,false],[224,9,3,true,true,false],[224,17,0,false,false,false],[224,21,1,true,true,false],[224,80,0,false,false,false],[225,9,3,true,true,false],[225,16,0,false,false,false],[226,13,3,true,true,false],[226,25,0,false,false,false],[226,26,3,true,true,false],[226,29,0,false,false,false],[226,34,22,true,true,false],[226,35,0,false,false,false],[226,39,22,true,true,false],[226,47,0,false,false,false],[231,5,1,true,true,false],[231,12,0,false,false,false],[232,9,1,true,true,false],[232,21,0,false,false,false],[232,22,1,true,true,false],[232,25,0,false,false,false],[232,30,16,true,true,false],[232,31,0,false,false,false],[232,35,16,true,true,false],[232,55,0,false,false,false],[235,1,1,true,true,false],[235,2,0,false,false,false],[238,1,1,true,true,false],[238,53,0,false,false,false],[239,9,1,true,true,false],[239,10,0,false,false,false],[239,13,1,true,true,false],[240,16,1,true,true,false],[240,33,1,true,false,false],[240,34,1,true,true,false],[240,43,1,true,false,false],[241,17,1,true,true,false],[241,42,1,true,false,false],[242,19,1,true,true,false],[242,23,1,true,false,false],[243,13,1,true,true,false],[244,26,1,true,true,false],[244,54,1,true,false,false],[245,29,1,true,true,false],[245,33,1,true,false,false],[245,34,1,true,true,false],[245,69,1,true,false,false],[249,26,1,true,true,false],[249,51,1,true,false,false],[250,29,1,true,true,false],[250,33,1,true,false,false],[251,26,1,true,true,false],[251,30,1,true,false,false],[251,31,1,true,true,false],[251,40,1,true,false,false],[251,41,1,true,true,false],[251,50,1,true,false,false],[254,6,0,false,false,false],[255,9,1,true,true,false],[255,13,0,false,false,false],[255,16,1,true,true,false],[255,26,0,false,false,false],[256,9,1,true,true,false],[256,10,1,true,true,false],[256,18,1,true,false,false],[256,19,1,true,true,false],[256,21,1,true,false,false],[256,58,0,false,false,false],[257,9,1,true,true,false],[257,28,0,false,false,false],[259,9,7,true,true,false],[259,15,0,false,false,false],[259,19,1,true,true,false],[261,9,1,true,true,false],[261,16,1,true,false,false],[262,9,1,true,true,false],[262,19,1,true,false,false],[263,9,1,true,true,false],[263,44,1,true,false,false],[264,9,1,true,true,false],[264,16,1,true,false,false],[267,6,0,false,false,false],[268,9,7,true,true,false],[268,16,0,false,false,false],[269,13,7,true,true,false],[269,17,7,true,false,false],[269,34,0,false,false,false],[273,1,1,true,true,false],[273,2,0,false,false,false],[276,1,1,true,true,false],[276,49,0,false,false,false],[279,9,1,true,true,false],[279,10,0,false,false,false],[279,13,1,true,true,false],[280,16,1,true,true,false],[280,25,1,true,false,false],[280,26,1,true,true,false],[280,35,1,true,false,false],[281,17,1,true,true,false],[281,40,1,true,false,false],[282,19,1,true,true,false],[282,23,1,true,false,false],[283,22,1,true,true,false],[283,46,1,true,false,false],[284,25,1,true,true,false],[284,29,1,true,false,false],[284,30,1,true,true,false],[284,36,1,true,false,false],[284,37,1,true,true,false],[284,46,1,true,false,false],[284,50,1,true,true,false],[284,55,1,true,false,false],[284,56,1,true,true,false],[284,65,1,true,false,false],[284,69,1,true,true,false],[284,80,1,true,false,false],[285,22,1,true,true,false],[285,26,1,true,false,false],[285,27,1,true,true,false],[285,33,1,true,false,false],[285,34,1,true,true,false],[285,43,1,true,false,false],[287,6,0,false,false,false],[288,9,1,true,true,false],[288,13,0,false,false,false],[288,16,1,true,true,false],[288,26,0,false,false,false],[289,9,1,true,true,false],[289,10,1,true,true,false],[289,18,1,true,false,false],[289,19,1,true,true,false],[289,21,1,true,false,false],[289,58,0,false,false,false],[290,9,1,true,true,false],[290,28,0,false,false,false],[292,5,1,true,true,false],[292,12,0,false,false,false],[292,13,1,true,true,false],[292,34,0,false,false,false],[293,5,1,true,true,false],[293,12,0,false,false,false],[293,13,1,true,true,false],[293,34,0,false,false,false],[294,5,1,true,true,false],[294,12,0,false,false,false],[294,13,1,true,true,false],[294,34,0,false,false,false],[301,5,1,true,true,false],[301,15,0,false,false,false],[302,9,1,true,true,false],[302,30,0,false,false,false],[302,31,1,true,true,false],[302,36,0,false,false,false],[306,5,1,true,true,false],[306,15,0,false,false,false],[307,9,1,true,true,false],[307,30,0,false,false,false],[307,31,1,true,true,false],[307,36,0,false,false,false],[311,9,2,true,true,false],[311,16,0,false,false,false],[311,20,1,true,true,false],[311,35,0,false,false,false],[312,9,2,true,true,false],[312,16,0,false,false,false],[313,13,2,true,true,false],[313,14,2,true,true,false],[313,18,2,true,false,false],[313,36,0,false,false,false],[317,1,1,true,true,false],[317,2,0,false,false,false],[320,1,1,true,true,false],[320,44,0,false,false,false],[321,9,1,true,true,false],[321,14,0,false,false,false],[321,17,1,true,true,false],[321,21,0,false,false,false],[322,5,1,true,true,false],[322,12,0,false,false,false],[322,15,1,true,true,false],[322,26,0,false,false,false],[323,5,1,true,true,false],[323,12,0,false,false,false],[323,13,0,true,true,false],[323,21,0,false,false,false],[323,22,1,true,true,false],[323,30,0,false,false,false],[323,31,1,true,true,false],[323,33,0,false,false,false],[324,1,1,true,true,false],[324,2,0,false,false,false],[327,1,1,true,true,false],[327,35,0,false,false,false],[328,9,1,true,true,false],[328,10,0,false,false,false],[328,13,1,true,true,false],[328,17,0,false,false,false],[329,9,1,true,true,false],[329,13,0,false,false,false],[329,16,1,true,true,false],[329,37,0,false,false,false],[329,38,1,true,true,false],[329,40,0,false,false,false],[329,42,1,true,true,false],[329,48,0,false,false,false],[329,49,1,true,true,false],[329,61,0,false,false,false],[330,9,1,true,true,false],[330,13,0,false,false,false],[330,15,1,true,true,false],[330,27,0,false,false,false],[330,30,1,true,true,false],[330,50,0,false,false,false],[330,51,1,true,true,false],[330,56,0,false,false,false],[330,58,1,true,true,false],[330,64,0,false,false,false],[330,65,1,true,true,false],[330,79,0,false,false,false],[331,5,1,true,true,false],[331,15,0,false,false,false],[332,1,1,true,true,false],[332,2,0,false,false,false],[335,1,1,true,true,false],[335,38,0,false,false,false],[338,9,1,true,true,false],[338,13,0,false,false,false],[338,16,1,true,true,false],[338,63,0,false,false,false],[339,5,1,true,true,false],[339,12,0,false,false,false],[339,13,1,true,true,false],[339,55,0,false,false,false],[339,56,1,true,true,false],[339,62,0,false,false,false],[340,1,1,true,true,false],[340,2,0,false,false,false],[343,1,1,true,true,false],[343,35,0,false,false,false],[344,9,1,true,true,false],[344,10,0,false,false,false],[344,12,1,true,true,false],[344,24,0,false,false,false],[344,27,1,true,true,false],[344,47,0,false,false,false],[344,48,1,true,true,false],[344,66,0,false,false,false],[344,68,1,true,true,false],[344,74,0,false,false,false],[344,75,1,true,true,false],[344,89,0,false,false,false],[345,5,1,true,true,false],[345,15,0,false,false,false],[346,5,1,true,true,false],[346,12,0,false,false,false],[346,13,1,true,true,false],[346,23,0,false,false,false],[346,24,1,true,true,false],[346,32,0,false,false,false],[347,1,1,true,true,false],[347,2,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":30,"covered":30,"percent":100.0},"instantiations":{"count":30,"covered":30,"percent":100.0},"lines":{"count":238,"covered":236,"percent":99.15966386554622},"regions":{"count":390,"covered":385,"notcovered":5,"percent":98.71794871794872}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/docx/types.rs","segments":[[84,5,18,true,true,false],[84,35,0,false,false,false],[85,13,18,true,true,false],[85,24,0,false,false,false],[85,27,18,true,true,false],[86,21,0,false,false,false],[87,14,18,true,true,false],[87,22,0,false,false,false],[88,14,18,true,true,false],[88,25,0,false,false,false],[88,31,17,true,true,false],[88,39,0,false,false,false],[88,40,17,true,true,false],[88,48,0,false,false,false],[89,13,18,true,true,false],[89,26,0,false,false,false],[89,29,18,true,true,false],[89,51,0,false,false,false],[89,52,18,true,true,false],[89,55,0,false,false,false],[89,61,15,true,true,false],[89,69,0,false,false,false],[89,70,15,true,true,false],[89,78,0,false,false,false],[90,13,18,true,true,false],[90,23,0,false,false,false],[90,26,18,true,true,false],[90,45,0,false,false,false],[90,46,18,true,true,false],[90,49,0,false,false,false],[90,55,14,true,true,false],[90,63,0,false,false,false],[90,64,14,true,true,false],[90,72,0,false,false,false],[91,11,18,true,true,false],[91,22,0,false,false,false],[91,26,2,true,true,false],[91,39,0,false,false,false],[91,43,2,true,true,false],[91,53,0,false,false,false],[92,5,18,true,true,false],[92,6,0,false,false,false],[116,5,1,true,true,false],[116,39,0,false,false,false],[117,13,1,true,true,false],[117,22,0,false,false,false],[117,25,1,true,true,false],[117,43,0,false,false,false],[117,44,1,true,true,false],[117,49,0,false,false,false],[118,21,1,true,true,false],[118,27,0,false,false,false],[118,31,1,true,true,false],[118,53,0,false,false,false],[118,54,1,true,true,false],[119,21,1,true,true,false],[119,26,1,true,false,false],[119,27,1,true,true,false],[119,41,1,true,false,false],[119,42,1,true,true,false],[119,48,1,true,false,false],[120,9,0,true,true,false],[120,10,0,false,false,false],[121,13,1,true,true,false],[121,20,0,false,false,false],[121,24,1,true,true,false],[121,38,0,false,false,false],[122,25,1,true,true,false],[122,32,0,false,false,false],[122,36,1,true,true,false],[122,62,0,false,false,false],[122,63,1,true,true,false],[123,25,1,true,true,false],[123,30,1,true,false,false],[123,31,1,true,true,false],[123,45,1,true,false,false],[123,46,1,true,true,false],[123,53,1,true,false,false],[124,13,0,true,true,false],[124,14,0,false,false,false],[125,17,1,true,true,false],[125,26,0,false,false,false],[125,30,1,true,true,false],[125,49,0,false,false,false],[125,50,1,true,true,false],[126,25,1,true,true,false],[126,30,1,true,false,false],[126,31,1,true,true,false],[126,45,1,true,false,false],[127,14,0,false,false,false],[128,17,1,true,true,false],[128,23,0,false,false,false],[128,27,1,true,true,false],[128,43,0,false,false,false],[128,44,1,true,true,false],[129,25,1,true,true,false],[129,30,1,true,false,false],[129,31,1,true,true,false],[129,45,1,true,false,false],[130,14,0,false,false,false],[132,9,1,true,true,false],[132,14,0,false,false,false],[133,5,1,true,true,false],[133,6,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":5,"covered":5,"percent":100.0},"instantiations":{"count":10,"covered":9,"percent":90.0},"lines":{"count":29,"covered":29,"percent":100.0},"regions":{"count":53,"covered":51,"notcovered":2,"percent":96.22641509433963}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/error/mod.rs","segments":[[59,5,3,true,true,false],[59,48,0,false,false,false],[60,9,3,true,true,false],[62,10,0,false,false,false],[63,5,3,true,true,false],[63,6,0,false,false,false],[68,5,5,true,true,false],[68,48,0,false,false,false],[69,12,5,true,true,false],[69,15,5,true,false,false],[69,57,0,false,false,false],[70,20,3,true,true,false],[70,23,0,false,false,false],[70,24,3,true,true,false],[70,33,0,false,false,false],[71,9,2,true,true,false],[71,10,0,false,false,false],[72,13,2,true,true,false],[72,17,0,false,false,false],[72,43,2,true,true,false],[72,57,0,false,false,false],[72,58,2,true,true,false],[72,81,0,false,false,false],[72,82,2,true,true,false],[72,87,0,false,false,false],[72,90,2,true,true,false],[72,95,0,false,false,false],[73,13,2,true,true,false],[73,20,0,false,false,false],[73,22,2,true,true,false],[73,28,0,false,false,false],[73,31,2,true,true,false],[73,34,0,false,false,false],[73,35,2,true,true,false],[73,40,0,false,false,false],[73,43,2,true,true,false],[73,47,0,false,false,false],[73,48,2,true,true,false],[73,52,0,false,false,false],[73,54,2,true,true,false],[73,61,0,false,false,false],[74,9,2,true,true,false],[74,12,0,false,false,false],[74,13,2,true,true,false],[74,21,0,false,false,false],[74,22,2,true,true,false],[74,45,0,false,false,false],[75,9,2,true,true,false],[75,12,0,false,false,false],[76,5,5,true,true,false],[76,6,0,false,false,false],[80,5,18,true,true,false],[80,86,0,false,false,false],[81,9,18,true,true,false],[82,20,18,true,true,false],[82,25,18,true,false,false],[82,26,18,true,true,false],[82,30,18,true,false,false],[84,10,0,false,false,false],[85,5,18,true,true,false],[85,6,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":3,"covered":3,"percent":100.0},"instantiations":{"count":12,"covered":10,"percent":83.33333333333334},"lines":{"count":20,"covered":20,"percent":100.0},"regions":{"count":31,"covered":31,"notcovered":0,"percent":100.0}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/error/test.rs","segments":[[8,1,1,true,true,false],[8,35,0,false,false,false],[9,9,1,true,true,false],[9,12,0,false,false,false],[9,15,1,true,true,false],[9,39,0,false,false,false],[9,40,1,true,true,false],[9,46,0,false,false,false],[10,5,1,true,true,false],[10,15,0,false,false,false],[12,9,1,true,true,false],[14,10,0,false,false,false],[16,1,1,true,true,false],[16,2,0,false,false,false],[19,1,1,true,true,false],[19,46,0,false,false,false],[20,9,1,true,true,false],[20,12,0,false,false,false],[20,15,1,true,true,false],[20,18,0,false,false,false],[20,19,1,true,true,false],[20,25,0,false,false,false],[20,26,1,true,true,false],[20,53,0,false,false,false],[21,35,1,true,true,false],[21,41,0,false,false,false],[21,46,1,true,true,false],[21,76,0,false,false,false],[22,9,0,true,true,false],[22,15,0,false,false,false],[24,5,1,true,true,false],[24,15,0,false,false,false],[24,16,1,true,true,false],[24,30,0,false,false,false],[24,31,1,true,true,false],[24,36,0,false,false,false],[25,5,1,true,true,false],[25,12,0,false,false,false],[25,13,1,true,true,false],[25,47,0,false,false,false],[26,1,1,true,true,false],[26,2,0,false,false,false],[29,1,1,true,true,false],[29,52,0,false,false,false],[32,9,1,true,true,false],[32,12,0,false,false,false],[32,15,1,true,true,false],[32,21,0,false,false,false],[32,22,1,true,true,false],[32,28,0,false,false,false],[32,29,1,true,true,false],[32,56,0,false,false,false],[33,9,1,true,true,false],[33,15,0,false,false,false],[33,18,1,true,true,false],[33,40,0,false,false,false],[33,41,1,true,true,false],[33,45,0,false,false,false],[34,5,1,true,true,false],[34,15,0,false,false,false],[34,16,1,true,true,false],[34,30,0,false,false,false],[34,31,1,true,true,false],[34,36,0,false,false,false],[35,5,1,true,true,false],[35,12,0,false,false,false],[35,13,1,true,true,false],[35,39,0,false,false,false],[36,1,1,true,true,false],[36,2,0,false,false,false],[39,1,1,true,true,false],[39,48,0,false,false,false],[40,9,1,true,true,false],[40,12,0,false,false,false],[40,15,1,true,true,false],[40,18,0,false,false,false],[40,19,1,true,true,false],[40,25,0,false,false,false],[41,5,1,true,true,false],[41,15,0,false,false,false],[41,16,1,true,true,false],[41,38,0,false,false,false],[41,39,1,true,true,false],[41,43,0,false,false,false],[42,1,1,true,true,false],[42,2,0,false,false,false],[45,1,1,true,true,false],[45,51,0,false,false,false],[46,9,1,true,true,false],[46,12,0,false,false,false],[46,15,1,true,true,false],[46,35,0,false,false,false],[47,5,1,true,true,false],[47,15,0,false,false,false],[49,9,1,true,true,false],[50,20,1,true,true,false],[50,44,1,true,false,false],[50,45,1,true,true,false],[50,54,1,true,false,false],[52,10,0,false,false,false],[54,1,1,true,true,false],[54,2,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":5,"covered":5,"percent":100.0},"instantiations":{"count":5,"covered":5,"percent":100.0},"lines":{"count":32,"covered":31,"percent":96.875},"regions":{"count":51,"covered":50,"notcovered":1,"percent":98.0392156862745}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/vendor/tinybus/crates/tinybus-module/src/lib.rs","segments":[[534,9,0,true,true,false],[534,90,0,false,false,false],[535,13,0,true,true,false],[535,35,0,false,false,false],[535,36,0,true,true,false],[536,23,0,true,true,false],[536,27,0,true,false,false],[537,26,0,true,true,false],[537,30,0,true,false,false],[538,27,0,true,true,false],[538,44,0,true,false,false],[539,26,0,true,true,false],[539,42,0,true,false,false],[540,26,0,true,true,false],[540,42,0,true,false,false],[545,14,0,false,false,false],[546,9,0,true,true,false],[546,10,0,false,false,false],[620,9,0,true,true,false],[623,17,0,false,false,false],[624,22,0,true,true,false],[624,42,0,false,false,false],[624,43,0,true,true,false],[624,47,0,false,false,false],[624,49,0,true,true,false],[624,52,0,false,false,false],[625,9,0,true,true,false],[625,10,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":2,"covered":0,"percent":0.0},"instantiations":{"count":2,"covered":0,"percent":0.0},"lines":{"count":19,"covered":0,"percent":0.0},"regions":{"count":14,"covered":0,"notcovered":14,"percent":0.0}}}],"functions":[{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx00B8_","regions":[[32,45,32,59,0,0,0,0],[32,60,32,65,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx0s0_0B8_","regions":[[38,30,38,39,0,0,0,0],[38,40,38,46,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx0s_0B8_","regions":[[35,23,35,46,0,0,0,0],[35,47,35,56,0,0,0,0],[36,26,36,61,0,0,0,0],[36,62,36,71,0,0,0,0],[37,13,37,14,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB4_8TinyDocs13generate_docx0B6_","regions":[[31,77,31,78,0,0,0,0],[32,9,32,36,0,0,0,0],[33,14,33,19,0,0,0,0],[34,14,34,21,0,0,0,0],[37,15,37,16,0,0,0,0],[38,14,38,21,0,0,0,0],[39,5,39,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvNtCs9mDM506iYPe_15tinydocs_module7service5setup0B5_","regions":[[54,57,54,58,0,0,0,0],[55,5,55,15,0,0,0,0],[56,10,56,18,0,0,0,0],[56,19,56,30,0,0,0,0],[56,31,56,39,0,0,0,0],[56,41,56,42,0,0,0,0],[56,44,56,52,0,0,0,0],[57,10,57,15,0,0,0,0],[57,15,57,16,0,0,0,0],[58,5,58,15,0,0,0,0],[58,5,58,44,0,0,0,0],[58,44,58,45,0,0,0,0],[59,5,59,11,0,0,0,0],[60,1,60,2,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvXs_NtCs9mDM506iYPe_15tinydocs_module7serviceNtB6_8TinyDocsNtNtCs1HgUDVOEcj9_7tinybus7service9Interface4call0B8_","regions":[[28,59,28,60,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB2_8TinyDocs13generate_docx","regions":[[31,5,31,76,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvNtCs9mDM506iYPe_15tinydocs_module7service5setup","regions":[[54,1,54,56,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvNtCs9mDM506iYPe_15tinydocs_module7service9map_error","regions":[[42,1,42,40,0,0,0,0],[43,9,43,13,0,0,0,0],[43,22,43,27,0,0,0,0],[44,39,44,58,0,0,0,0],[45,43,45,66,0,0,0,0],[46,14,46,33,0,0,0,0],[48,5,51,6,0,0,0,0],[49,15,49,19,0,0,0,0],[49,20,49,29,0,0,0,0],[52,1,52,2,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/vendor/tinybus/crates/tinybus-module/src/lib.rs"],"name":"tinybus_module_init_v1","regions":[[620,9,623,17,0,0,0,0],[624,22,624,42,0,0,0,0],[624,43,624,47,0,0,0,0],[624,49,624,52,0,0,0,0],[625,9,625,10,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/vendor/tinybus/crates/tinybus-module/src/lib.rs"],"name":"tinybus_module_manifest_v1","regions":[[534,9,534,90,0,0,0,0],[535,13,535,35,0,0,0,0],[535,36,545,14,0,0,0,0],[536,23,536,27,0,0,0,0],[537,26,537,30,0,0,0,0],[538,27,538,44,0,0,0,0],[539,26,539,42,0,0,0,0],[540,26,540,42,0,0,0,0],[546,9,546,10,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvMNtCs39F7AuVwQYg_8tinydocs4docxNtNtB4_5types12DocumentSpec8validate0B6_","regions":[[86,30,86,31,0,0,0,0],[87,13,87,33,0,0,0,0],[89,17,89,24,0,0,0,0],[91,9,91,10,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCs39F7AuVwQYg_8tinydocs4docx5build0B5_","regions":[[254,62,254,70,0,0,0,0],[254,71,254,79,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCs39F7AuVwQYg_8tinydocs4docx5builds_0B5_","regions":[[266,71,266,79,1,0,0,0],[266,80,266,88,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCs39F7AuVwQYg_8tinydocs4docx8generate0B5_","regions":[[219,24,219,48,0,0,0,0],[219,49,219,65,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvNtCs39F7AuVwQYg_8tinydocs4docx5build","regions":[[227,1,227,38,1,0,0,0],[231,9,231,17,1,0,0,0],[231,20,231,29,1,0,0,0],[232,10,232,32,1,0,0,0],[233,13,233,35,1,0,0,0],[233,57,233,66,1,0,0,0],[233,67,233,77,1,0,0,0],[235,17,235,27,1,0,0,0],[236,17,236,34,1,0,0,0],[237,17,237,31,1,0,0,0],[238,17,238,29,1,0,0,0],[241,10,241,23,1,0,0,0],[241,24,241,38,1,0,0,0],[244,5,244,9,1,0,0,0],[244,12,244,16,1,0,0,0],[244,17,244,30,1,0,0,0],[245,9,245,23,1,0,0,0],[245,26,245,31,1,0,0,0],[245,32,245,39,1,0,0,0],[245,41,245,48,1,0,0,0],[246,13,246,21,1,0,0,0],[247,18,247,26,1,0,0,0],[247,27,247,44,1,0,0,0],[248,18,248,22,1,0,0,0],[249,18,249,22,1,0,0,0],[254,17,254,23,0,0,0,0],[254,27,254,38,1,0,0,0],[254,39,254,47,1,0,0,0],[254,50,254,56,1,0,0,0],[254,83,263,6,0,0,0,0],[255,9,255,13,0,0,0,0],[255,16,255,20,0,0,0,0],[255,21,255,34,0,0,0,0],[256,13,256,27,0,0,0,0],[256,30,256,37,0,0,0,0],[257,17,257,25,0,0,0,0],[258,22,258,30,0,0,0,0],[258,31,258,37,0,0,0,0],[258,38,258,42,0,0,0,0],[263,5,263,6,1,0,0,0],[265,9,265,16,1,0,0,0],[265,20,265,34,1,0,0,0],[266,21,266,28,1,0,0,0],[266,32,266,47,1,0,0,0],[266,48,266,56,1,0,0,0],[266,59,266,65,1,0,0,0],[266,92,275,10,1,0,0,0],[267,13,267,17,1,0,0,0],[267,20,267,24,1,0,0,0],[267,25,267,38,1,0,0,0],[268,17,268,31,1,0,0,0],[268,34,268,39,1,0,0,0],[268,40,268,50,1,0,0,0],[268,52,268,59,1,0,0,0],[269,21,269,29,1,0,0,0],[270,26,270,34,1,0,0,0],[270,35,270,42,1,0,0,0],[270,43,270,47,1,0,0,0],[275,9,275,10,0,0,0,0],[276,13,276,22,1,0,0,0],[276,26,276,45,1,0,0,0],[277,17,277,21,1,0,0,0],[277,24,277,40,1,0,0,0],[278,16,278,32,1,0,0,0],[278,33,280,14,1,0,0,0],[279,17,279,21,1,0,0,0],[279,24,279,28,1,0,0,0],[279,29,279,42,1,0,0,0],[279,43,279,57,1,0,0,0],[279,60,279,67,1,0,0,0],[279,68,279,76,1,0,0,0],[280,13,280,14,0,0,0,0],[282,13,282,19,1,0,0,0],[282,23,282,39,1,0,0,0],[283,17,283,21,1,0,0,0],[283,24,283,37,1,0,0,0],[284,16,284,32,1,0,0,0],[284,33,290,14,1,0,0,0],[285,17,285,21,1,0,0,0],[285,24,285,28,1,0,0,0],[285,29,285,42,1,0,0,0],[286,21,286,35,1,0,0,0],[287,26,287,33,1,0,0,0],[287,34,287,42,1,0,0,0],[287,45,287,53,1,0,0,0],[287,54,287,58,1,0,0,0],[288,26,288,35,1,0,0,0],[290,13,290,14,0,0,0,0],[294,5,294,9,1,0,0,0],[295,1,295,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvNtCs39F7AuVwQYg_8tinydocs4docx8generate","regions":[[209,1,209,56,2,0,0,0],[210,5,210,9,2,0,0,0],[210,10,210,18,2,0,0,0],[210,20,210,21,1,0,0,0],[215,9,215,19,1,0,0,0],[215,22,215,42,1,0,0,0],[215,43,215,57,1,0,0,0],[216,5,216,10,1,0,0,0],[216,11,216,15,1,0,0,0],[217,10,217,15,1,0,0,0],[218,10,218,14,1,0,0,0],[218,15,218,26,1,0,0,0],[219,10,219,17,1,0,0,0],[219,67,219,68,0,0,0,0],[220,5,220,28,1,0,0,0],[221,1,221,2,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCs39F7AuVwQYg_8tinydocs5errorNtB3_5Error13invalid_inputNtNtCs8y6E41fb8tc_5alloc6string6StringBY_EB5_","regions":[[80,5,80,86,0,0,0,0],[81,9,84,10,0,0,0,0],[82,20,82,25,0,0,0,0],[82,26,82,30,0,0,0,0],[85,5,85,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCs39F7AuVwQYg_8tinydocs5errorNtB3_5Error13invalid_inputNtNtCs8y6E41fb8tc_5alloc6string6StringReEB5_","regions":[[80,5,80,86,0,0,0,0],[81,9,84,10,0,0,0,0],[82,20,82,25,0,0,0,0],[82,26,82,30,0,0,0,0],[85,5,85,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":3,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCs39F7AuVwQYg_8tinydocs5errorNtB3_5Error13invalid_inputReBY_EB5_","regions":[[80,5,80,86,3,0,0,0],[81,9,84,10,3,0,0,0],[82,20,82,25,3,0,0,0],[82,26,82,30,3,0,0,0],[85,5,85,6,3,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCs39F7AuVwQYg_8tinydocs5errorNtB3_5Error13invalid_inputReNtNtCs8y6E41fb8tc_5alloc6string6StringEB5_","regions":[[80,5,80,86,1,0,0,0],[81,9,84,10,1,0,0,0],[82,20,82,25,1,0,0,0],[82,26,82,30,1,0,0,0],[85,5,85,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RNvMNtCs39F7AuVwQYg_8tinydocs5errorNtB2_5Error15truncate_detail","regions":[[68,5,68,48,1,0,0,0],[69,12,69,15,1,0,0,0],[69,12,69,57,1,0,0,0],[70,20,70,23,1,0,0,0],[70,24,70,33,1,0,0,0],[71,9,71,10,0,0,0,0],[72,13,72,17,0,0,0,0],[72,43,72,57,0,0,0,0],[72,58,72,81,0,0,0,0],[72,82,72,87,0,0,0,0],[72,90,72,95,0,0,0,0],[73,13,73,20,0,0,0,0],[73,22,73,28,0,0,0,0],[73,31,73,34,0,0,0,0],[73,35,73,40,0,0,0,0],[73,43,73,47,0,0,0,0],[73,48,73,52,0,0,0,0],[73,54,73,61,0,0,0,0],[74,9,74,12,0,0,0,0],[74,13,74,21,0,0,0,0],[74,22,74,45,0,0,0,0],[75,9,75,12,0,0,0,0],[76,5,76,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RNvMNtCs39F7AuVwQYg_8tinydocs5errorNtB2_5Error17generation_failed","regions":[[59,5,59,48,1,0,0,0],[60,9,62,10,1,0,0,0],[63,5,63,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB4_15DocumentSection8is_blank0B8_","regions":[[88,31,88,39,2,0,0,0],[88,40,88,48,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB4_15DocumentSection8is_blanks0_0B8_","regions":[[90,55,90,63,2,0,0,0],[90,64,90,72,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB4_15DocumentSection8is_blanks_0B8_","regions":[[89,61,89,69,2,0,0,0],[89,70,89,78,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":5,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvMNtCs39F7AuVwQYg_8tinydocs4docxNtNtB2_5types12DocumentSpec8validate","regions":[[71,5,71,41,5,0,0,0],[72,12,72,29,5,0,0,0],[72,30,72,38,5,0,0,0],[73,20,73,75,1,0,0,0],[74,9,74,10,4,0,0,0],[75,12,75,55,4,0,0,0],[76,20,79,15,1,0,0,0],[80,9,80,10,3,0,0,0],[86,13,86,24,3,0,0,0],[92,13,92,22,3,0,0,0],[92,25,92,43,3,0,0,0],[92,44,92,49,3,0,0,0],[93,21,93,27,0,0,0,0],[93,31,93,53,3,0,0,0],[94,16,94,22,0,0,0,0],[94,16,94,55,0,0,0,0],[95,24,98,19,0,0,0,0],[99,13,99,14,0,0,0,0],[100,13,100,65,0,0,0,0],[100,21,100,26,0,0,0,0],[100,27,100,41,0,0,0,0],[100,42,100,48,0,0,0,0],[101,9,101,10,3,0,0,0],[102,12,102,25,3,0,0,0],[102,26,102,34,3,0,0,0],[103,20,106,15,1,0,0,0],[107,9,107,10,2,0,0,0],[108,12,108,46,2,0,0,0],[109,20,112,15,0,0,0,0],[113,9,113,10,2,0,0,0],[115,14,115,15,2,0,0,0],[115,17,115,24,2,0,0,0],[115,29,115,49,2,0,0,0],[115,50,115,59,2,0,0,0],[116,16,116,23,2,0,0,0],[116,24,116,32,2,0,0,0],[117,24,120,19,0,0,0,0],[121,13,121,14,2,0,0,0],[122,25,122,32,2,0,0,0],[122,36,122,62,2,0,0,0],[123,20,123,27,2,0,0,0],[123,20,123,60,2,0,0,0],[124,28,127,23,0,0,0,0],[124,32,124,52,0,0,0,0],[128,17,128,18,2,0,0,0],[129,17,129,70,2,0,0,0],[129,25,129,30,2,0,0,0],[129,31,129,45,2,0,0,0],[129,46,129,53,2,0,0,0],[130,20,130,43,2,0,0,0],[131,28,131,46,0,0,0,0],[132,17,132,18,2,0,0,0],[133,13,133,14,0,0,0,0],[134,16,134,69,2,0,0,0],[135,24,138,19,0,0,0,0],[135,28,135,48,0,0,0,0],[139,13,139,14,2,0,0,0],[140,18,140,19,2,0,0,0],[140,21,140,30,2,0,0,0],[140,35,140,60,2,0,0,0],[140,61,140,70,2,0,0,0],[141,20,141,67,2,0,0,0],[142,28,145,23,0,0,0,0],[142,32,142,52,0,0,0,0],[146,17,146,18,2,0,0,0],[147,17,147,72,2,0,0,0],[147,25,147,30,2,0,0,0],[147,31,147,45,2,0,0,0],[148,20,148,43,2,0,0,0],[149,28,149,46,0,0,0,0],[150,17,150,18,2,0,0,0],[152,16,152,63,2,0,0,0],[153,24,156,19,0,0,0,0],[153,28,153,48,0,0,0,0],[157,13,157,14,2,0,0,0],[158,18,158,19,2,0,0,0],[158,21,158,27,2,0,0,0],[158,32,158,54,2,0,0,0],[158,55,158,64,2,0,0,0],[159,20,159,64,2,0,0,0],[160,28,163,23,0,0,0,0],[160,32,160,52,0,0,0,0],[164,17,164,18,2,0,0,0],[165,17,165,69,2,0,0,0],[165,25,165,30,2,0,0,0],[165,31,165,45,2,0,0,0],[166,20,166,43,2,0,0,0],[167,28,167,46,0,0,0,0],[168,17,168,18,2,0,0,0],[171,9,171,15,2,0,0,0],[172,5,172,6,5,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNvMNtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB2_15DocumentSection8is_blank","regions":[[84,5,84,35,2,0,0,0],[85,13,85,24,2,0,0,0],[85,27,86,21,2,0,0,0],[87,14,87,22,2,0,0,0],[88,14,88,25,2,0,0,0],[89,13,89,26,2,0,0,0],[89,29,89,51,2,0,0,0],[89,52,89,55,2,0,0,0],[90,13,90,23,2,0,0,0],[90,26,90,45,2,0,0,0],[90,46,90,49,2,0,0,0],[91,11,91,22,2,0,0,0],[91,26,91,39,0,0,0,0],[91,43,91,53,0,0,0,0],[92,5,92,6,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNvMs_NtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB4_12DocumentSpec11total_chars","regions":[[116,5,116,39,0,0,0,0],[117,13,117,22,0,0,0,0],[117,25,117,43,0,0,0,0],[117,44,117,49,0,0,0,0],[118,21,118,27,0,0,0,0],[118,31,118,53,0,0,0,0],[118,54,120,10,0,0,0,0],[119,21,119,26,0,0,0,0],[119,27,119,41,0,0,0,0],[119,42,119,48,0,0,0,0],[120,9,120,10,0,0,0,0],[121,13,121,20,0,0,0,0],[121,24,121,38,0,0,0,0],[122,25,122,32,0,0,0,0],[122,36,122,62,0,0,0,0],[122,63,124,14,0,0,0,0],[123,25,123,30,0,0,0,0],[123,31,123,45,0,0,0,0],[123,46,123,53,0,0,0,0],[124,13,124,14,0,0,0,0],[125,17,125,26,0,0,0,0],[125,30,125,49,0,0,0,0],[125,50,127,14,0,0,0,0],[126,25,126,30,0,0,0,0],[126,31,126,45,0,0,0,0],[128,17,128,23,0,0,0,0],[128,27,128,43,0,0,0,0],[128,44,130,14,0,0,0,0],[129,25,129,30,0,0,0,0],[129,31,129,45,0,0,0,0],[132,9,132,14,0,0,0,0],[133,5,133,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/tests/module_e2e.rs"],"name":"_RNCNCNCNvCs2BVRTvt6Wvf_10module_e2es_52built_cdylib_loads_and_generates_a_docx_over_the_bus000B7_","regions":[[36,29,36,42,0,0,0,0],[36,46,36,54,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/tests/module_e2e.rs"],"name":"_RNCNCNvCs2BVRTvt6Wvf_10module_e2es_52built_cdylib_loads_and_generates_a_docx_over_the_bus00B5_","regions":[[29,56,29,57,0,0,0,0],[31,16,31,22,0,0,0,0],[31,16,33,23,0,0,0,0],[34,18,34,24,0,0,0,0],[35,18,35,22,0,0,0,0],[36,18,36,21,0,0,0,0],[38,17,38,22,0,0,0,0],[39,13,39,14,0,0,0,0],[40,13,40,43,0,0,0,0],[42,5,42,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/tests/module_e2e.rs"],"name":"_RNCNvCs2BVRTvt6Wvf_10module_e2es_52built_cdylib_loads_and_generates_a_docx_over_the_bus0B3_","regions":[[16,65,16,66,0,0,0,0],[17,9,17,17,0,0,0,0],[18,9,18,25,0,0,0,0],[18,50,18,56,0,0,0,0],[18,57,18,91,0,0,0,0],[19,9,19,12,0,0,0,0],[19,15,19,29,0,0,0,0],[20,9,20,15,0,0,0,0],[20,18,20,29,0,0,0,0],[21,9,21,20,0,0,0,0],[21,23,21,29,0,0,0,0],[21,30,21,35,0,0,0,0],[21,36,21,39,0,0,0,0],[21,40,21,45,0,0,0,0],[22,9,22,16,0,0,0,0],[22,19,22,34,0,0,0,0],[22,35,22,41,0,0,0,0],[23,9,23,15,0,0,0,0],[23,18,23,25,0,0,0,0],[23,26,23,35,0,0,0,0],[23,36,23,44,0,0,0,0],[23,46,23,52,0,0,0,0],[23,53,23,73,0,0,0,0],[24,5,24,15,0,0,0,0],[26,9,26,15,0,0,0,0],[26,18,26,37,0,0,0,0],[26,38,26,41,0,0,0,0],[26,38,26,57,0,0,0,0],[26,58,26,64,0,0,0,0],[27,10,27,15,0,0,0,0],[28,10,28,16,0,0,0,0],[29,5,29,25,0,0,0,0],[29,26,29,45,0,0,0,0],[43,6,43,11,0,0,0,0],[44,6,44,12,0,0,0,0],[44,13,44,41,0,0,0,0],[46,9,46,14,0,0,0,0],[46,17,46,23,0,0,0,0],[46,24,46,29,0,0,0,0],[46,63,46,69,0,0,0,0],[47,9,47,14,0,0,0,0],[47,16,47,23,0,0,0,0],[47,26,47,31,0,0,0,0],[47,26,60,15,0,0,0,0],[48,10,48,14,0,0,0,0],[49,13,49,27,0,0,0,0],[51,24,51,37,0,0,0,0],[51,38,51,47,0,0,0,0],[52,25,52,53,0,0,0,0],[53,27,53,31,0,0,0,0],[54,30,54,63,0,0,0,0],[55,33,55,37,0,0,0,0],[55,38,55,78,0,0,0,0],[55,79,55,88,0,0,0,0],[56,30,56,34,0,0,0,0],[61,10,61,16,0,0,0,0],[61,17,61,42,0,0,0,0],[63,5,63,15,0,0,0,0],[63,16,63,27,0,0,0,0],[64,5,64,12,0,0,0,0],[64,13,64,21,0,0,0,0],[64,22,64,45,0,0,0,0],[65,5,65,16,0,0,0,0],[65,17,65,22,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/tests/module_e2e.rs"],"name":"_RNvCs2BVRTvt6Wvf_10module_e2es_52built_cdylib_loads_and_generates_a_docx_over_the_bus","regions":[[16,7,16,64,0,0,0,0],[65,5,65,25,0,0,0,0],[66,1,66,2,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":5,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_api4spec","regions":[[18,1,18,26,5,0,0,0],[19,5,27,6,5,0,0,0],[20,16,20,30,5,0,0,0],[20,31,20,40,5,0,0,0],[21,17,21,21,5,0,0,0],[22,19,22,23,5,0,0,0],[23,22,23,49,5,0,0,0],[24,25,24,29,5,0,0,0],[24,30,24,42,5,0,0,0],[24,43,24,52,5,0,0,0],[25,22,25,26,5,0,0,0],[28,1,28,2,5,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_apis_29consumers_can_generate_a_docx","regions":[[31,1,31,35,1,0,0,0],[32,9,32,14,1,0,0,0],[32,17,32,31,1,0,0,0],[32,32,32,39,1,0,0,0],[32,41,32,47,1,0,0,0],[32,48,32,75,1,0,0,0],[33,5,33,15,1,0,0,0],[33,16,33,28,1,0,0,0],[34,1,34,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_apis_31limits_are_visible_to_consumers","regions":[[61,1,61,37,1,0,0,0],[64,9,64,20,1,0,0,0],[64,23,64,27,1,0,0,0],[65,5,65,18,1,0,0,0],[65,21,65,24,1,0,0,0],[65,25,65,31,1,0,0,0],[65,32,65,56,1,0,0,0],[66,5,66,12,1,0,0,0],[66,13,66,31,1,0,0,0],[66,32,66,38,1,0,0,0],[67,1,67,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_apis_39invalid_input_names_the_offending_field","regions":[[51,1,51,45,1,0,0,0],[52,9,52,20,1,0,0,0],[52,23,52,27,1,0,0,0],[53,5,53,18,1,0,0,0],[53,21,53,32,1,0,0,0],[54,11,54,25,1,0,0,0],[54,26,54,34,1,0,0,0],[55,35,55,40,1,0,0,0],[55,51,55,61,1,0,0,0],[56,9,56,14,0,0,0,0],[56,18,56,24,0,0,0,0],[58,1,58,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_apis_48consumers_can_validate_a_spec_without_generating","regions":[[37,1,37,54,1,0,0,0],[40,5,40,12,1,0,0,0],[40,13,40,30,1,0,0,0],[40,31,40,36,1,0,0,0],[42,9,42,20,1,0,0,0],[42,23,42,27,1,0,0,0],[43,5,43,21,1,0,0,0],[43,22,43,27,1,0,0,0],[44,5,44,12,1,0,0,0],[44,13,44,21,0,0,0,0],[45,9,45,16,1,0,0,0],[45,17,45,25,1,0,0,0],[48,1,48,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvMNtCsj868BPJcX0E_8tinydocs4docxNtNtB4_5types12DocumentSpec8validate0B6_","regions":[[86,30,86,31,1,0,0,0],[87,13,87,33,1,0,0,0],[89,17,89,24,1,0,0,0],[91,9,91,10,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":3,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCsj868BPJcX0E_8tinydocs4docx5build0B5_","regions":[[254,62,254,70,3,0,0,0],[254,71,254,79,3,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCsj868BPJcX0E_8tinydocs4docx5builds_0B5_","regions":[[266,71,266,79,4,0,0,0],[266,80,266,88,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCsj868BPJcX0E_8tinydocs4docx8generate0B5_","regions":[[219,24,219,48,0,0,0,0],[219,49,219,65,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":3,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvNtCsj868BPJcX0E_8tinydocs4docx5build","regions":[[227,1,227,38,3,0,0,0],[231,9,231,17,3,0,0,0],[231,20,231,29,3,0,0,0],[232,10,232,32,3,0,0,0],[233,13,233,35,3,0,0,0],[233,57,233,66,3,0,0,0],[233,67,233,77,3,0,0,0],[235,17,235,27,3,0,0,0],[236,17,236,34,3,0,0,0],[237,17,237,31,3,0,0,0],[238,17,238,29,3,0,0,0],[241,10,241,23,3,0,0,0],[241,24,241,38,3,0,0,0],[244,5,244,9,3,0,0,0],[244,12,244,16,3,0,0,0],[244,17,244,30,3,0,0,0],[245,9,245,23,3,0,0,0],[245,26,245,31,3,0,0,0],[245,32,245,39,3,0,0,0],[245,41,245,48,3,0,0,0],[246,13,246,21,3,0,0,0],[247,18,247,26,3,0,0,0],[247,27,247,44,3,0,0,0],[248,18,248,22,3,0,0,0],[249,18,249,22,3,0,0,0],[254,17,254,23,2,0,0,0],[254,27,254,38,3,0,0,0],[254,39,254,47,3,0,0,0],[254,50,254,56,3,0,0,0],[254,83,263,6,2,0,0,0],[255,9,255,13,2,0,0,0],[255,16,255,20,2,0,0,0],[255,21,255,34,2,0,0,0],[256,13,256,27,2,0,0,0],[256,30,256,37,2,0,0,0],[257,17,257,25,2,0,0,0],[258,22,258,30,2,0,0,0],[258,31,258,37,2,0,0,0],[258,38,258,42,2,0,0,0],[263,5,263,6,1,0,0,0],[265,9,265,16,4,0,0,0],[265,20,265,34,3,0,0,0],[266,21,266,28,4,0,0,0],[266,32,266,47,4,0,0,0],[266,48,266,56,4,0,0,0],[266,59,266,65,4,0,0,0],[266,92,275,10,4,0,0,0],[267,13,267,17,4,0,0,0],[267,20,267,24,4,0,0,0],[267,25,267,38,4,0,0,0],[268,17,268,31,4,0,0,0],[268,34,268,39,4,0,0,0],[268,40,268,50,4,0,0,0],[268,52,268,59,4,0,0,0],[269,21,269,29,4,0,0,0],[270,26,270,34,4,0,0,0],[270,35,270,42,4,0,0,0],[270,43,270,47,4,0,0,0],[275,9,275,10,0,0,0,0],[276,13,276,22,5,0,0,0],[276,26,276,45,4,0,0,0],[277,17,277,21,5,0,0,0],[277,24,277,40,5,0,0,0],[278,16,278,32,5,0,0,0],[278,33,280,14,3,0,0,0],[279,17,279,21,3,0,0,0],[279,24,279,28,3,0,0,0],[279,29,279,42,3,0,0,0],[279,43,279,57,3,0,0,0],[279,60,279,67,3,0,0,0],[279,68,279,76,3,0,0,0],[280,13,280,14,2,0,0,0],[282,13,282,19,5,0,0,0],[282,23,282,39,4,0,0,0],[283,17,283,21,5,0,0,0],[283,24,283,37,5,0,0,0],[284,16,284,32,5,0,0,0],[284,33,290,14,4,0,0,0],[285,17,285,21,4,0,0,0],[285,24,285,28,4,0,0,0],[285,29,285,42,4,0,0,0],[286,21,286,35,4,0,0,0],[287,26,287,33,4,0,0,0],[287,34,287,42,4,0,0,0],[287,45,287,53,4,0,0,0],[287,54,287,58,4,0,0,0],[288,26,288,35,4,0,0,0],[290,13,290,14,1,0,0,0],[294,5,294,9,3,0,0,0],[295,1,295,2,3,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvNtCsj868BPJcX0E_8tinydocs4docx8generate","regions":[[209,1,209,56,4,0,0,0],[210,5,210,9,4,0,0,0],[210,10,210,18,4,0,0,0],[210,20,210,21,1,0,0,0],[215,9,215,19,3,0,0,0],[215,22,215,42,3,0,0,0],[215,43,215,57,3,0,0,0],[216,5,216,10,3,0,0,0],[216,11,216,15,3,0,0,0],[217,10,217,15,3,0,0,0],[218,10,218,14,3,0,0,0],[218,15,218,26,3,0,0,0],[219,10,219,17,3,0,0,0],[219,67,219,68,0,0,0,0],[220,5,220,28,3,0,0,0],[221,1,221,2,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":15,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB4_15DocumentSection8is_blank0B8_","regions":[[88,31,88,39,15,0,0,0],[88,40,88,48,15,0,0,0]]},{"branches":[],"mcdc_records":[],"count":12,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB4_15DocumentSection8is_blanks0_0B8_","regions":[[90,55,90,63,12,0,0,0],[90,64,90,72,12,0,0,0]]},{"branches":[],"mcdc_records":[],"count":13,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB4_15DocumentSection8is_blanks_0B8_","regions":[[89,61,89,69,13,0,0,0],[89,70,89,78,13,0,0,0]]},{"branches":[],"mcdc_records":[],"count":17,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvMNtCsj868BPJcX0E_8tinydocs4docxNtNtB2_5types12DocumentSpec8validate","regions":[[71,5,71,41,17,0,0,0],[72,12,72,29,17,0,0,0],[72,30,72,38,17,0,0,0],[73,20,73,75,2,0,0,0],[74,9,74,10,15,0,0,0],[75,12,75,55,15,0,0,0],[76,20,79,15,1,0,0,0],[80,9,80,10,14,0,0,0],[86,13,86,24,14,0,0,0],[92,13,92,22,14,0,0,0],[92,25,92,43,14,0,0,0],[92,44,92,49,14,0,0,0],[93,21,93,27,13,0,0,0],[93,31,93,53,14,0,0,0],[94,16,94,22,13,0,0,0],[94,16,94,55,13,0,0,0],[95,24,98,19,1,0,0,0],[99,13,99,14,12,0,0,0],[100,13,100,65,12,0,0,0],[100,21,100,26,12,0,0,0],[100,27,100,41,12,0,0,0],[100,42,100,48,12,0,0,0],[101,9,101,10,1,0,0,0],[102,12,102,25,13,0,0,0],[102,26,102,34,13,0,0,0],[103,20,106,15,1,0,0,0],[107,9,107,10,12,0,0,0],[108,12,108,46,12,0,0,0],[109,20,112,15,1,0,0,0],[113,9,113,10,11,0,0,0],[115,14,115,15,13,0,0,0],[115,17,115,24,13,0,0,0],[115,29,115,49,11,0,0,0],[115,50,115,59,11,0,0,0],[116,16,116,23,13,0,0,0],[116,24,116,32,13,0,0,0],[117,24,120,19,1,0,0,0],[121,13,121,14,12,0,0,0],[122,25,122,32,12,0,0,0],[122,36,122,62,12,0,0,0],[123,20,123,27,12,0,0,0],[123,20,123,60,12,0,0,0],[124,28,127,23,1,0,0,0],[124,32,124,52,1,0,0,0],[128,17,128,18,11,0,0,0],[129,17,129,70,11,0,0,0],[129,25,129,30,11,0,0,0],[129,31,129,45,11,0,0,0],[129,46,129,53,11,0,0,0],[130,20,130,43,11,0,0,0],[131,28,131,46,0,0,0,0],[132,17,132,18,11,0,0,0],[133,13,133,14,0,0,0,0],[134,16,134,69,11,0,0,0],[135,24,138,19,1,0,0,0],[135,28,135,48,1,0,0,0],[139,13,139,14,10,0,0,0],[140,18,140,19,111,0,0,0],[140,21,140,30,111,0,0,0],[140,35,140,60,10,0,0,0],[140,61,140,70,10,0,0,0],[141,20,141,67,111,0,0,0],[142,28,145,23,1,0,0,0],[142,32,142,52,1,0,0,0],[146,17,146,18,110,0,0,0],[147,17,147,72,110,0,0,0],[147,25,147,30,110,0,0,0],[147,31,147,45,110,0,0,0],[148,20,148,43,110,0,0,0],[149,28,149,46,1,0,0,0],[150,17,150,18,109,0,0,0],[152,16,152,63,8,0,0,0],[153,24,156,19,1,0,0,0],[153,28,153,48,1,0,0,0],[157,13,157,14,7,0,0,0],[158,18,158,19,9,0,0,0],[158,21,158,27,9,0,0,0],[158,32,158,54,7,0,0,0],[158,55,158,64,7,0,0,0],[159,20,159,64,9,0,0,0],[160,28,163,23,1,0,0,0],[160,32,160,52,1,0,0,0],[164,17,164,18,8,0,0,0],[165,17,165,69,8,0,0,0],[165,25,165,30,8,0,0,0],[165,31,165,45,8,0,0,0],[166,20,166,43,8,0,0,0],[167,28,167,46,0,0,0,0],[168,17,168,18,8,0,0,0],[171,9,171,15,4,0,0,0],[172,5,172,6,17,0,0,0]]},{"branches":[],"mcdc_records":[],"count":16,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNvMNtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB2_15DocumentSection8is_blank","regions":[[84,5,84,35,16,0,0,0],[85,13,85,24,16,0,0,0],[85,27,86,21,16,0,0,0],[87,14,87,22,16,0,0,0],[88,14,88,25,16,0,0,0],[89,13,89,26,16,0,0,0],[89,29,89,51,16,0,0,0],[89,52,89,55,16,0,0,0],[90,13,90,23,16,0,0,0],[90,26,90,45,16,0,0,0],[90,46,90,49,16,0,0,0],[91,11,91,22,16,0,0,0],[91,26,91,39,2,0,0,0],[91,43,91,53,2,0,0,0],[92,5,92,6,16,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNvMs_NtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB4_12DocumentSpec11total_chars","regions":[[116,5,116,39,1,0,0,0],[117,13,117,22,1,0,0,0],[117,25,117,43,1,0,0,0],[117,44,117,49,1,0,0,0],[118,21,118,27,1,0,0,0],[118,31,118,53,1,0,0,0],[118,54,120,10,1,0,0,0],[119,21,119,26,1,0,0,0],[119,27,119,41,1,0,0,0],[119,42,119,48,1,0,0,0],[120,9,120,10,0,0,0,0],[121,13,121,20,1,0,0,0],[121,24,121,38,1,0,0,0],[122,25,122,32,1,0,0,0],[122,36,122,62,1,0,0,0],[122,63,124,14,1,0,0,0],[123,25,123,30,1,0,0,0],[123,31,123,45,1,0,0,0],[123,46,123,53,1,0,0,0],[124,13,124,14,0,0,0,0],[125,17,125,26,1,0,0,0],[125,30,125,49,1,0,0,0],[125,50,127,14,1,0,0,0],[126,25,126,30,1,0,0,0],[126,31,126,45,1,0,0,0],[128,17,128,23,1,0,0,0],[128,27,128,43,1,0,0,0],[128,44,130,14,1,0,0,0],[129,25,129,30,1,0,0,0],[129,31,129,45,1,0,0,0],[132,9,132,14,1,0,0,0],[133,5,133,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":5,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCsj868BPJcX0E_8tinydocs5errorNtB3_5Error13invalid_inputNtNtCs8y6E41fb8tc_5alloc6string6StringBY_EB5_","regions":[[80,5,80,86,5,0,0,0],[81,9,84,10,5,0,0,0],[82,20,82,25,5,0,0,0],[82,26,82,30,5,0,0,0],[85,5,85,6,5,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCsj868BPJcX0E_8tinydocs5errorNtB3_5Error13invalid_inputNtNtCs8y6E41fb8tc_5alloc6string6StringReEB5_","regions":[[80,5,80,86,1,0,0,0],[81,9,84,10,1,0,0,0],[82,20,82,25,1,0,0,0],[82,26,82,30,1,0,0,0],[85,5,85,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCsj868BPJcX0E_8tinydocs5errorNtB3_5Error13invalid_inputReBY_EB5_","regions":[[80,5,80,86,4,0,0,0],[81,9,84,10,4,0,0,0],[82,20,82,25,4,0,0,0],[82,26,82,30,4,0,0,0],[85,5,85,6,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCsj868BPJcX0E_8tinydocs5errorNtB3_5Error13invalid_inputReNtNtCs8y6E41fb8tc_5alloc6string6StringEB5_","regions":[[80,5,80,86,4,0,0,0],[81,9,84,10,4,0,0,0],[82,20,82,25,4,0,0,0],[82,26,82,30,4,0,0,0],[85,5,85,6,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RNvMNtCsj868BPJcX0E_8tinydocs5errorNtB2_5Error15truncate_detail","regions":[[68,5,68,48,4,0,0,0],[69,12,69,15,4,0,0,0],[69,12,69,57,4,0,0,0],[70,20,70,23,2,0,0,0],[70,24,70,33,2,0,0,0],[71,9,71,10,2,0,0,0],[72,13,72,17,2,0,0,0],[72,43,72,57,2,0,0,0],[72,58,72,81,2,0,0,0],[72,82,72,87,2,0,0,0],[72,90,72,95,2,0,0,0],[73,13,73,20,2,0,0,0],[73,22,73,28,2,0,0,0],[73,31,73,34,2,0,0,0],[73,35,73,40,2,0,0,0],[73,43,73,47,2,0,0,0],[73,48,73,52,2,0,0,0],[73,54,73,61,2,0,0,0],[74,9,74,12,2,0,0,0],[74,13,74,21,2,0,0,0],[74,22,74,45,2,0,0,0],[75,9,75,12,2,0,0,0],[76,5,76,6,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RNvMNtCsj868BPJcX0E_8tinydocs5errorNtB2_5Error17generation_failed","regions":[[59,5,59,48,2,0,0,0],[60,9,62,10,2,0,0,0],[63,5,63,6,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":18,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNCNvNtNtCsj868BPJcX0E_8tinydocs4docx4test11entry_names0B7_","regions":[[44,18,44,21,18,0,0,0],[44,18,44,49,18,0,0,0],[44,22,44,30,18,0,0,0],[44,50,44,59,18,0,0,0]]},{"branches":[],"mcdc_records":[],"count":22,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNCNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_44generate_produces_a_readable_ooxml_container0B7_","regions":[[226,34,226,35,22,0,0,0],[226,39,226,47,22,0,0,0]]},{"branches":[],"mcdc_records":[],"count":16,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNCNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_44generate_produces_a_readable_ooxml_containers_0B7_","regions":[[232,30,232,31,16,0,0,0],[232,35,232,55,16,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test10entry_body","regions":[[49,1,49,50,2,0,0,0],[50,9,50,16,2,0,0,0],[51,9,51,29,2,0,0,0],[51,30,51,50,2,0,0,0],[51,51,51,56,2,0,0,0],[51,57,51,63,2,0,0,0],[51,68,51,74,2,0,0,0],[51,75,51,98,2,0,0,0],[52,9,52,18,2,0,0,0],[52,21,52,24,2,0,0,0],[52,25,52,32,2,0,0,0],[52,33,52,37,2,0,0,0],[52,39,52,45,2,0,0,0],[52,46,52,61,2,0,0,0],[53,9,53,17,2,0,0,0],[53,20,53,31,2,0,0,0],[54,5,54,34,2,0,0,0],[54,35,54,45,2,0,0,0],[54,47,54,56,2,0,0,0],[54,58,54,64,2,0,0,0],[55,5,55,9,2,0,0,0],[56,1,56,2,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test11entry_names","regions":[[40,1,40,44,1,0,0,0],[41,9,41,16,1,0,0,0],[42,9,42,29,1,0,0,0],[42,30,42,50,1,0,0,0],[42,51,42,56,1,0,0,0],[42,57,42,63,1,0,0,0],[42,68,42,74,1,0,0,0],[42,75,42,98,1,0,0,0],[43,6,43,18,1,0,0,0],[44,10,44,13,1,0,0,0],[45,10,45,17,1,0,0,0],[46,1,46,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":12,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test14assert_rejects","regions":[[30,1,30,52,12,0,0,0],[31,11,31,15,12,0,0,0],[31,16,31,24,12,0,0,0],[32,42,32,43,12,0,0,0],[33,13,33,23,12,0,0,0],[35,9,35,14,0,0,0,0],[35,18,35,24,0,0,0,0],[37,1,37,2,12,0,0,0]]},{"branches":[],"mcdc_records":[],"count":15,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test4spec","regions":[[21,1,21,26,15,0,0,0],[22,5,26,6,15,0,0,0],[23,16,23,25,15,0,0,0],[23,26,23,35,15,0,0,0],[24,17,24,42,15,0,0,0],[27,1,27,2,15,0,0,0]]},{"branches":[],"mcdc_records":[],"count":18,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test7section","regions":[[12,1,12,32,18,0,0,0],[13,5,17,6,18,0,0,0],[14,18,14,46,18,0,0,0],[15,21,15,25,18,0,0,0],[15,26,15,45,18,0,0,0],[15,46,15,55,18,0,0,0],[16,18,16,22,18,0,0,0],[18,1,18,2,18,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_21rejects_a_blank_title","regions":[[64,1,64,27,1,0,0,0],[65,9,65,14,1,0,0,0],[65,17,65,21,1,0,0,0],[66,5,66,12,1,0,0,0],[66,15,66,20,1,0,0,0],[66,21,66,30,1,0,0,0],[67,5,67,19,1,0,0,0],[67,20,67,22,1,0,0,0],[67,24,67,31,1,0,0,0],[68,1,68,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_24rejects_too_many_bullets","regions":[[136,1,136,30,1,0,0,0],[137,9,137,14,1,0,0,0],[137,17,137,21,1,0,0,0],[138,5,138,26,1,0,0,0],[138,29,138,33,1,0,0,0],[138,34,138,37,1,0,0,0],[138,38,138,47,1,0,0,0],[138,51,138,78,1,0,0,0],[139,5,139,19,1,0,0,0],[139,20,139,22,1,0,0,0],[139,24,139,45,1,0,0,0],[140,1,140,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_25rejects_too_many_sections","regions":[[92,1,92,31,1,0,0,0],[93,9,93,14,1,0,0,0],[93,17,93,21,1,0,0,0],[94,5,94,15,1,0,0,0],[94,18,94,22,1,0,0,0],[94,23,94,30,1,0,0,0],[94,34,94,50,1,0,0,0],[95,5,95,19,1,0,0,0],[95,20,95,22,1,0,0,0],[95,24,95,34,1,0,0,0],[96,1,96,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_26accepts_a_well_formed_spec","regions":[[59,1,59,32,1,0,0,0],[60,5,60,12,1,0,0,0],[60,13,60,30,1,0,0,0],[60,31,60,36,1,0,0,0],[61,1,61,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_26rejects_an_over_long_title","regions":[[71,1,71,32,1,0,0,0],[72,9,72,14,1,0,0,0],[72,17,72,21,1,0,0,0],[73,5,73,12,1,0,0,0],[73,15,73,18,1,0,0,0],[73,19,73,25,1,0,0,0],[73,26,73,44,1,0,0,0],[74,5,74,19,1,0,0,0],[74,20,74,22,1,0,0,0],[74,24,74,31,1,0,0,0],[75,1,75,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_27rejects_an_over_long_author","regions":[[78,1,78,33,1,0,0,0],[79,9,79,14,1,0,0,0],[79,17,79,21,1,0,0,0],[80,5,80,13,1,0,0,0],[80,16,80,52,1,0,0,0],[80,21,80,24,1,0,0,0],[81,5,81,19,1,0,0,0],[81,20,81,22,1,0,0,0],[81,24,81,32,1,0,0,0],[82,1,82,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_27rejects_too_many_paragraphs","regions":[[122,1,122,33,1,0,0,0],[123,9,123,14,1,0,0,0],[123,17,123,21,1,0,0,0],[124,5,124,29,1,0,0,0],[124,32,124,36,1,0,0,0],[124,37,124,40,1,0,0,0],[124,41,124,50,1,0,0,0],[124,54,124,84,1,0,0,0],[125,5,125,19,1,0,0,0],[125,20,125,22,1,0,0,0],[125,24,125,48,1,0,0,0],[126,1,126,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_29spec_defaults_optional_fields","regions":[[343,1,343,35,1,0,0,0],[344,9,344,10,1,0,0,0],[344,12,344,24,1,0,0,0],[344,27,344,47,1,0,0,0],[344,48,344,66,1,0,0,0],[344,68,344,74,1,0,0,0],[344,75,344,89,1,0,0,0],[345,5,345,15,1,0,0,0],[346,5,346,12,1,0,0,0],[346,13,346,23,1,0,0,0],[346,24,346,32,1,0,0,0],[347,1,347,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_29spec_round_trips_through_json","regions":[[327,1,327,35,1,0,0,0],[328,9,328,10,1,0,0,0],[328,13,328,17,1,0,0,0],[329,9,329,13,1,0,0,0],[329,16,329,37,1,0,0,0],[329,38,329,40,1,0,0,0],[329,42,329,48,1,0,0,0],[329,49,329,61,1,0,0,0],[330,9,330,13,1,0,0,0],[330,15,330,27,1,0,0,0],[330,30,330,50,1,0,0,0],[330,51,330,56,1,0,0,0],[330,58,330,64,1,0,0,0],[330,65,330,79,1,0,0,0],[331,5,331,15,1,0,0,0],[332,1,332,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_30rejects_a_wholly_blank_section","regions":[[99,1,99,36,1,0,0,0],[102,9,102,14,1,0,0,0],[102,17,102,21,1,0,0,0],[103,5,103,15,1,0,0,0],[103,18,103,22,1,0,0,0],[103,23,107,6,1,0,0,0],[104,18,104,40,1,0,0,0],[105,21,105,25,1,0,0,0],[105,26,105,30,1,0,0,0],[105,31,105,40,1,0,0,0],[108,5,108,19,1,0,0,0],[108,20,108,22,1,0,0,0],[108,24,108,37,1,0,0,0],[109,1,109,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_31rejects_a_spec_with_no_sections","regions":[[85,1,85,37,1,0,0,0],[86,9,86,14,1,0,0,0],[86,17,86,21,1,0,0,0],[87,5,87,15,1,0,0,0],[87,16,87,21,1,0,0,0],[88,5,88,19,1,0,0,0],[88,20,88,22,1,0,0,0],[88,24,88,34,1,0,0,0],[89,1,89,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_32spec_rejects_unknown_json_fields","regions":[[335,1,335,38,1,0,0,0],[338,9,338,13,1,0,0,0],[338,16,338,63,1,0,0,0],[339,5,339,12,1,0,0,0],[339,13,339,55,1,0,0,0],[339,56,339,62,1,0,0,0],[340,1,340,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_33total_chars_sums_every_text_field","regions":[[197,1,197,39,1,0,0,0],[198,9,198,10,1,0,0,0],[198,13,206,6,1,0,0,0],[199,16,199,22,1,0,0,0],[199,23,199,32,1,0,0,0],[200,17,200,39,1,0,0,0],[201,19,201,23,1,0,0,0],[202,22,202,45,1,0,0,0],[203,25,203,29,1,0,0,0],[203,30,203,34,1,0,0,0],[203,35,203,44,1,0,0,0],[204,22,204,26,1,0,0,0],[207,5,207,15,1,0,0,0],[207,16,207,17,1,0,0,0],[207,18,207,29,1,0,0,0],[208,1,208,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_34is_blank_reflects_content_presence","regions":[[175,1,175,40,1,0,0,0],[176,5,176,12,1,0,0,0],[176,13,176,34,1,0,0,0],[177,5,177,12,1,0,0,0],[178,9,182,10,1,0,0,0],[179,22,179,26,1,0,0,0],[183,10,183,18,1,0,0,0],[186,5,186,12,1,0,0,0],[187,9,192,20,1,0,0,0],[188,22,188,56,1,0,0,0],[194,1,194,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_38generate_validates_before_synthesising","regions":[[320,1,320,44,1,0,0,0],[321,9,321,14,1,0,0,0],[321,17,321,21,1,0,0,0],[322,5,322,12,1,0,0,0],[322,15,322,26,1,0,0,0],[323,5,323,12,1,0,0,0],[323,13,323,21,0,0,0,0],[323,22,323,30,1,0,0,0],[323,31,323,33,1,0,0,0],[324,1,324,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_43generate_drops_blank_paragraphs_and_bullets","regions":[[276,1,276,49,1,0,0,0],[279,9,279,10,1,0,0,0],[279,13,287,6,1,0,0,0],[280,16,280,25,1,0,0,0],[280,26,280,35,1,0,0,0],[281,17,281,40,1,0,0,0],[282,19,282,23,1,0,0,0],[283,22,283,46,1,0,0,0],[284,25,284,29,1,0,0,0],[284,30,284,36,1,0,0,0],[284,37,284,46,1,0,0,0],[284,50,284,55,1,0,0,0],[284,56,284,65,1,0,0,0],[284,69,284,80,1,0,0,0],[285,22,285,26,1,0,0,0],[285,27,285,33,1,0,0,0],[285,34,285,43,1,0,0,0],[288,9,288,13,1,0,0,0],[288,16,288,26,1,0,0,0],[289,9,289,58,1,0,0,0],[289,10,289,18,1,0,0,0],[289,19,289,21,1,0,0,0],[290,9,290,28,1,0,0,0],[292,5,292,12,1,0,0,0],[292,13,292,34,1,0,0,0],[293,5,293,12,1,0,0,0],[293,13,293,34,1,0,0,0],[294,5,294,12,1,0,0,0],[294,13,294,34,1,0,0,0],[301,5,301,15,1,0,0,0],[302,9,302,30,1,0,0,0],[302,31,302,36,1,0,0,0],[306,5,306,15,1,0,0,0],[307,9,307,30,1,0,0,0],[307,31,307,36,1,0,0,0],[311,9,311,16,2,0,0,0],[311,20,311,35,1,0,0,0],[312,9,312,16,2,0,0,0],[313,13,313,36,2,0,0,0],[313,14,313,18,2,0,0,0],[317,1,317,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_44generate_produces_a_readable_ooxml_container","regions":[[211,1,211,50,1,0,0,0],[212,9,212,14,1,0,0,0],[212,17,212,25,1,0,0,0],[212,26,212,33,1,0,0,0],[212,35,212,41,1,0,0,0],[212,42,212,69,1,0,0,0],[216,5,216,15,1,0,0,0],[216,16,216,28,1,0,0,0],[217,5,217,12,1,0,0,0],[218,9,218,26,1,0,0,0],[220,9,220,14,0,0,0,0],[220,15,220,18,0,0,0,0],[223,9,223,14,1,0,0,0],[223,17,223,28,1,0,0,0],[223,29,223,35,1,0,0,0],[224,9,224,17,3,0,0,0],[224,21,224,80,1,0,0,0],[225,9,225,16,3,0,0,0],[226,13,226,25,3,0,0,0],[226,26,226,29,3,0,0,0],[231,5,231,12,1,0,0,0],[232,9,232,21,1,0,0,0],[232,22,232,25,1,0,0,0],[235,1,235,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_44rejects_an_over_long_bullet_naming_its_index","regions":[[143,1,143,50,1,0,0,0],[144,9,144,14,1,0,0,0],[144,17,144,21,1,0,0,0],[145,5,145,26,1,0,0,0],[145,29,145,33,1,0,0,0],[145,34,145,38,1,0,0,0],[145,39,145,48,1,0,0,0],[145,52,145,55,1,0,0,0],[145,56,145,62,1,0,0,0],[145,63,145,86,1,0,0,0],[146,5,146,19,1,0,0,0],[146,20,146,22,1,0,0,0],[146,24,146,48,1,0,0,0],[147,1,147,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_45rejects_an_over_long_heading_naming_its_index","regions":[[112,1,112,51,1,0,0,0],[113,9,113,14,1,0,0,0],[113,17,113,21,1,0,0,0],[114,5,114,15,1,0,0,0],[114,16,114,20,1,0,0,0],[114,21,117,6,1,0,0,0],[115,23,115,26,1,0,0,0],[118,5,118,19,1,0,0,0],[118,20,118,22,1,0,0,0],[118,24,118,45,1,0,0,0],[119,1,119,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_47generate_carries_every_text_field_into_the_body","regions":[[238,1,238,53,1,0,0,0],[239,9,239,10,1,0,0,0],[239,13,254,6,1,0,0,0],[240,16,240,33,1,0,0,0],[240,34,240,43,1,0,0,0],[241,17,241,42,1,0,0,0],[242,19,242,23,1,0,0,0],[243,13,247,14,1,0,0,0],[244,26,244,54,1,0,0,0],[245,29,245,33,1,0,0,0],[245,34,245,69,1,0,0,0],[249,26,249,51,1,0,0,0],[250,29,250,33,1,0,0,0],[251,26,251,30,1,0,0,0],[251,31,251,40,1,0,0,0],[251,41,251,50,1,0,0,0],[255,9,255,13,1,0,0,0],[255,16,255,26,1,0,0,0],[256,9,256,58,1,0,0,0],[256,10,256,18,1,0,0,0],[256,19,256,21,1,0,0,0],[257,9,257,28,1,0,0,0],[259,9,259,15,7,0,0,0],[259,19,267,6,1,0,0,0],[261,9,261,16,1,0,0,0],[262,9,262,19,1,0,0,0],[263,9,263,44,1,0,0,0],[264,9,264,16,1,0,0,0],[268,9,268,16,7,0,0,0],[269,13,269,17,7,0,0,0],[269,13,269,34,7,0,0,0],[273,1,273,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_47rejects_an_over_long_paragraph_naming_its_index","regions":[[129,1,129,53,1,0,0,0],[130,9,130,14,1,0,0,0],[130,17,130,21,1,0,0,0],[131,5,131,29,1,0,0,0],[131,32,131,36,1,0,0,0],[131,37,131,41,1,0,0,0],[131,42,131,51,1,0,0,0],[131,55,131,58,1,0,0,0],[131,59,131,65,1,0,0,0],[131,66,131,89,1,0,0,0],[132,5,132,19,1,0,0,0],[132,20,132,22,1,0,0,0],[132,24,132,51,1,0,0,0],[133,1,133,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_50rejects_a_spec_over_the_aggregate_character_budget","regions":[[150,1,150,56,1,0,0,0],[156,9,156,24,1,0,0,0],[156,27,156,68,1,0,0,0],[157,5,157,12,1,0,0,0],[157,13,157,58,1,0,0,0],[158,9,158,18,1,0,0,0],[158,21,158,24,1,0,0,0],[158,25,158,31,1,0,0,0],[159,9,159,12,1,0,0,0],[159,15,163,6,1,0,0,0],[160,18,160,45,1,0,0,0],[161,21,161,25,1,0,0,0],[161,26,161,35,1,0,0,0],[164,9,164,10,1,0,0,0],[164,13,168,6,1,0,0,0],[165,16,165,22,1,0,0,0],[165,23,165,32,1,0,0,0],[166,17,166,21,1,0,0,0],[170,5,170,12,1,0,0,0],[170,13,170,45,1,0,0,0],[171,5,171,19,1,0,0,0],[171,20,171,22,1,0,0,0],[171,24,171,34,1,0,0,0],[172,1,172,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_29short_details_are_left_intact","regions":[[8,1,8,35,1,0,0,0],[9,9,9,12,1,0,0,0],[9,15,9,39,1,0,0,0],[9,40,9,46,1,0,0,0],[10,5,10,15,1,0,0,0],[12,9,14,10,1,0,0,0],[16,1,16,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_40long_details_are_truncated_with_a_suffix","regions":[[19,1,19,46,1,0,0,0],[20,9,20,12,1,0,0,0],[20,15,20,18,1,0,0,0],[20,19,20,25,1,0,0,0],[20,26,20,53,1,0,0,0],[21,35,21,41,1,0,0,0],[21,46,21,76,1,0,0,0],[22,9,22,15,0,0,0,0],[24,5,24,15,1,0,0,0],[24,16,24,30,1,0,0,0],[24,31,24,36,1,0,0,0],[25,5,25,12,1,0,0,0],[25,13,25,47,1,0,0,0],[26,1,26,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_42detail_at_exactly_the_cap_is_not_truncated","regions":[[39,1,39,48,1,0,0,0],[40,9,40,12,1,0,0,0],[40,15,40,18,1,0,0,0],[40,19,40,25,1,0,0,0],[41,5,41,15,1,0,0,0],[41,16,41,38,1,0,0,0],[41,39,41,43,1,0,0,0],[42,1,42,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_45invalid_input_carries_the_field_path_verbatim","regions":[[45,1,45,51,1,0,0,0],[46,9,46,12,1,0,0,0],[46,15,46,35,1,0,0,0],[47,5,47,15,1,0,0,0],[49,9,52,10,1,0,0,0],[50,20,50,44,1,0,0,0],[50,45,50,54,1,0,0,0],[54,1,54,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_46truncation_never_splits_a_multi_byte_character","regions":[[29,1,29,52,1,0,0,0],[32,9,32,12,1,0,0,0],[32,15,32,21,1,0,0,0],[32,22,32,28,1,0,0,0],[32,29,32,56,1,0,0,0],[33,9,33,15,1,0,0,0],[33,18,33,40,1,0,0,0],[33,41,33,45,1,0,0,0],[34,5,34,15,1,0,0,0],[34,16,34,30,1,0,0,0],[34,31,34,36,1,0,0,0],[35,5,35,12,1,0,0,0],[35,13,35,39,1,0,0,0],[36,1,36,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx00B8_","regions":[[32,45,32,59,0,0,0,0],[32,60,32,65,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx0s0_0B8_","regions":[[38,30,38,39,0,0,0,0],[38,40,38,46,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx0s_0B8_","regions":[[35,23,35,46,0,0,0,0],[35,47,35,56,0,0,0,0],[36,26,36,61,0,0,0,0],[36,62,36,71,0,0,0,0],[37,13,37,14,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB4_8TinyDocs13generate_docx0B6_","regions":[[31,77,31,78,0,0,0,0],[32,9,32,36,0,0,0,0],[33,14,33,19,0,0,0,0],[34,14,34,21,0,0,0,0],[37,15,37,16,0,0,0,0],[38,14,38,21,0,0,0,0],[39,5,39,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvNtCs4qzlrmTkdH8_15tinydocs_module7service5setup0B5_","regions":[[54,57,54,58,0,0,0,0],[55,5,55,15,0,0,0,0],[56,10,56,18,0,0,0,0],[56,19,56,30,0,0,0,0],[56,31,56,39,0,0,0,0],[56,41,56,42,0,0,0,0],[56,44,56,52,0,0,0,0],[57,10,57,15,0,0,0,0],[57,15,57,16,0,0,0,0],[58,5,58,15,0,0,0,0],[58,5,58,44,0,0,0,0],[58,44,58,45,0,0,0,0],[59,5,59,11,0,0,0,0],[60,1,60,2,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvXs_NtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB6_8TinyDocsNtNtCs1HgUDVOEcj9_7tinybus7service9Interface4call0B8_","regions":[[28,59,28,60,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB2_8TinyDocs13generate_docx","regions":[[31,5,31,76,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvNtCs4qzlrmTkdH8_15tinydocs_module7service5setup","regions":[[54,1,54,56,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvNtCs4qzlrmTkdH8_15tinydocs_module7service9map_error","regions":[[42,1,42,40,2,0,0,0],[43,9,43,13,2,0,0,0],[43,22,43,27,2,0,0,0],[44,39,44,58,1,0,0,0],[45,43,45,66,1,0,0,0],[46,14,46,33,0,0,0,0],[48,5,51,6,2,0,0,0],[49,15,49,19,2,0,0,0],[49,20,49,29,2,0,0,0],[52,1,52,2,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/test.rs"],"name":"_RNvNtNtCs4qzlrmTkdH8_15tinydocs_module7service4tests_38domain_errors_keep_distinct_wire_names","regions":[[22,1,22,44,1,0,0,0],[23,9,23,22,1,0,0,0],[23,25,23,45,1,0,0,0],[24,9,24,16,1,0,0,0],[24,19,24,28,1,0,0,0],[24,29,24,43,1,0,0,0],[25,5,25,15,1,0,0,0],[25,16,25,23,1,0,0,0],[25,24,25,33,1,0,0,0],[27,9,27,25,1,0,0,0],[27,28,27,52,1,0,0,0],[27,53,27,69,1,0,0,0],[28,9,28,15,1,0,0,0],[28,18,28,27,1,0,0,0],[28,28,28,45,1,0,0,0],[29,5,29,15,1,0,0,0],[29,16,29,22,1,0,0,0],[29,23,29,32,1,0,0,0],[30,1,30,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/test.rs"],"name":"_RNvNtNtCs4qzlrmTkdH8_15tinydocs_module7service4tests_59service_identity_is_valid_and_dispatch_matches_the_manifest","regions":[[10,1,10,65,1,0,0,0],[11,5,11,12,1,0,0,0],[11,13,11,44,1,0,0,0],[11,45,11,50,1,0,0,0],[12,5,12,12,1,0,0,0],[12,13,12,50,1,0,0,0],[12,51,12,56,1,0,0,0],[14,9,14,16,1,0,0,0],[14,19,14,27,1,0,0,0],[14,28,14,35,1,0,0,0],[15,5,15,15,1,0,0,0],[17,9,17,61,1,0,0,0],[19,1,19,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/examples/basic.rs"],"name":"_RNvCsf3pU3hkFCrx_5basic4main","regions":[[12,1,12,10,0,0,0,0],[13,9,13,13,0,0,0,0],[13,16,31,6,0,0,0,0],[14,16,14,34,0,0,0,0],[14,35,14,44,0,0,0,0],[15,17,15,43,0,0,0,0],[16,19,16,23,0,0,0,0],[17,13,21,14,0,0,0,0],[18,26,18,53,0,0,0,0],[19,29,19,33,0,0,0,0],[19,34,19,78,0,0,0,0],[23,26,23,58,0,0,0,0],[24,29,24,33,0,0,0,0],[25,26,25,30,0,0,0,0],[26,21,26,48,0,0,0,0],[26,49,26,58,0,0,0,0],[33,11,33,32,0,0,0,0],[34,12,34,17,0,0,0,0],[34,22,34,30,0,0,0,0],[34,62,34,67,0,0,0,0],[34,68,34,71,0,0,0,0],[35,13,35,18,0,0,0,0],[35,23,35,31,0,0,0,0],[40,9,40,16,0,0,0,0],[40,19,43,6,0,0,0,0],[44,11,44,35,0,0,0,0],[45,12,45,17,0,0,0,0],[45,22,45,30,0,0,0,0],[45,66,45,71,0,0,0,0],[45,72,45,75,0,0,0,0],[46,13,46,18,0,0,0,0],[46,23,46,31,0,0,0,0],[48,1,48,2,0,0,0,0]]}],"totals":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0},"functions":{"count":52,"covered":49,"percent":94.23076923076923},"instantiations":{"count":73,"covered":64,"percent":87.67123287671232},"lines":{"count":494,"covered":468,"percent":94.73684210526316},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0},"regions":{"count":746,"covered":717,"notcovered":29,"percent":96.11260053619303}}}],"type":"llvm.coverage.json.export","version":"3.1.0","cargo_llvm_cov":{"version":"0.8.7","manifest_path":"/home/enamakel/work/tinydocs/Cargo.toml"}} \ No newline at end of file From 81b208ee65046363422125bf3b59c607dfe35817 Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:33:58 +0300 Subject: [PATCH 17/18] docs: update coverage threshold and release bundle descriptions Update the per-file coverage requirement from 80% to 90% across all source files, add the coverage check script to the CI contract in multiple documents, and revise release artifact descriptions to reflect installable bundles with host, module, allowlist, and documentation instead of standalone native module assets. Auto-committed-on: dragonfly Co-authored-by: Medulla --- .github/PULL_REQUEST_TEMPLATE.md | 1 + AGENTS.md | 11 +++++++---- README.md | 10 +++++++--- ROADMAP.md | 3 ++- docs/plans/tinybus-module.md | 4 +++- docs/specs/tinybus-module.md | 6 ++++-- 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8fb51dd..9fbfc6f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -18,6 +18,7 @@ Commands actually run, with their outcome: - [ ] `cargo clippy --all-targets --all-features -- -D warnings` - [ ] `cargo build --all-targets --all-features` - [ ] `cargo test --all-features` +- [ ] `.github/scripts/check-file-coverage.sh 90 coverage.json` ## Tests diff --git a/AGENTS.md b/AGENTS.md index e659e85..957873b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -69,7 +69,7 @@ the crate-wide `Result` from fallible public APIs. ## Build And Test -Run every command from the repository root. These four are the contract; CI +Run every command from the repository root. These five are the contract; CI runs exactly them, so a green local run should mean a green CI run. ```sh @@ -77,6 +77,7 @@ cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo build --all-targets --all-features cargo test --all-features +.github/scripts/check-file-coverage.sh 90 coverage.json ``` Supporting commands: @@ -87,6 +88,8 @@ Supporting commands: - `cargo doc --no-deps --all-features` — build the rustdoc CI also builds with `RUSTDOCFLAGS="-D warnings"`. - `cargo test --doc` — run doctests alone when editing documentation examples. +- `cargo install cargo-llvm-cov` — install the coverage tool required by the + per-file coverage gate. Never skip, ignore, or delete a failing test to make a command pass. Fix the root cause, or stop and report the blocker. @@ -168,9 +171,9 @@ on every generated crate. - Tests must be deterministic and independent of network, wall-clock time, and execution order. Gate any live/network test behind a feature or an env var and name it `live_*` so it is easy to exclude. -- Maintain at least 80% coverage of meaningful library behavior. Add or update - tests with every behavior change, and note any deliberately untested edge case - in the pull request description. +- Maintain at least 90% line coverage in every source file under `src/`. Add or + update tests with every behavior change, and note any deliberately untested + edge case in the pull request description. Write the test first when fixing a bug: a failing test that reproduces the report, then the fix that turns it green. diff --git a/README.md b/README.md index 2992b18..f8bca37 100644 --- a/README.md +++ b/README.md @@ -86,9 +86,12 @@ it with a TinyBus host built with its `modules` feature. It claims GenerateDocx(DocumentSpec) -> Vec ``` -The release workflow attaches a native module for Linux, macOS, and Windows to -each GitHub release. TinyBus modules are target-specific and trusted: download -the artifact matching the host, and install it only from a trusted release. +The release workflow attaches installable Linux and macOS bundles containing +the matching TinyBus host, the TinyDocs module, a SHA-256 `modules.toml` +allowlist, and protocol/module documentation. It also attaches the published +crate and pinned TinyBus source. TinyBus modules are target-specific and +trusted: download the bundle matching the host, and install it only from a +trusted release. Run the real loader test locally after building the release artifact: @@ -132,6 +135,7 @@ cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo test --all-features cargo run --example basic +.github/scripts/check-file-coverage.sh 90 coverage.json ``` Run the gated build too — it is the only thing that catches a feature that diff --git a/ROADMAP.md b/ROADMAP.md index 6e5da84..7d77c01 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -13,7 +13,8 @@ out of scope. A roadmap that lists everything is a roadmap nobody trusts. - CI: format, clippy, build, test, rustdoc, MSRV, and supply-chain checks - a manual release workflow that versions, tags, and publishes to crates.io - a TinyBus-loadable native module exposing DOCX generation -- native Linux, macOS, and Windows module assets on GitHub releases +- installable Linux and macOS bundles with the TinyBus host, module allowlist, + source packages, and protocol documentation on GitHub releases - end-to-end coverage through TinyBus's real dynamic loader and broker ## Next diff --git a/docs/plans/tinybus-module.md b/docs/plans/tinybus-module.md index ba8c48e..b37b3c9 100644 --- a/docs/plans/tinybus-module.md +++ b/docs/plans/tinybus-module.md @@ -16,7 +16,8 @@ default library dependency graph. - [x] Add unit coverage for identity, dispatch, and error mapping. - [x] Add an ignored integration test that loads the built native artifact. - [x] Run that real-loader test in CI. -- [x] Build and upload Linux, macOS, and Windows assets during release. +- [x] Build and upload installable Linux and macOS TinyBus bundles, source + packages, module allowlists, and documentation during release. - [x] Document build, loading, trust, and payload constraints. ## Verification @@ -26,6 +27,7 @@ cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo build --all-targets --all-features cargo test --all-features +.github/scripts/check-file-coverage.sh 90 coverage.json cargo build --locked --release --package tinydocs-module TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs_module.so" \ cargo test --locked --package tinydocs-module --test module_e2e -- --ignored diff --git a/docs/specs/tinybus-module.md b/docs/specs/tinybus-module.md index 3d9f5aa..4df3908 100644 --- a/docs/specs/tinybus-module.md +++ b/docs/specs/tinybus-module.md @@ -16,7 +16,7 @@ production. - Preserve the existing pure Rust library API. - Build a target-specific dynamic library implementing TinyBus module ABI v1. - Expose typed DOCX generation through a stable bus identity. -- Publish native module artifacts with each GitHub release. +- Publish installable native bundles with each GitHub release. - Test loading and calling the compiled artifact through a real broker. ## Non-goals @@ -66,7 +66,9 @@ module itself retains no document state between calls. - A proxy call to `GenerateDocx` returns bytes beginning with the DOCX `PK` signature. - CI executes that loader test on Linux. -- A release uploads one native module asset from each supported runner OS. +- A release uploads Linux and macOS bundles containing the matching TinyBus + host, TinyDocs module, SHA-256 allowlist, and operational documentation. +- The release also uploads the crates.io package and pinned TinyBus source. ## Open questions From 6607b1089b55b44a0f2a50f68f9234db4855ed5f Mon Sep 17 00:00:00 2001 From: Steven Enamakel Date: Mon, 10 Aug 2026 18:34:39 +0300 Subject: [PATCH 18/18] chore: remove coverage.json The coverage data file was removed from the repository as it is a generated artifact that should not be tracked in version control. Auto-committed-on: dragonfly Co-authored-by: Medulla --- coverage.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 coverage.json diff --git a/coverage.json b/coverage.json deleted file mode 100644 index 92b912e..0000000 --- a/coverage.json +++ /dev/null @@ -1 +0,0 @@ -{"data":[{"files":[{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/docx/mod.rs","segments":[[71,5,22,true,true,false],[71,41,0,false,false,false],[72,12,22,true,true,false],[72,29,0,false,false,false],[72,30,22,true,true,false],[72,38,0,false,false,false],[73,20,3,true,true,false],[73,75,0,false,false,false],[74,9,19,true,true,false],[74,10,0,false,false,false],[75,12,19,true,true,false],[75,55,0,false,false,false],[76,20,2,true,true,false],[79,15,0,false,false,false],[80,9,17,true,true,false],[80,10,0,false,false,false],[86,13,17,true,true,false],[86,24,0,false,false,false],[86,30,1,true,true,false],[86,31,0,false,false,false],[87,13,1,true,true,false],[87,33,0,false,false,false],[89,17,1,true,true,false],[89,24,0,false,false,false],[91,9,1,true,true,false],[91,10,0,false,false,false],[92,13,17,true,true,false],[92,22,0,false,false,false],[92,25,17,true,true,false],[92,43,0,false,false,false],[92,44,17,true,true,false],[92,49,0,false,false,false],[93,21,13,true,true,false],[93,27,0,false,false,false],[93,31,17,true,true,false],[93,53,0,false,false,false],[94,16,13,true,true,false],[94,22,13,true,false,false],[94,55,0,false,false,false],[95,24,1,true,true,false],[98,19,0,false,false,false],[99,13,12,true,true,false],[99,14,0,false,false,false],[100,13,12,true,true,false],[100,21,12,true,true,false],[100,26,12,true,false,false],[100,27,12,true,true,false],[100,41,12,true,false,false],[100,42,12,true,true,false],[100,48,12,true,false,false],[100,65,0,false,false,false],[101,9,4,true,true,false],[101,10,0,false,false,false],[102,12,16,true,true,false],[102,25,0,false,false,false],[102,26,16,true,true,false],[102,34,0,false,false,false],[103,20,2,true,true,false],[106,15,0,false,false,false],[107,9,14,true,true,false],[107,10,0,false,false,false],[108,12,14,true,true,false],[108,46,0,false,false,false],[109,20,1,true,true,false],[112,15,0,false,false,false],[113,9,13,true,true,false],[113,10,0,false,false,false],[115,14,15,true,true,false],[115,15,0,false,false,false],[115,17,15,true,true,false],[115,24,0,false,false,false],[115,29,13,true,true,false],[115,49,0,false,false,false],[115,50,13,true,true,false],[115,59,0,false,false,false],[116,16,15,true,true,false],[116,23,0,false,false,false],[116,24,15,true,true,false],[116,32,0,false,false,false],[117,24,1,true,true,false],[120,19,0,false,false,false],[121,13,14,true,true,false],[121,14,0,false,false,false],[122,25,14,true,true,false],[122,32,0,false,false,false],[122,36,14,true,true,false],[122,62,0,false,false,false],[123,20,14,true,true,false],[123,27,14,true,false,false],[123,60,0,false,false,false],[124,28,1,true,true,false],[124,32,1,true,true,false],[124,52,1,true,false,false],[127,23,0,false,false,false],[128,17,13,true,true,false],[128,18,0,false,false,false],[129,17,13,true,true,false],[129,25,13,true,true,false],[129,30,13,true,false,false],[129,31,13,true,true,false],[129,45,13,true,false,false],[129,46,13,true,true,false],[129,53,13,true,false,false],[129,70,0,false,false,false],[130,20,13,true,true,false],[130,43,0,false,false,false],[131,28,0,true,true,false],[131,46,0,false,false,false],[132,17,13,true,true,false],[132,18,0,false,false,false],[133,13,0,true,true,false],[133,14,0,false,false,false],[134,16,13,true,true,false],[134,69,0,false,false,false],[135,24,1,true,true,false],[135,28,1,true,true,false],[135,48,1,true,false,false],[138,19,0,false,false,false],[139,13,12,true,true,false],[139,14,0,false,false,false],[140,18,113,true,true,false],[140,19,0,false,false,false],[140,21,113,true,true,false],[140,30,0,false,false,false],[140,35,12,true,true,false],[140,60,0,false,false,false],[140,61,12,true,true,false],[140,70,0,false,false,false],[141,20,113,true,true,false],[141,67,0,false,false,false],[142,28,1,true,true,false],[142,32,1,true,true,false],[142,52,1,true,false,false],[145,23,0,false,false,false],[146,17,112,true,true,false],[146,18,0,false,false,false],[147,17,112,true,true,false],[147,25,112,true,true,false],[147,30,112,true,false,false],[147,31,112,true,true,false],[147,45,112,true,false,false],[147,72,0,false,false,false],[148,20,112,true,true,false],[148,43,0,false,false,false],[149,28,1,true,true,false],[149,46,0,false,false,false],[150,17,111,true,true,false],[150,18,0,false,false,false],[152,16,10,true,true,false],[152,63,0,false,false,false],[153,24,1,true,true,false],[153,28,1,true,true,false],[153,48,1,true,false,false],[156,19,0,false,false,false],[157,13,9,true,true,false],[157,14,0,false,false,false],[158,18,11,true,true,false],[158,19,0,false,false,false],[158,21,11,true,true,false],[158,27,0,false,false,false],[158,32,9,true,true,false],[158,54,0,false,false,false],[158,55,9,true,true,false],[158,64,0,false,false,false],[159,20,11,true,true,false],[159,64,0,false,false,false],[160,28,1,true,true,false],[160,32,1,true,true,false],[160,52,1,true,false,false],[163,23,0,false,false,false],[164,17,10,true,true,false],[164,18,0,false,false,false],[165,17,10,true,true,false],[165,25,10,true,true,false],[165,30,10,true,false,false],[165,31,10,true,true,false],[165,45,10,true,false,false],[165,69,0,false,false,false],[166,20,10,true,true,false],[166,43,0,false,false,false],[167,28,0,true,true,false],[167,46,0,false,false,false],[168,17,10,true,true,false],[168,18,0,false,false,false],[171,9,6,true,true,false],[171,15,0,false,false,false],[172,5,22,true,true,false],[172,6,0,false,false,false],[209,1,6,true,true,false],[209,56,0,false,false,false],[210,5,6,true,true,false],[210,9,0,false,false,false],[210,10,6,true,true,false],[210,18,0,false,false,false],[210,20,2,true,true,false],[210,21,0,false,false,false],[215,9,4,true,true,false],[215,19,0,false,false,false],[215,22,4,true,true,false],[215,42,0,false,false,false],[215,43,4,true,true,false],[215,57,0,false,false,false],[216,5,4,true,true,false],[216,10,0,false,false,false],[216,11,4,true,true,false],[216,15,0,false,false,false],[217,10,4,true,true,false],[217,15,0,false,false,false],[218,10,4,true,true,false],[218,14,0,false,false,false],[218,15,4,true,true,false],[218,26,0,false,false,false],[219,10,4,true,true,false],[219,17,0,false,false,false],[219,24,0,true,true,false],[219,48,0,false,false,false],[219,49,0,true,true,false],[219,65,0,false,false,false],[219,67,0,true,true,false],[219,68,0,false,false,false],[220,5,4,true,true,false],[220,28,0,false,false,false],[221,1,6,true,true,false],[221,2,0,false,false,false],[227,1,4,true,true,false],[227,38,0,false,false,false],[231,9,4,true,true,false],[231,17,0,false,false,false],[231,20,4,true,true,false],[231,29,0,false,false,false],[232,10,4,true,true,false],[232,32,0,false,false,false],[233,13,4,true,true,false],[233,35,0,false,false,false],[233,57,4,true,true,false],[233,66,0,false,false,false],[233,67,4,true,true,false],[233,77,0,false,false,false],[235,17,4,true,true,false],[235,27,0,false,false,false],[236,17,4,true,true,false],[236,34,0,false,false,false],[237,17,4,true,true,false],[237,31,0,false,false,false],[238,17,4,true,true,false],[238,29,0,false,false,false],[241,10,4,true,true,false],[241,23,0,false,false,false],[241,24,4,true,true,false],[241,38,0,false,false,false],[244,5,4,true,true,false],[244,9,0,false,false,false],[244,12,4,true,true,false],[244,16,0,false,false,false],[244,17,4,true,true,false],[244,30,0,false,false,false],[245,9,4,true,true,false],[245,23,0,false,false,false],[245,26,4,true,true,false],[245,31,0,false,false,false],[245,32,4,true,true,false],[245,39,0,false,false,false],[245,41,4,true,true,false],[245,48,0,false,false,false],[246,13,4,true,true,false],[246,21,0,false,false,false],[247,18,4,true,true,false],[247,26,0,false,false,false],[247,27,4,true,true,false],[247,44,0,false,false,false],[248,18,4,true,true,false],[248,22,0,false,false,false],[249,18,4,true,true,false],[249,22,0,false,false,false],[254,17,2,true,true,false],[254,23,0,false,false,false],[254,27,4,true,true,false],[254,38,0,false,false,false],[254,39,4,true,true,false],[254,47,0,false,false,false],[254,50,4,true,true,false],[254,56,0,false,false,false],[254,62,3,true,true,false],[254,70,0,false,false,false],[254,71,3,true,true,false],[254,79,0,false,false,false],[254,83,2,true,true,false],[255,9,2,true,true,false],[255,13,2,true,false,false],[255,16,2,true,true,false],[255,20,2,true,false,false],[255,21,2,true,true,false],[255,34,2,true,false,false],[256,13,2,true,true,false],[256,27,2,true,false,false],[256,30,2,true,true,false],[256,37,2,true,false,false],[257,17,2,true,true,false],[257,25,2,true,false,false],[258,22,2,true,true,false],[258,30,2,true,false,false],[258,31,2,true,true,false],[258,37,2,true,false,false],[258,38,2,true,true,false],[258,42,2,true,false,false],[263,5,2,true,true,false],[263,6,0,false,false,false],[265,9,5,true,true,false],[265,16,0,false,false,false],[265,20,4,true,true,false],[265,34,0,false,false,false],[266,21,5,true,true,false],[266,28,0,false,false,false],[266,32,5,true,true,false],[266,47,0,false,false,false],[266,48,5,true,true,false],[266,56,0,false,false,false],[266,59,5,true,true,false],[266,65,0,false,false,false],[266,71,5,true,true,false],[266,79,0,false,false,false],[266,80,5,true,true,false],[266,88,0,false,false,false],[266,92,5,true,true,false],[267,13,5,true,true,false],[267,17,5,true,false,false],[267,20,5,true,true,false],[267,24,5,true,false,false],[267,25,5,true,true,false],[267,38,5,true,false,false],[268,17,5,true,true,false],[268,31,5,true,false,false],[268,34,5,true,true,false],[268,39,5,true,false,false],[268,40,5,true,true,false],[268,50,5,true,false,false],[268,52,5,true,true,false],[268,59,5,true,false,false],[269,21,5,true,true,false],[269,29,5,true,false,false],[270,26,5,true,true,false],[270,34,5,true,false,false],[270,35,5,true,true,false],[270,42,5,true,false,false],[270,43,5,true,true,false],[270,47,5,true,false,false],[275,9,0,true,true,false],[275,10,0,false,false,false],[276,13,6,true,true,false],[276,22,0,false,false,false],[276,26,5,true,true,false],[276,45,0,false,false,false],[277,17,6,true,true,false],[277,21,0,false,false,false],[277,24,6,true,true,false],[277,40,0,false,false,false],[278,16,6,true,true,false],[278,32,0,false,false,false],[278,33,4,true,true,false],[279,17,4,true,true,false],[279,21,4,true,false,false],[279,24,4,true,true,false],[279,28,4,true,false,false],[279,29,4,true,true,false],[279,42,4,true,false,false],[279,43,4,true,true,false],[279,57,4,true,false,false],[279,60,4,true,true,false],[279,67,4,true,false,false],[279,68,4,true,true,false],[279,76,4,true,false,false],[280,13,2,true,true,false],[280,14,0,false,false,false],[282,13,6,true,true,false],[282,19,0,false,false,false],[282,23,5,true,true,false],[282,39,0,false,false,false],[283,17,6,true,true,false],[283,21,0,false,false,false],[283,24,6,true,true,false],[283,37,0,false,false,false],[284,16,6,true,true,false],[284,32,0,false,false,false],[284,33,5,true,true,false],[285,17,5,true,true,false],[285,21,5,true,false,false],[285,24,5,true,true,false],[285,28,5,true,false,false],[285,29,5,true,true,false],[285,42,5,true,false,false],[286,21,5,true,true,false],[286,35,5,true,false,false],[287,26,5,true,true,false],[287,33,5,true,false,false],[287,34,5,true,true,false],[287,42,5,true,false,false],[287,45,5,true,true,false],[287,53,5,true,false,false],[287,54,5,true,true,false],[287,58,5,true,false,false],[288,26,5,true,true,false],[288,35,5,true,false,false],[290,13,1,true,true,false],[290,14,0,false,false,false],[294,5,4,true,true,false],[294,9,0,false,false,false],[295,1,4,true,true,false],[295,2,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":7,"covered":6,"percent":85.71428571428571},"instantiations":{"count":14,"covered":10,"percent":71.42857142857143},"lines":{"count":156,"covered":152,"percent":97.43589743589743},"regions":{"count":207,"covered":200,"notcovered":7,"percent":96.61835748792271}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/docx/test.rs","segments":[[12,1,18,true,true,false],[12,32,0,false,false,false],[13,5,18,true,true,false],[14,18,18,true,true,false],[14,46,18,true,false,false],[15,21,18,true,true,false],[15,25,18,true,false,false],[15,26,18,true,true,false],[15,45,18,true,false,false],[15,46,18,true,true,false],[15,55,18,true,false,false],[16,18,18,true,true,false],[16,22,18,true,false,false],[17,6,0,false,false,false],[18,1,18,true,true,false],[18,2,0,false,false,false],[21,1,15,true,true,false],[21,26,0,false,false,false],[22,5,15,true,true,false],[23,16,15,true,true,false],[23,25,15,true,false,false],[23,26,15,true,true,false],[23,35,15,true,false,false],[24,17,15,true,true,false],[24,42,15,true,false,false],[26,6,0,false,false,false],[27,1,15,true,true,false],[27,2,0,false,false,false],[30,1,12,true,true,false],[30,52,0,false,false,false],[31,11,12,true,true,false],[31,15,0,false,false,false],[31,16,12,true,true,false],[31,24,0,false,false,false],[32,42,12,true,true,false],[32,43,0,false,false,false],[33,13,12,true,true,false],[33,23,0,false,false,false],[35,9,0,true,true,false],[35,14,0,false,false,false],[35,18,0,true,true,false],[35,24,0,false,false,false],[37,1,12,true,true,false],[37,2,0,false,false,false],[40,1,1,true,true,false],[40,44,0,false,false,false],[41,9,1,true,true,false],[41,16,0,false,false,false],[42,9,1,true,true,false],[42,29,0,false,false,false],[42,30,1,true,true,false],[42,50,0,false,false,false],[42,51,1,true,true,false],[42,56,0,false,false,false],[42,57,1,true,true,false],[42,63,0,false,false,false],[42,68,1,true,true,false],[42,74,0,false,false,false],[42,75,1,true,true,false],[42,98,0,false,false,false],[43,6,1,true,true,false],[43,18,0,false,false,false],[44,10,1,true,true,false],[44,13,0,false,false,false],[44,18,18,true,true,false],[44,21,18,true,false,false],[44,22,18,true,true,false],[44,30,18,true,false,false],[44,49,0,false,false,false],[44,50,18,true,true,false],[44,59,0,false,false,false],[45,10,1,true,true,false],[45,17,0,false,false,false],[46,1,1,true,true,false],[46,2,0,false,false,false],[49,1,2,true,true,false],[49,50,0,false,false,false],[50,9,2,true,true,false],[50,16,0,false,false,false],[51,9,2,true,true,false],[51,29,0,false,false,false],[51,30,2,true,true,false],[51,50,0,false,false,false],[51,51,2,true,true,false],[51,56,0,false,false,false],[51,57,2,true,true,false],[51,63,0,false,false,false],[51,68,2,true,true,false],[51,74,0,false,false,false],[51,75,2,true,true,false],[51,98,0,false,false,false],[52,9,2,true,true,false],[52,18,0,false,false,false],[52,21,2,true,true,false],[52,24,0,false,false,false],[52,25,2,true,true,false],[52,32,0,false,false,false],[52,33,2,true,true,false],[52,37,0,false,false,false],[52,39,2,true,true,false],[52,45,0,false,false,false],[52,46,2,true,true,false],[52,61,0,false,false,false],[53,9,2,true,true,false],[53,17,0,false,false,false],[53,20,2,true,true,false],[53,31,0,false,false,false],[54,5,2,true,true,false],[54,34,0,false,false,false],[54,35,2,true,true,false],[54,45,0,false,false,false],[54,47,2,true,true,false],[54,56,0,false,false,false],[54,58,2,true,true,false],[54,64,0,false,false,false],[55,5,2,true,true,false],[55,9,0,false,false,false],[56,1,2,true,true,false],[56,2,0,false,false,false],[59,1,1,true,true,false],[59,32,0,false,false,false],[60,5,1,true,true,false],[60,12,0,false,false,false],[60,13,1,true,true,false],[60,30,0,false,false,false],[60,31,1,true,true,false],[60,36,0,false,false,false],[61,1,1,true,true,false],[61,2,0,false,false,false],[64,1,1,true,true,false],[64,27,0,false,false,false],[65,9,1,true,true,false],[65,14,0,false,false,false],[65,17,1,true,true,false],[65,21,0,false,false,false],[66,5,1,true,true,false],[66,12,0,false,false,false],[66,15,1,true,true,false],[66,20,0,false,false,false],[66,21,1,true,true,false],[66,30,0,false,false,false],[67,5,1,true,true,false],[67,19,0,false,false,false],[67,20,1,true,true,false],[67,22,0,false,false,false],[67,24,1,true,true,false],[67,31,0,false,false,false],[68,1,1,true,true,false],[68,2,0,false,false,false],[71,1,1,true,true,false],[71,32,0,false,false,false],[72,9,1,true,true,false],[72,14,0,false,false,false],[72,17,1,true,true,false],[72,21,0,false,false,false],[73,5,1,true,true,false],[73,12,0,false,false,false],[73,15,1,true,true,false],[73,18,0,false,false,false],[73,19,1,true,true,false],[73,25,0,false,false,false],[73,26,1,true,true,false],[73,44,0,false,false,false],[74,5,1,true,true,false],[74,19,0,false,false,false],[74,20,1,true,true,false],[74,22,0,false,false,false],[74,24,1,true,true,false],[74,31,0,false,false,false],[75,1,1,true,true,false],[75,2,0,false,false,false],[78,1,1,true,true,false],[78,33,0,false,false,false],[79,9,1,true,true,false],[79,14,0,false,false,false],[79,17,1,true,true,false],[79,21,0,false,false,false],[80,5,1,true,true,false],[80,13,0,false,false,false],[80,16,1,true,true,false],[80,21,1,true,true,false],[80,24,1,true,false,false],[80,52,0,false,false,false],[81,5,1,true,true,false],[81,19,0,false,false,false],[81,20,1,true,true,false],[81,22,0,false,false,false],[81,24,1,true,true,false],[81,32,0,false,false,false],[82,1,1,true,true,false],[82,2,0,false,false,false],[85,1,1,true,true,false],[85,37,0,false,false,false],[86,9,1,true,true,false],[86,14,0,false,false,false],[86,17,1,true,true,false],[86,21,0,false,false,false],[87,5,1,true,true,false],[87,15,0,false,false,false],[87,16,1,true,true,false],[87,21,0,false,false,false],[88,5,1,true,true,false],[88,19,0,false,false,false],[88,20,1,true,true,false],[88,22,0,false,false,false],[88,24,1,true,true,false],[88,34,0,false,false,false],[89,1,1,true,true,false],[89,2,0,false,false,false],[92,1,1,true,true,false],[92,31,0,false,false,false],[93,9,1,true,true,false],[93,14,0,false,false,false],[93,17,1,true,true,false],[93,21,0,false,false,false],[94,5,1,true,true,false],[94,15,0,false,false,false],[94,18,1,true,true,false],[94,22,0,false,false,false],[94,23,1,true,true,false],[94,30,0,false,false,false],[94,34,1,true,true,false],[94,50,0,false,false,false],[95,5,1,true,true,false],[95,19,0,false,false,false],[95,20,1,true,true,false],[95,22,0,false,false,false],[95,24,1,true,true,false],[95,34,0,false,false,false],[96,1,1,true,true,false],[96,2,0,false,false,false],[99,1,1,true,true,false],[99,36,0,false,false,false],[102,9,1,true,true,false],[102,14,0,false,false,false],[102,17,1,true,true,false],[102,21,0,false,false,false],[103,5,1,true,true,false],[103,15,0,false,false,false],[103,18,1,true,true,false],[103,22,0,false,false,false],[103,23,1,true,true,false],[104,18,1,true,true,false],[104,40,1,true,false,false],[105,21,1,true,true,false],[105,25,1,true,false,false],[105,26,1,true,true,false],[105,30,1,true,false,false],[105,31,1,true,true,false],[105,40,1,true,false,false],[107,6,0,false,false,false],[108,5,1,true,true,false],[108,19,0,false,false,false],[108,20,1,true,true,false],[108,22,0,false,false,false],[108,24,1,true,true,false],[108,37,0,false,false,false],[109,1,1,true,true,false],[109,2,0,false,false,false],[112,1,1,true,true,false],[112,51,0,false,false,false],[113,9,1,true,true,false],[113,14,0,false,false,false],[113,17,1,true,true,false],[113,21,0,false,false,false],[114,5,1,true,true,false],[114,15,0,false,false,false],[114,16,1,true,true,false],[114,20,0,false,false,false],[114,21,1,true,true,false],[115,23,1,true,true,false],[115,26,1,true,false,false],[117,6,0,false,false,false],[118,5,1,true,true,false],[118,19,0,false,false,false],[118,20,1,true,true,false],[118,22,0,false,false,false],[118,24,1,true,true,false],[118,45,0,false,false,false],[119,1,1,true,true,false],[119,2,0,false,false,false],[122,1,1,true,true,false],[122,33,0,false,false,false],[123,9,1,true,true,false],[123,14,0,false,false,false],[123,17,1,true,true,false],[123,21,0,false,false,false],[124,5,1,true,true,false],[124,29,0,false,false,false],[124,32,1,true,true,false],[124,36,0,false,false,false],[124,37,1,true,true,false],[124,40,0,false,false,false],[124,41,1,true,true,false],[124,50,0,false,false,false],[124,54,1,true,true,false],[124,84,0,false,false,false],[125,5,1,true,true,false],[125,19,0,false,false,false],[125,20,1,true,true,false],[125,22,0,false,false,false],[125,24,1,true,true,false],[125,48,0,false,false,false],[126,1,1,true,true,false],[126,2,0,false,false,false],[129,1,1,true,true,false],[129,53,0,false,false,false],[130,9,1,true,true,false],[130,14,0,false,false,false],[130,17,1,true,true,false],[130,21,0,false,false,false],[131,5,1,true,true,false],[131,29,0,false,false,false],[131,32,1,true,true,false],[131,36,0,false,false,false],[131,37,1,true,true,false],[131,41,0,false,false,false],[131,42,1,true,true,false],[131,51,0,false,false,false],[131,55,1,true,true,false],[131,58,0,false,false,false],[131,59,1,true,true,false],[131,65,0,false,false,false],[131,66,1,true,true,false],[131,89,0,false,false,false],[132,5,1,true,true,false],[132,19,0,false,false,false],[132,20,1,true,true,false],[132,22,0,false,false,false],[132,24,1,true,true,false],[132,51,0,false,false,false],[133,1,1,true,true,false],[133,2,0,false,false,false],[136,1,1,true,true,false],[136,30,0,false,false,false],[137,9,1,true,true,false],[137,14,0,false,false,false],[137,17,1,true,true,false],[137,21,0,false,false,false],[138,5,1,true,true,false],[138,26,0,false,false,false],[138,29,1,true,true,false],[138,33,0,false,false,false],[138,34,1,true,true,false],[138,37,0,false,false,false],[138,38,1,true,true,false],[138,47,0,false,false,false],[138,51,1,true,true,false],[138,78,0,false,false,false],[139,5,1,true,true,false],[139,19,0,false,false,false],[139,20,1,true,true,false],[139,22,0,false,false,false],[139,24,1,true,true,false],[139,45,0,false,false,false],[140,1,1,true,true,false],[140,2,0,false,false,false],[143,1,1,true,true,false],[143,50,0,false,false,false],[144,9,1,true,true,false],[144,14,0,false,false,false],[144,17,1,true,true,false],[144,21,0,false,false,false],[145,5,1,true,true,false],[145,26,0,false,false,false],[145,29,1,true,true,false],[145,33,0,false,false,false],[145,34,1,true,true,false],[145,38,0,false,false,false],[145,39,1,true,true,false],[145,48,0,false,false,false],[145,52,1,true,true,false],[145,55,0,false,false,false],[145,56,1,true,true,false],[145,62,0,false,false,false],[145,63,1,true,true,false],[145,86,0,false,false,false],[146,5,1,true,true,false],[146,19,0,false,false,false],[146,20,1,true,true,false],[146,22,0,false,false,false],[146,24,1,true,true,false],[146,48,0,false,false,false],[147,1,1,true,true,false],[147,2,0,false,false,false],[150,1,1,true,true,false],[150,56,0,false,false,false],[156,9,1,true,true,false],[156,24,0,false,false,false],[156,27,1,true,true,false],[156,68,0,false,false,false],[157,5,1,true,true,false],[157,12,0,false,false,false],[157,13,1,true,true,false],[157,58,0,false,false,false],[158,9,1,true,true,false],[158,18,0,false,false,false],[158,21,1,true,true,false],[158,24,0,false,false,false],[158,25,1,true,true,false],[158,31,0,false,false,false],[159,9,1,true,true,false],[159,12,0,false,false,false],[159,15,1,true,true,false],[160,18,1,true,true,false],[160,45,1,true,false,false],[161,21,1,true,true,false],[161,25,1,true,false,false],[161,26,1,true,true,false],[161,35,1,true,false,false],[163,6,0,false,false,false],[164,9,1,true,true,false],[164,10,0,false,false,false],[164,13,1,true,true,false],[165,16,1,true,true,false],[165,22,1,true,false,false],[165,23,1,true,true,false],[165,32,1,true,false,false],[166,17,1,true,true,false],[166,21,1,true,false,false],[168,6,0,false,false,false],[170,5,1,true,true,false],[170,12,0,false,false,false],[170,13,1,true,true,false],[170,45,0,false,false,false],[171,5,1,true,true,false],[171,19,0,false,false,false],[171,20,1,true,true,false],[171,22,0,false,false,false],[171,24,1,true,true,false],[171,34,0,false,false,false],[172,1,1,true,true,false],[172,2,0,false,false,false],[175,1,1,true,true,false],[175,40,0,false,false,false],[176,5,1,true,true,false],[176,12,0,false,false,false],[176,13,1,true,true,false],[176,34,0,false,false,false],[177,5,1,true,true,false],[177,12,0,false,false,false],[178,9,1,true,true,false],[179,22,1,true,true,false],[179,26,1,true,false,false],[182,10,0,false,false,false],[183,10,1,true,true,false],[183,18,0,false,false,false],[186,5,1,true,true,false],[186,12,0,false,false,false],[187,9,1,true,true,false],[188,22,1,true,true,false],[188,56,1,true,false,false],[192,20,0,false,false,false],[194,1,1,true,true,false],[194,2,0,false,false,false],[197,1,1,true,true,false],[197,39,0,false,false,false],[198,9,1,true,true,false],[198,10,0,false,false,false],[198,13,1,true,true,false],[199,16,1,true,true,false],[199,22,1,true,false,false],[199,23,1,true,true,false],[199,32,1,true,false,false],[200,17,1,true,true,false],[200,39,1,true,false,false],[201,19,1,true,true,false],[201,23,1,true,false,false],[202,22,1,true,true,false],[202,45,1,true,false,false],[203,25,1,true,true,false],[203,29,1,true,false,false],[203,30,1,true,true,false],[203,34,1,true,false,false],[203,35,1,true,true,false],[203,44,1,true,false,false],[204,22,1,true,true,false],[204,26,1,true,false,false],[206,6,0,false,false,false],[207,5,1,true,true,false],[207,15,0,false,false,false],[207,16,1,true,true,false],[207,17,0,false,false,false],[207,18,1,true,true,false],[207,29,0,false,false,false],[208,1,1,true,true,false],[208,2,0,false,false,false],[211,1,1,true,true,false],[211,50,0,false,false,false],[212,9,1,true,true,false],[212,14,0,false,false,false],[212,17,1,true,true,false],[212,25,0,false,false,false],[212,26,1,true,true,false],[212,33,0,false,false,false],[212,35,1,true,true,false],[212,41,0,false,false,false],[212,42,1,true,true,false],[212,69,0,false,false,false],[216,5,1,true,true,false],[216,15,0,false,false,false],[216,16,1,true,true,false],[216,28,0,false,false,false],[217,5,1,true,true,false],[217,12,0,false,false,false],[218,9,1,true,true,false],[218,26,0,false,false,false],[220,9,0,true,true,false],[220,14,0,false,false,false],[220,15,0,true,true,false],[220,18,0,false,false,false],[223,9,1,true,true,false],[223,14,0,false,false,false],[223,17,1,true,true,false],[223,28,0,false,false,false],[223,29,1,true,true,false],[223,35,0,false,false,false],[224,9,3,true,true,false],[224,17,0,false,false,false],[224,21,1,true,true,false],[224,80,0,false,false,false],[225,9,3,true,true,false],[225,16,0,false,false,false],[226,13,3,true,true,false],[226,25,0,false,false,false],[226,26,3,true,true,false],[226,29,0,false,false,false],[226,34,22,true,true,false],[226,35,0,false,false,false],[226,39,22,true,true,false],[226,47,0,false,false,false],[231,5,1,true,true,false],[231,12,0,false,false,false],[232,9,1,true,true,false],[232,21,0,false,false,false],[232,22,1,true,true,false],[232,25,0,false,false,false],[232,30,16,true,true,false],[232,31,0,false,false,false],[232,35,16,true,true,false],[232,55,0,false,false,false],[235,1,1,true,true,false],[235,2,0,false,false,false],[238,1,1,true,true,false],[238,53,0,false,false,false],[239,9,1,true,true,false],[239,10,0,false,false,false],[239,13,1,true,true,false],[240,16,1,true,true,false],[240,33,1,true,false,false],[240,34,1,true,true,false],[240,43,1,true,false,false],[241,17,1,true,true,false],[241,42,1,true,false,false],[242,19,1,true,true,false],[242,23,1,true,false,false],[243,13,1,true,true,false],[244,26,1,true,true,false],[244,54,1,true,false,false],[245,29,1,true,true,false],[245,33,1,true,false,false],[245,34,1,true,true,false],[245,69,1,true,false,false],[249,26,1,true,true,false],[249,51,1,true,false,false],[250,29,1,true,true,false],[250,33,1,true,false,false],[251,26,1,true,true,false],[251,30,1,true,false,false],[251,31,1,true,true,false],[251,40,1,true,false,false],[251,41,1,true,true,false],[251,50,1,true,false,false],[254,6,0,false,false,false],[255,9,1,true,true,false],[255,13,0,false,false,false],[255,16,1,true,true,false],[255,26,0,false,false,false],[256,9,1,true,true,false],[256,10,1,true,true,false],[256,18,1,true,false,false],[256,19,1,true,true,false],[256,21,1,true,false,false],[256,58,0,false,false,false],[257,9,1,true,true,false],[257,28,0,false,false,false],[259,9,7,true,true,false],[259,15,0,false,false,false],[259,19,1,true,true,false],[261,9,1,true,true,false],[261,16,1,true,false,false],[262,9,1,true,true,false],[262,19,1,true,false,false],[263,9,1,true,true,false],[263,44,1,true,false,false],[264,9,1,true,true,false],[264,16,1,true,false,false],[267,6,0,false,false,false],[268,9,7,true,true,false],[268,16,0,false,false,false],[269,13,7,true,true,false],[269,17,7,true,false,false],[269,34,0,false,false,false],[273,1,1,true,true,false],[273,2,0,false,false,false],[276,1,1,true,true,false],[276,49,0,false,false,false],[279,9,1,true,true,false],[279,10,0,false,false,false],[279,13,1,true,true,false],[280,16,1,true,true,false],[280,25,1,true,false,false],[280,26,1,true,true,false],[280,35,1,true,false,false],[281,17,1,true,true,false],[281,40,1,true,false,false],[282,19,1,true,true,false],[282,23,1,true,false,false],[283,22,1,true,true,false],[283,46,1,true,false,false],[284,25,1,true,true,false],[284,29,1,true,false,false],[284,30,1,true,true,false],[284,36,1,true,false,false],[284,37,1,true,true,false],[284,46,1,true,false,false],[284,50,1,true,true,false],[284,55,1,true,false,false],[284,56,1,true,true,false],[284,65,1,true,false,false],[284,69,1,true,true,false],[284,80,1,true,false,false],[285,22,1,true,true,false],[285,26,1,true,false,false],[285,27,1,true,true,false],[285,33,1,true,false,false],[285,34,1,true,true,false],[285,43,1,true,false,false],[287,6,0,false,false,false],[288,9,1,true,true,false],[288,13,0,false,false,false],[288,16,1,true,true,false],[288,26,0,false,false,false],[289,9,1,true,true,false],[289,10,1,true,true,false],[289,18,1,true,false,false],[289,19,1,true,true,false],[289,21,1,true,false,false],[289,58,0,false,false,false],[290,9,1,true,true,false],[290,28,0,false,false,false],[292,5,1,true,true,false],[292,12,0,false,false,false],[292,13,1,true,true,false],[292,34,0,false,false,false],[293,5,1,true,true,false],[293,12,0,false,false,false],[293,13,1,true,true,false],[293,34,0,false,false,false],[294,5,1,true,true,false],[294,12,0,false,false,false],[294,13,1,true,true,false],[294,34,0,false,false,false],[301,5,1,true,true,false],[301,15,0,false,false,false],[302,9,1,true,true,false],[302,30,0,false,false,false],[302,31,1,true,true,false],[302,36,0,false,false,false],[306,5,1,true,true,false],[306,15,0,false,false,false],[307,9,1,true,true,false],[307,30,0,false,false,false],[307,31,1,true,true,false],[307,36,0,false,false,false],[311,9,2,true,true,false],[311,16,0,false,false,false],[311,20,1,true,true,false],[311,35,0,false,false,false],[312,9,2,true,true,false],[312,16,0,false,false,false],[313,13,2,true,true,false],[313,14,2,true,true,false],[313,18,2,true,false,false],[313,36,0,false,false,false],[317,1,1,true,true,false],[317,2,0,false,false,false],[320,1,1,true,true,false],[320,44,0,false,false,false],[321,9,1,true,true,false],[321,14,0,false,false,false],[321,17,1,true,true,false],[321,21,0,false,false,false],[322,5,1,true,true,false],[322,12,0,false,false,false],[322,15,1,true,true,false],[322,26,0,false,false,false],[323,5,1,true,true,false],[323,12,0,false,false,false],[323,13,0,true,true,false],[323,21,0,false,false,false],[323,22,1,true,true,false],[323,30,0,false,false,false],[323,31,1,true,true,false],[323,33,0,false,false,false],[324,1,1,true,true,false],[324,2,0,false,false,false],[327,1,1,true,true,false],[327,35,0,false,false,false],[328,9,1,true,true,false],[328,10,0,false,false,false],[328,13,1,true,true,false],[328,17,0,false,false,false],[329,9,1,true,true,false],[329,13,0,false,false,false],[329,16,1,true,true,false],[329,37,0,false,false,false],[329,38,1,true,true,false],[329,40,0,false,false,false],[329,42,1,true,true,false],[329,48,0,false,false,false],[329,49,1,true,true,false],[329,61,0,false,false,false],[330,9,1,true,true,false],[330,13,0,false,false,false],[330,15,1,true,true,false],[330,27,0,false,false,false],[330,30,1,true,true,false],[330,50,0,false,false,false],[330,51,1,true,true,false],[330,56,0,false,false,false],[330,58,1,true,true,false],[330,64,0,false,false,false],[330,65,1,true,true,false],[330,79,0,false,false,false],[331,5,1,true,true,false],[331,15,0,false,false,false],[332,1,1,true,true,false],[332,2,0,false,false,false],[335,1,1,true,true,false],[335,38,0,false,false,false],[338,9,1,true,true,false],[338,13,0,false,false,false],[338,16,1,true,true,false],[338,63,0,false,false,false],[339,5,1,true,true,false],[339,12,0,false,false,false],[339,13,1,true,true,false],[339,55,0,false,false,false],[339,56,1,true,true,false],[339,62,0,false,false,false],[340,1,1,true,true,false],[340,2,0,false,false,false],[343,1,1,true,true,false],[343,35,0,false,false,false],[344,9,1,true,true,false],[344,10,0,false,false,false],[344,12,1,true,true,false],[344,24,0,false,false,false],[344,27,1,true,true,false],[344,47,0,false,false,false],[344,48,1,true,true,false],[344,66,0,false,false,false],[344,68,1,true,true,false],[344,74,0,false,false,false],[344,75,1,true,true,false],[344,89,0,false,false,false],[345,5,1,true,true,false],[345,15,0,false,false,false],[346,5,1,true,true,false],[346,12,0,false,false,false],[346,13,1,true,true,false],[346,23,0,false,false,false],[346,24,1,true,true,false],[346,32,0,false,false,false],[347,1,1,true,true,false],[347,2,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":30,"covered":30,"percent":100.0},"instantiations":{"count":30,"covered":30,"percent":100.0},"lines":{"count":238,"covered":236,"percent":99.15966386554622},"regions":{"count":390,"covered":385,"notcovered":5,"percent":98.71794871794872}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/docx/types.rs","segments":[[84,5,18,true,true,false],[84,35,0,false,false,false],[85,13,18,true,true,false],[85,24,0,false,false,false],[85,27,18,true,true,false],[86,21,0,false,false,false],[87,14,18,true,true,false],[87,22,0,false,false,false],[88,14,18,true,true,false],[88,25,0,false,false,false],[88,31,17,true,true,false],[88,39,0,false,false,false],[88,40,17,true,true,false],[88,48,0,false,false,false],[89,13,18,true,true,false],[89,26,0,false,false,false],[89,29,18,true,true,false],[89,51,0,false,false,false],[89,52,18,true,true,false],[89,55,0,false,false,false],[89,61,15,true,true,false],[89,69,0,false,false,false],[89,70,15,true,true,false],[89,78,0,false,false,false],[90,13,18,true,true,false],[90,23,0,false,false,false],[90,26,18,true,true,false],[90,45,0,false,false,false],[90,46,18,true,true,false],[90,49,0,false,false,false],[90,55,14,true,true,false],[90,63,0,false,false,false],[90,64,14,true,true,false],[90,72,0,false,false,false],[91,11,18,true,true,false],[91,22,0,false,false,false],[91,26,2,true,true,false],[91,39,0,false,false,false],[91,43,2,true,true,false],[91,53,0,false,false,false],[92,5,18,true,true,false],[92,6,0,false,false,false],[116,5,1,true,true,false],[116,39,0,false,false,false],[117,13,1,true,true,false],[117,22,0,false,false,false],[117,25,1,true,true,false],[117,43,0,false,false,false],[117,44,1,true,true,false],[117,49,0,false,false,false],[118,21,1,true,true,false],[118,27,0,false,false,false],[118,31,1,true,true,false],[118,53,0,false,false,false],[118,54,1,true,true,false],[119,21,1,true,true,false],[119,26,1,true,false,false],[119,27,1,true,true,false],[119,41,1,true,false,false],[119,42,1,true,true,false],[119,48,1,true,false,false],[120,9,0,true,true,false],[120,10,0,false,false,false],[121,13,1,true,true,false],[121,20,0,false,false,false],[121,24,1,true,true,false],[121,38,0,false,false,false],[122,25,1,true,true,false],[122,32,0,false,false,false],[122,36,1,true,true,false],[122,62,0,false,false,false],[122,63,1,true,true,false],[123,25,1,true,true,false],[123,30,1,true,false,false],[123,31,1,true,true,false],[123,45,1,true,false,false],[123,46,1,true,true,false],[123,53,1,true,false,false],[124,13,0,true,true,false],[124,14,0,false,false,false],[125,17,1,true,true,false],[125,26,0,false,false,false],[125,30,1,true,true,false],[125,49,0,false,false,false],[125,50,1,true,true,false],[126,25,1,true,true,false],[126,30,1,true,false,false],[126,31,1,true,true,false],[126,45,1,true,false,false],[127,14,0,false,false,false],[128,17,1,true,true,false],[128,23,0,false,false,false],[128,27,1,true,true,false],[128,43,0,false,false,false],[128,44,1,true,true,false],[129,25,1,true,true,false],[129,30,1,true,false,false],[129,31,1,true,true,false],[129,45,1,true,false,false],[130,14,0,false,false,false],[132,9,1,true,true,false],[132,14,0,false,false,false],[133,5,1,true,true,false],[133,6,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":5,"covered":5,"percent":100.0},"instantiations":{"count":10,"covered":9,"percent":90.0},"lines":{"count":29,"covered":29,"percent":100.0},"regions":{"count":53,"covered":51,"notcovered":2,"percent":96.22641509433963}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/error/mod.rs","segments":[[59,5,3,true,true,false],[59,48,0,false,false,false],[60,9,3,true,true,false],[62,10,0,false,false,false],[63,5,3,true,true,false],[63,6,0,false,false,false],[68,5,5,true,true,false],[68,48,0,false,false,false],[69,12,5,true,true,false],[69,15,5,true,false,false],[69,57,0,false,false,false],[70,20,3,true,true,false],[70,23,0,false,false,false],[70,24,3,true,true,false],[70,33,0,false,false,false],[71,9,2,true,true,false],[71,10,0,false,false,false],[72,13,2,true,true,false],[72,17,0,false,false,false],[72,43,2,true,true,false],[72,57,0,false,false,false],[72,58,2,true,true,false],[72,81,0,false,false,false],[72,82,2,true,true,false],[72,87,0,false,false,false],[72,90,2,true,true,false],[72,95,0,false,false,false],[73,13,2,true,true,false],[73,20,0,false,false,false],[73,22,2,true,true,false],[73,28,0,false,false,false],[73,31,2,true,true,false],[73,34,0,false,false,false],[73,35,2,true,true,false],[73,40,0,false,false,false],[73,43,2,true,true,false],[73,47,0,false,false,false],[73,48,2,true,true,false],[73,52,0,false,false,false],[73,54,2,true,true,false],[73,61,0,false,false,false],[74,9,2,true,true,false],[74,12,0,false,false,false],[74,13,2,true,true,false],[74,21,0,false,false,false],[74,22,2,true,true,false],[74,45,0,false,false,false],[75,9,2,true,true,false],[75,12,0,false,false,false],[76,5,5,true,true,false],[76,6,0,false,false,false],[80,5,18,true,true,false],[80,86,0,false,false,false],[81,9,18,true,true,false],[82,20,18,true,true,false],[82,25,18,true,false,false],[82,26,18,true,true,false],[82,30,18,true,false,false],[84,10,0,false,false,false],[85,5,18,true,true,false],[85,6,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":3,"covered":3,"percent":100.0},"instantiations":{"count":12,"covered":10,"percent":83.33333333333334},"lines":{"count":20,"covered":20,"percent":100.0},"regions":{"count":31,"covered":31,"notcovered":0,"percent":100.0}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/src/error/test.rs","segments":[[8,1,1,true,true,false],[8,35,0,false,false,false],[9,9,1,true,true,false],[9,12,0,false,false,false],[9,15,1,true,true,false],[9,39,0,false,false,false],[9,40,1,true,true,false],[9,46,0,false,false,false],[10,5,1,true,true,false],[10,15,0,false,false,false],[12,9,1,true,true,false],[14,10,0,false,false,false],[16,1,1,true,true,false],[16,2,0,false,false,false],[19,1,1,true,true,false],[19,46,0,false,false,false],[20,9,1,true,true,false],[20,12,0,false,false,false],[20,15,1,true,true,false],[20,18,0,false,false,false],[20,19,1,true,true,false],[20,25,0,false,false,false],[20,26,1,true,true,false],[20,53,0,false,false,false],[21,35,1,true,true,false],[21,41,0,false,false,false],[21,46,1,true,true,false],[21,76,0,false,false,false],[22,9,0,true,true,false],[22,15,0,false,false,false],[24,5,1,true,true,false],[24,15,0,false,false,false],[24,16,1,true,true,false],[24,30,0,false,false,false],[24,31,1,true,true,false],[24,36,0,false,false,false],[25,5,1,true,true,false],[25,12,0,false,false,false],[25,13,1,true,true,false],[25,47,0,false,false,false],[26,1,1,true,true,false],[26,2,0,false,false,false],[29,1,1,true,true,false],[29,52,0,false,false,false],[32,9,1,true,true,false],[32,12,0,false,false,false],[32,15,1,true,true,false],[32,21,0,false,false,false],[32,22,1,true,true,false],[32,28,0,false,false,false],[32,29,1,true,true,false],[32,56,0,false,false,false],[33,9,1,true,true,false],[33,15,0,false,false,false],[33,18,1,true,true,false],[33,40,0,false,false,false],[33,41,1,true,true,false],[33,45,0,false,false,false],[34,5,1,true,true,false],[34,15,0,false,false,false],[34,16,1,true,true,false],[34,30,0,false,false,false],[34,31,1,true,true,false],[34,36,0,false,false,false],[35,5,1,true,true,false],[35,12,0,false,false,false],[35,13,1,true,true,false],[35,39,0,false,false,false],[36,1,1,true,true,false],[36,2,0,false,false,false],[39,1,1,true,true,false],[39,48,0,false,false,false],[40,9,1,true,true,false],[40,12,0,false,false,false],[40,15,1,true,true,false],[40,18,0,false,false,false],[40,19,1,true,true,false],[40,25,0,false,false,false],[41,5,1,true,true,false],[41,15,0,false,false,false],[41,16,1,true,true,false],[41,38,0,false,false,false],[41,39,1,true,true,false],[41,43,0,false,false,false],[42,1,1,true,true,false],[42,2,0,false,false,false],[45,1,1,true,true,false],[45,51,0,false,false,false],[46,9,1,true,true,false],[46,12,0,false,false,false],[46,15,1,true,true,false],[46,35,0,false,false,false],[47,5,1,true,true,false],[47,15,0,false,false,false],[49,9,1,true,true,false],[50,20,1,true,true,false],[50,44,1,true,false,false],[50,45,1,true,true,false],[50,54,1,true,false,false],[52,10,0,false,false,false],[54,1,1,true,true,false],[54,2,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":5,"covered":5,"percent":100.0},"instantiations":{"count":5,"covered":5,"percent":100.0},"lines":{"count":32,"covered":31,"percent":96.875},"regions":{"count":51,"covered":50,"notcovered":1,"percent":98.0392156862745}}},{"branches":[],"mcdc_records":[],"expansions":[],"filename":"/home/enamakel/work/tinydocs/vendor/tinybus/crates/tinybus-module/src/lib.rs","segments":[[534,9,0,true,true,false],[534,90,0,false,false,false],[535,13,0,true,true,false],[535,35,0,false,false,false],[535,36,0,true,true,false],[536,23,0,true,true,false],[536,27,0,true,false,false],[537,26,0,true,true,false],[537,30,0,true,false,false],[538,27,0,true,true,false],[538,44,0,true,false,false],[539,26,0,true,true,false],[539,42,0,true,false,false],[540,26,0,true,true,false],[540,42,0,true,false,false],[545,14,0,false,false,false],[546,9,0,true,true,false],[546,10,0,false,false,false],[620,9,0,true,true,false],[623,17,0,false,false,false],[624,22,0,true,true,false],[624,42,0,false,false,false],[624,43,0,true,true,false],[624,47,0,false,false,false],[624,49,0,true,true,false],[624,52,0,false,false,false],[625,9,0,true,true,false],[625,10,0,false,false,false]],"summary":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0.0},"functions":{"count":2,"covered":0,"percent":0.0},"instantiations":{"count":2,"covered":0,"percent":0.0},"lines":{"count":19,"covered":0,"percent":0.0},"regions":{"count":14,"covered":0,"notcovered":14,"percent":0.0}}}],"functions":[{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx00B8_","regions":[[32,45,32,59,0,0,0,0],[32,60,32,65,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx0s0_0B8_","regions":[[38,30,38,39,0,0,0,0],[38,40,38,46,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx0s_0B8_","regions":[[35,23,35,46,0,0,0,0],[35,47,35,56,0,0,0,0],[36,26,36,61,0,0,0,0],[36,62,36,71,0,0,0,0],[37,13,37,14,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB4_8TinyDocs13generate_docx0B6_","regions":[[31,77,31,78,0,0,0,0],[32,9,32,36,0,0,0,0],[33,14,33,19,0,0,0,0],[34,14,34,21,0,0,0,0],[37,15,37,16,0,0,0,0],[38,14,38,21,0,0,0,0],[39,5,39,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvNtCs9mDM506iYPe_15tinydocs_module7service5setup0B5_","regions":[[54,57,54,58,0,0,0,0],[55,5,55,15,0,0,0,0],[56,10,56,18,0,0,0,0],[56,19,56,30,0,0,0,0],[56,31,56,39,0,0,0,0],[56,41,56,42,0,0,0,0],[56,44,56,52,0,0,0,0],[57,10,57,15,0,0,0,0],[57,15,57,16,0,0,0,0],[58,5,58,15,0,0,0,0],[58,5,58,44,0,0,0,0],[58,44,58,45,0,0,0,0],[59,5,59,11,0,0,0,0],[60,1,60,2,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvXs_NtCs9mDM506iYPe_15tinydocs_module7serviceNtB6_8TinyDocsNtNtCs1HgUDVOEcj9_7tinybus7service9Interface4call0B8_","regions":[[28,59,28,60,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvMNtCs9mDM506iYPe_15tinydocs_module7serviceNtB2_8TinyDocs13generate_docx","regions":[[31,5,31,76,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvNtCs9mDM506iYPe_15tinydocs_module7service5setup","regions":[[54,1,54,56,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvNtCs9mDM506iYPe_15tinydocs_module7service9map_error","regions":[[42,1,42,40,0,0,0,0],[43,9,43,13,0,0,0,0],[43,22,43,27,0,0,0,0],[44,39,44,58,0,0,0,0],[45,43,45,66,0,0,0,0],[46,14,46,33,0,0,0,0],[48,5,51,6,0,0,0,0],[49,15,49,19,0,0,0,0],[49,20,49,29,0,0,0,0],[52,1,52,2,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/vendor/tinybus/crates/tinybus-module/src/lib.rs"],"name":"tinybus_module_init_v1","regions":[[620,9,623,17,0,0,0,0],[624,22,624,42,0,0,0,0],[624,43,624,47,0,0,0,0],[624,49,624,52,0,0,0,0],[625,9,625,10,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/vendor/tinybus/crates/tinybus-module/src/lib.rs"],"name":"tinybus_module_manifest_v1","regions":[[534,9,534,90,0,0,0,0],[535,13,535,35,0,0,0,0],[535,36,545,14,0,0,0,0],[536,23,536,27,0,0,0,0],[537,26,537,30,0,0,0,0],[538,27,538,44,0,0,0,0],[539,26,539,42,0,0,0,0],[540,26,540,42,0,0,0,0],[546,9,546,10,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvMNtCs39F7AuVwQYg_8tinydocs4docxNtNtB4_5types12DocumentSpec8validate0B6_","regions":[[86,30,86,31,0,0,0,0],[87,13,87,33,0,0,0,0],[89,17,89,24,0,0,0,0],[91,9,91,10,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCs39F7AuVwQYg_8tinydocs4docx5build0B5_","regions":[[254,62,254,70,0,0,0,0],[254,71,254,79,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCs39F7AuVwQYg_8tinydocs4docx5builds_0B5_","regions":[[266,71,266,79,1,0,0,0],[266,80,266,88,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCs39F7AuVwQYg_8tinydocs4docx8generate0B5_","regions":[[219,24,219,48,0,0,0,0],[219,49,219,65,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvNtCs39F7AuVwQYg_8tinydocs4docx5build","regions":[[227,1,227,38,1,0,0,0],[231,9,231,17,1,0,0,0],[231,20,231,29,1,0,0,0],[232,10,232,32,1,0,0,0],[233,13,233,35,1,0,0,0],[233,57,233,66,1,0,0,0],[233,67,233,77,1,0,0,0],[235,17,235,27,1,0,0,0],[236,17,236,34,1,0,0,0],[237,17,237,31,1,0,0,0],[238,17,238,29,1,0,0,0],[241,10,241,23,1,0,0,0],[241,24,241,38,1,0,0,0],[244,5,244,9,1,0,0,0],[244,12,244,16,1,0,0,0],[244,17,244,30,1,0,0,0],[245,9,245,23,1,0,0,0],[245,26,245,31,1,0,0,0],[245,32,245,39,1,0,0,0],[245,41,245,48,1,0,0,0],[246,13,246,21,1,0,0,0],[247,18,247,26,1,0,0,0],[247,27,247,44,1,0,0,0],[248,18,248,22,1,0,0,0],[249,18,249,22,1,0,0,0],[254,17,254,23,0,0,0,0],[254,27,254,38,1,0,0,0],[254,39,254,47,1,0,0,0],[254,50,254,56,1,0,0,0],[254,83,263,6,0,0,0,0],[255,9,255,13,0,0,0,0],[255,16,255,20,0,0,0,0],[255,21,255,34,0,0,0,0],[256,13,256,27,0,0,0,0],[256,30,256,37,0,0,0,0],[257,17,257,25,0,0,0,0],[258,22,258,30,0,0,0,0],[258,31,258,37,0,0,0,0],[258,38,258,42,0,0,0,0],[263,5,263,6,1,0,0,0],[265,9,265,16,1,0,0,0],[265,20,265,34,1,0,0,0],[266,21,266,28,1,0,0,0],[266,32,266,47,1,0,0,0],[266,48,266,56,1,0,0,0],[266,59,266,65,1,0,0,0],[266,92,275,10,1,0,0,0],[267,13,267,17,1,0,0,0],[267,20,267,24,1,0,0,0],[267,25,267,38,1,0,0,0],[268,17,268,31,1,0,0,0],[268,34,268,39,1,0,0,0],[268,40,268,50,1,0,0,0],[268,52,268,59,1,0,0,0],[269,21,269,29,1,0,0,0],[270,26,270,34,1,0,0,0],[270,35,270,42,1,0,0,0],[270,43,270,47,1,0,0,0],[275,9,275,10,0,0,0,0],[276,13,276,22,1,0,0,0],[276,26,276,45,1,0,0,0],[277,17,277,21,1,0,0,0],[277,24,277,40,1,0,0,0],[278,16,278,32,1,0,0,0],[278,33,280,14,1,0,0,0],[279,17,279,21,1,0,0,0],[279,24,279,28,1,0,0,0],[279,29,279,42,1,0,0,0],[279,43,279,57,1,0,0,0],[279,60,279,67,1,0,0,0],[279,68,279,76,1,0,0,0],[280,13,280,14,0,0,0,0],[282,13,282,19,1,0,0,0],[282,23,282,39,1,0,0,0],[283,17,283,21,1,0,0,0],[283,24,283,37,1,0,0,0],[284,16,284,32,1,0,0,0],[284,33,290,14,1,0,0,0],[285,17,285,21,1,0,0,0],[285,24,285,28,1,0,0,0],[285,29,285,42,1,0,0,0],[286,21,286,35,1,0,0,0],[287,26,287,33,1,0,0,0],[287,34,287,42,1,0,0,0],[287,45,287,53,1,0,0,0],[287,54,287,58,1,0,0,0],[288,26,288,35,1,0,0,0],[290,13,290,14,0,0,0,0],[294,5,294,9,1,0,0,0],[295,1,295,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvNtCs39F7AuVwQYg_8tinydocs4docx8generate","regions":[[209,1,209,56,2,0,0,0],[210,5,210,9,2,0,0,0],[210,10,210,18,2,0,0,0],[210,20,210,21,1,0,0,0],[215,9,215,19,1,0,0,0],[215,22,215,42,1,0,0,0],[215,43,215,57,1,0,0,0],[216,5,216,10,1,0,0,0],[216,11,216,15,1,0,0,0],[217,10,217,15,1,0,0,0],[218,10,218,14,1,0,0,0],[218,15,218,26,1,0,0,0],[219,10,219,17,1,0,0,0],[219,67,219,68,0,0,0,0],[220,5,220,28,1,0,0,0],[221,1,221,2,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCs39F7AuVwQYg_8tinydocs5errorNtB3_5Error13invalid_inputNtNtCs8y6E41fb8tc_5alloc6string6StringBY_EB5_","regions":[[80,5,80,86,0,0,0,0],[81,9,84,10,0,0,0,0],[82,20,82,25,0,0,0,0],[82,26,82,30,0,0,0,0],[85,5,85,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCs39F7AuVwQYg_8tinydocs5errorNtB3_5Error13invalid_inputNtNtCs8y6E41fb8tc_5alloc6string6StringReEB5_","regions":[[80,5,80,86,0,0,0,0],[81,9,84,10,0,0,0,0],[82,20,82,25,0,0,0,0],[82,26,82,30,0,0,0,0],[85,5,85,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":3,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCs39F7AuVwQYg_8tinydocs5errorNtB3_5Error13invalid_inputReBY_EB5_","regions":[[80,5,80,86,3,0,0,0],[81,9,84,10,3,0,0,0],[82,20,82,25,3,0,0,0],[82,26,82,30,3,0,0,0],[85,5,85,6,3,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCs39F7AuVwQYg_8tinydocs5errorNtB3_5Error13invalid_inputReNtNtCs8y6E41fb8tc_5alloc6string6StringEB5_","regions":[[80,5,80,86,1,0,0,0],[81,9,84,10,1,0,0,0],[82,20,82,25,1,0,0,0],[82,26,82,30,1,0,0,0],[85,5,85,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RNvMNtCs39F7AuVwQYg_8tinydocs5errorNtB2_5Error15truncate_detail","regions":[[68,5,68,48,1,0,0,0],[69,12,69,15,1,0,0,0],[69,12,69,57,1,0,0,0],[70,20,70,23,1,0,0,0],[70,24,70,33,1,0,0,0],[71,9,71,10,0,0,0,0],[72,13,72,17,0,0,0,0],[72,43,72,57,0,0,0,0],[72,58,72,81,0,0,0,0],[72,82,72,87,0,0,0,0],[72,90,72,95,0,0,0,0],[73,13,73,20,0,0,0,0],[73,22,73,28,0,0,0,0],[73,31,73,34,0,0,0,0],[73,35,73,40,0,0,0,0],[73,43,73,47,0,0,0,0],[73,48,73,52,0,0,0,0],[73,54,73,61,0,0,0,0],[74,9,74,12,0,0,0,0],[74,13,74,21,0,0,0,0],[74,22,74,45,0,0,0,0],[75,9,75,12,0,0,0,0],[76,5,76,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RNvMNtCs39F7AuVwQYg_8tinydocs5errorNtB2_5Error17generation_failed","regions":[[59,5,59,48,1,0,0,0],[60,9,62,10,1,0,0,0],[63,5,63,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB4_15DocumentSection8is_blank0B8_","regions":[[88,31,88,39,2,0,0,0],[88,40,88,48,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB4_15DocumentSection8is_blanks0_0B8_","regions":[[90,55,90,63,2,0,0,0],[90,64,90,72,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB4_15DocumentSection8is_blanks_0B8_","regions":[[89,61,89,69,2,0,0,0],[89,70,89,78,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":5,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvMNtCs39F7AuVwQYg_8tinydocs4docxNtNtB2_5types12DocumentSpec8validate","regions":[[71,5,71,41,5,0,0,0],[72,12,72,29,5,0,0,0],[72,30,72,38,5,0,0,0],[73,20,73,75,1,0,0,0],[74,9,74,10,4,0,0,0],[75,12,75,55,4,0,0,0],[76,20,79,15,1,0,0,0],[80,9,80,10,3,0,0,0],[86,13,86,24,3,0,0,0],[92,13,92,22,3,0,0,0],[92,25,92,43,3,0,0,0],[92,44,92,49,3,0,0,0],[93,21,93,27,0,0,0,0],[93,31,93,53,3,0,0,0],[94,16,94,22,0,0,0,0],[94,16,94,55,0,0,0,0],[95,24,98,19,0,0,0,0],[99,13,99,14,0,0,0,0],[100,13,100,65,0,0,0,0],[100,21,100,26,0,0,0,0],[100,27,100,41,0,0,0,0],[100,42,100,48,0,0,0,0],[101,9,101,10,3,0,0,0],[102,12,102,25,3,0,0,0],[102,26,102,34,3,0,0,0],[103,20,106,15,1,0,0,0],[107,9,107,10,2,0,0,0],[108,12,108,46,2,0,0,0],[109,20,112,15,0,0,0,0],[113,9,113,10,2,0,0,0],[115,14,115,15,2,0,0,0],[115,17,115,24,2,0,0,0],[115,29,115,49,2,0,0,0],[115,50,115,59,2,0,0,0],[116,16,116,23,2,0,0,0],[116,24,116,32,2,0,0,0],[117,24,120,19,0,0,0,0],[121,13,121,14,2,0,0,0],[122,25,122,32,2,0,0,0],[122,36,122,62,2,0,0,0],[123,20,123,27,2,0,0,0],[123,20,123,60,2,0,0,0],[124,28,127,23,0,0,0,0],[124,32,124,52,0,0,0,0],[128,17,128,18,2,0,0,0],[129,17,129,70,2,0,0,0],[129,25,129,30,2,0,0,0],[129,31,129,45,2,0,0,0],[129,46,129,53,2,0,0,0],[130,20,130,43,2,0,0,0],[131,28,131,46,0,0,0,0],[132,17,132,18,2,0,0,0],[133,13,133,14,0,0,0,0],[134,16,134,69,2,0,0,0],[135,24,138,19,0,0,0,0],[135,28,135,48,0,0,0,0],[139,13,139,14,2,0,0,0],[140,18,140,19,2,0,0,0],[140,21,140,30,2,0,0,0],[140,35,140,60,2,0,0,0],[140,61,140,70,2,0,0,0],[141,20,141,67,2,0,0,0],[142,28,145,23,0,0,0,0],[142,32,142,52,0,0,0,0],[146,17,146,18,2,0,0,0],[147,17,147,72,2,0,0,0],[147,25,147,30,2,0,0,0],[147,31,147,45,2,0,0,0],[148,20,148,43,2,0,0,0],[149,28,149,46,0,0,0,0],[150,17,150,18,2,0,0,0],[152,16,152,63,2,0,0,0],[153,24,156,19,0,0,0,0],[153,28,153,48,0,0,0,0],[157,13,157,14,2,0,0,0],[158,18,158,19,2,0,0,0],[158,21,158,27,2,0,0,0],[158,32,158,54,2,0,0,0],[158,55,158,64,2,0,0,0],[159,20,159,64,2,0,0,0],[160,28,163,23,0,0,0,0],[160,32,160,52,0,0,0,0],[164,17,164,18,2,0,0,0],[165,17,165,69,2,0,0,0],[165,25,165,30,2,0,0,0],[165,31,165,45,2,0,0,0],[166,20,166,43,2,0,0,0],[167,28,167,46,0,0,0,0],[168,17,168,18,2,0,0,0],[171,9,171,15,2,0,0,0],[172,5,172,6,5,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNvMNtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB2_15DocumentSection8is_blank","regions":[[84,5,84,35,2,0,0,0],[85,13,85,24,2,0,0,0],[85,27,86,21,2,0,0,0],[87,14,87,22,2,0,0,0],[88,14,88,25,2,0,0,0],[89,13,89,26,2,0,0,0],[89,29,89,51,2,0,0,0],[89,52,89,55,2,0,0,0],[90,13,90,23,2,0,0,0],[90,26,90,45,2,0,0,0],[90,46,90,49,2,0,0,0],[91,11,91,22,2,0,0,0],[91,26,91,39,0,0,0,0],[91,43,91,53,0,0,0,0],[92,5,92,6,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNvMs_NtNtCs39F7AuVwQYg_8tinydocs4docx5typesNtB4_12DocumentSpec11total_chars","regions":[[116,5,116,39,0,0,0,0],[117,13,117,22,0,0,0,0],[117,25,117,43,0,0,0,0],[117,44,117,49,0,0,0,0],[118,21,118,27,0,0,0,0],[118,31,118,53,0,0,0,0],[118,54,120,10,0,0,0,0],[119,21,119,26,0,0,0,0],[119,27,119,41,0,0,0,0],[119,42,119,48,0,0,0,0],[120,9,120,10,0,0,0,0],[121,13,121,20,0,0,0,0],[121,24,121,38,0,0,0,0],[122,25,122,32,0,0,0,0],[122,36,122,62,0,0,0,0],[122,63,124,14,0,0,0,0],[123,25,123,30,0,0,0,0],[123,31,123,45,0,0,0,0],[123,46,123,53,0,0,0,0],[124,13,124,14,0,0,0,0],[125,17,125,26,0,0,0,0],[125,30,125,49,0,0,0,0],[125,50,127,14,0,0,0,0],[126,25,126,30,0,0,0,0],[126,31,126,45,0,0,0,0],[128,17,128,23,0,0,0,0],[128,27,128,43,0,0,0,0],[128,44,130,14,0,0,0,0],[129,25,129,30,0,0,0,0],[129,31,129,45,0,0,0,0],[132,9,132,14,0,0,0,0],[133,5,133,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/tests/module_e2e.rs"],"name":"_RNCNCNCNvCs2BVRTvt6Wvf_10module_e2es_52built_cdylib_loads_and_generates_a_docx_over_the_bus000B7_","regions":[[36,29,36,42,0,0,0,0],[36,46,36,54,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/tests/module_e2e.rs"],"name":"_RNCNCNvCs2BVRTvt6Wvf_10module_e2es_52built_cdylib_loads_and_generates_a_docx_over_the_bus00B5_","regions":[[29,56,29,57,0,0,0,0],[31,16,31,22,0,0,0,0],[31,16,33,23,0,0,0,0],[34,18,34,24,0,0,0,0],[35,18,35,22,0,0,0,0],[36,18,36,21,0,0,0,0],[38,17,38,22,0,0,0,0],[39,13,39,14,0,0,0,0],[40,13,40,43,0,0,0,0],[42,5,42,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/tests/module_e2e.rs"],"name":"_RNCNvCs2BVRTvt6Wvf_10module_e2es_52built_cdylib_loads_and_generates_a_docx_over_the_bus0B3_","regions":[[16,65,16,66,0,0,0,0],[17,9,17,17,0,0,0,0],[18,9,18,25,0,0,0,0],[18,50,18,56,0,0,0,0],[18,57,18,91,0,0,0,0],[19,9,19,12,0,0,0,0],[19,15,19,29,0,0,0,0],[20,9,20,15,0,0,0,0],[20,18,20,29,0,0,0,0],[21,9,21,20,0,0,0,0],[21,23,21,29,0,0,0,0],[21,30,21,35,0,0,0,0],[21,36,21,39,0,0,0,0],[21,40,21,45,0,0,0,0],[22,9,22,16,0,0,0,0],[22,19,22,34,0,0,0,0],[22,35,22,41,0,0,0,0],[23,9,23,15,0,0,0,0],[23,18,23,25,0,0,0,0],[23,26,23,35,0,0,0,0],[23,36,23,44,0,0,0,0],[23,46,23,52,0,0,0,0],[23,53,23,73,0,0,0,0],[24,5,24,15,0,0,0,0],[26,9,26,15,0,0,0,0],[26,18,26,37,0,0,0,0],[26,38,26,41,0,0,0,0],[26,38,26,57,0,0,0,0],[26,58,26,64,0,0,0,0],[27,10,27,15,0,0,0,0],[28,10,28,16,0,0,0,0],[29,5,29,25,0,0,0,0],[29,26,29,45,0,0,0,0],[43,6,43,11,0,0,0,0],[44,6,44,12,0,0,0,0],[44,13,44,41,0,0,0,0],[46,9,46,14,0,0,0,0],[46,17,46,23,0,0,0,0],[46,24,46,29,0,0,0,0],[46,63,46,69,0,0,0,0],[47,9,47,14,0,0,0,0],[47,16,47,23,0,0,0,0],[47,26,47,31,0,0,0,0],[47,26,60,15,0,0,0,0],[48,10,48,14,0,0,0,0],[49,13,49,27,0,0,0,0],[51,24,51,37,0,0,0,0],[51,38,51,47,0,0,0,0],[52,25,52,53,0,0,0,0],[53,27,53,31,0,0,0,0],[54,30,54,63,0,0,0,0],[55,33,55,37,0,0,0,0],[55,38,55,78,0,0,0,0],[55,79,55,88,0,0,0,0],[56,30,56,34,0,0,0,0],[61,10,61,16,0,0,0,0],[61,17,61,42,0,0,0,0],[63,5,63,15,0,0,0,0],[63,16,63,27,0,0,0,0],[64,5,64,12,0,0,0,0],[64,13,64,21,0,0,0,0],[64,22,64,45,0,0,0,0],[65,5,65,16,0,0,0,0],[65,17,65,22,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/tests/module_e2e.rs"],"name":"_RNvCs2BVRTvt6Wvf_10module_e2es_52built_cdylib_loads_and_generates_a_docx_over_the_bus","regions":[[16,7,16,64,0,0,0,0],[65,5,65,25,0,0,0,0],[66,1,66,2,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":5,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_api4spec","regions":[[18,1,18,26,5,0,0,0],[19,5,27,6,5,0,0,0],[20,16,20,30,5,0,0,0],[20,31,20,40,5,0,0,0],[21,17,21,21,5,0,0,0],[22,19,22,23,5,0,0,0],[23,22,23,49,5,0,0,0],[24,25,24,29,5,0,0,0],[24,30,24,42,5,0,0,0],[24,43,24,52,5,0,0,0],[25,22,25,26,5,0,0,0],[28,1,28,2,5,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_apis_29consumers_can_generate_a_docx","regions":[[31,1,31,35,1,0,0,0],[32,9,32,14,1,0,0,0],[32,17,32,31,1,0,0,0],[32,32,32,39,1,0,0,0],[32,41,32,47,1,0,0,0],[32,48,32,75,1,0,0,0],[33,5,33,15,1,0,0,0],[33,16,33,28,1,0,0,0],[34,1,34,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_apis_31limits_are_visible_to_consumers","regions":[[61,1,61,37,1,0,0,0],[64,9,64,20,1,0,0,0],[64,23,64,27,1,0,0,0],[65,5,65,18,1,0,0,0],[65,21,65,24,1,0,0,0],[65,25,65,31,1,0,0,0],[65,32,65,56,1,0,0,0],[66,5,66,12,1,0,0,0],[66,13,66,31,1,0,0,0],[66,32,66,38,1,0,0,0],[67,1,67,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_apis_39invalid_input_names_the_offending_field","regions":[[51,1,51,45,1,0,0,0],[52,9,52,20,1,0,0,0],[52,23,52,27,1,0,0,0],[53,5,53,18,1,0,0,0],[53,21,53,32,1,0,0,0],[54,11,54,25,1,0,0,0],[54,26,54,34,1,0,0,0],[55,35,55,40,1,0,0,0],[55,51,55,61,1,0,0,0],[56,9,56,14,0,0,0,0],[56,18,56,24,0,0,0,0],[58,1,58,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/tests/public_api.rs"],"name":"_RNvCs3dkJ21qCVqo_10public_apis_48consumers_can_validate_a_spec_without_generating","regions":[[37,1,37,54,1,0,0,0],[40,5,40,12,1,0,0,0],[40,13,40,30,1,0,0,0],[40,31,40,36,1,0,0,0],[42,9,42,20,1,0,0,0],[42,23,42,27,1,0,0,0],[43,5,43,21,1,0,0,0],[43,22,43,27,1,0,0,0],[44,5,44,12,1,0,0,0],[44,13,44,21,0,0,0,0],[45,9,45,16,1,0,0,0],[45,17,45,25,1,0,0,0],[48,1,48,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvMNtCsj868BPJcX0E_8tinydocs4docxNtNtB4_5types12DocumentSpec8validate0B6_","regions":[[86,30,86,31,1,0,0,0],[87,13,87,33,1,0,0,0],[89,17,89,24,1,0,0,0],[91,9,91,10,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":3,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCsj868BPJcX0E_8tinydocs4docx5build0B5_","regions":[[254,62,254,70,3,0,0,0],[254,71,254,79,3,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCsj868BPJcX0E_8tinydocs4docx5builds_0B5_","regions":[[266,71,266,79,4,0,0,0],[266,80,266,88,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNCNvNtCsj868BPJcX0E_8tinydocs4docx8generate0B5_","regions":[[219,24,219,48,0,0,0,0],[219,49,219,65,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":3,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvNtCsj868BPJcX0E_8tinydocs4docx5build","regions":[[227,1,227,38,3,0,0,0],[231,9,231,17,3,0,0,0],[231,20,231,29,3,0,0,0],[232,10,232,32,3,0,0,0],[233,13,233,35,3,0,0,0],[233,57,233,66,3,0,0,0],[233,67,233,77,3,0,0,0],[235,17,235,27,3,0,0,0],[236,17,236,34,3,0,0,0],[237,17,237,31,3,0,0,0],[238,17,238,29,3,0,0,0],[241,10,241,23,3,0,0,0],[241,24,241,38,3,0,0,0],[244,5,244,9,3,0,0,0],[244,12,244,16,3,0,0,0],[244,17,244,30,3,0,0,0],[245,9,245,23,3,0,0,0],[245,26,245,31,3,0,0,0],[245,32,245,39,3,0,0,0],[245,41,245,48,3,0,0,0],[246,13,246,21,3,0,0,0],[247,18,247,26,3,0,0,0],[247,27,247,44,3,0,0,0],[248,18,248,22,3,0,0,0],[249,18,249,22,3,0,0,0],[254,17,254,23,2,0,0,0],[254,27,254,38,3,0,0,0],[254,39,254,47,3,0,0,0],[254,50,254,56,3,0,0,0],[254,83,263,6,2,0,0,0],[255,9,255,13,2,0,0,0],[255,16,255,20,2,0,0,0],[255,21,255,34,2,0,0,0],[256,13,256,27,2,0,0,0],[256,30,256,37,2,0,0,0],[257,17,257,25,2,0,0,0],[258,22,258,30,2,0,0,0],[258,31,258,37,2,0,0,0],[258,38,258,42,2,0,0,0],[263,5,263,6,1,0,0,0],[265,9,265,16,4,0,0,0],[265,20,265,34,3,0,0,0],[266,21,266,28,4,0,0,0],[266,32,266,47,4,0,0,0],[266,48,266,56,4,0,0,0],[266,59,266,65,4,0,0,0],[266,92,275,10,4,0,0,0],[267,13,267,17,4,0,0,0],[267,20,267,24,4,0,0,0],[267,25,267,38,4,0,0,0],[268,17,268,31,4,0,0,0],[268,34,268,39,4,0,0,0],[268,40,268,50,4,0,0,0],[268,52,268,59,4,0,0,0],[269,21,269,29,4,0,0,0],[270,26,270,34,4,0,0,0],[270,35,270,42,4,0,0,0],[270,43,270,47,4,0,0,0],[275,9,275,10,0,0,0,0],[276,13,276,22,5,0,0,0],[276,26,276,45,4,0,0,0],[277,17,277,21,5,0,0,0],[277,24,277,40,5,0,0,0],[278,16,278,32,5,0,0,0],[278,33,280,14,3,0,0,0],[279,17,279,21,3,0,0,0],[279,24,279,28,3,0,0,0],[279,29,279,42,3,0,0,0],[279,43,279,57,3,0,0,0],[279,60,279,67,3,0,0,0],[279,68,279,76,3,0,0,0],[280,13,280,14,2,0,0,0],[282,13,282,19,5,0,0,0],[282,23,282,39,4,0,0,0],[283,17,283,21,5,0,0,0],[283,24,283,37,5,0,0,0],[284,16,284,32,5,0,0,0],[284,33,290,14,4,0,0,0],[285,17,285,21,4,0,0,0],[285,24,285,28,4,0,0,0],[285,29,285,42,4,0,0,0],[286,21,286,35,4,0,0,0],[287,26,287,33,4,0,0,0],[287,34,287,42,4,0,0,0],[287,45,287,53,4,0,0,0],[287,54,287,58,4,0,0,0],[288,26,288,35,4,0,0,0],[290,13,290,14,1,0,0,0],[294,5,294,9,3,0,0,0],[295,1,295,2,3,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvNtCsj868BPJcX0E_8tinydocs4docx8generate","regions":[[209,1,209,56,4,0,0,0],[210,5,210,9,4,0,0,0],[210,10,210,18,4,0,0,0],[210,20,210,21,1,0,0,0],[215,9,215,19,3,0,0,0],[215,22,215,42,3,0,0,0],[215,43,215,57,3,0,0,0],[216,5,216,10,3,0,0,0],[216,11,216,15,3,0,0,0],[217,10,217,15,3,0,0,0],[218,10,218,14,3,0,0,0],[218,15,218,26,3,0,0,0],[219,10,219,17,3,0,0,0],[219,67,219,68,0,0,0,0],[220,5,220,28,3,0,0,0],[221,1,221,2,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":15,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB4_15DocumentSection8is_blank0B8_","regions":[[88,31,88,39,15,0,0,0],[88,40,88,48,15,0,0,0]]},{"branches":[],"mcdc_records":[],"count":12,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB4_15DocumentSection8is_blanks0_0B8_","regions":[[90,55,90,63,12,0,0,0],[90,64,90,72,12,0,0,0]]},{"branches":[],"mcdc_records":[],"count":13,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNCNvMNtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB4_15DocumentSection8is_blanks_0B8_","regions":[[89,61,89,69,13,0,0,0],[89,70,89,78,13,0,0,0]]},{"branches":[],"mcdc_records":[],"count":17,"filenames":["/home/enamakel/work/tinydocs/src/docx/mod.rs"],"name":"_RNvMNtCsj868BPJcX0E_8tinydocs4docxNtNtB2_5types12DocumentSpec8validate","regions":[[71,5,71,41,17,0,0,0],[72,12,72,29,17,0,0,0],[72,30,72,38,17,0,0,0],[73,20,73,75,2,0,0,0],[74,9,74,10,15,0,0,0],[75,12,75,55,15,0,0,0],[76,20,79,15,1,0,0,0],[80,9,80,10,14,0,0,0],[86,13,86,24,14,0,0,0],[92,13,92,22,14,0,0,0],[92,25,92,43,14,0,0,0],[92,44,92,49,14,0,0,0],[93,21,93,27,13,0,0,0],[93,31,93,53,14,0,0,0],[94,16,94,22,13,0,0,0],[94,16,94,55,13,0,0,0],[95,24,98,19,1,0,0,0],[99,13,99,14,12,0,0,0],[100,13,100,65,12,0,0,0],[100,21,100,26,12,0,0,0],[100,27,100,41,12,0,0,0],[100,42,100,48,12,0,0,0],[101,9,101,10,1,0,0,0],[102,12,102,25,13,0,0,0],[102,26,102,34,13,0,0,0],[103,20,106,15,1,0,0,0],[107,9,107,10,12,0,0,0],[108,12,108,46,12,0,0,0],[109,20,112,15,1,0,0,0],[113,9,113,10,11,0,0,0],[115,14,115,15,13,0,0,0],[115,17,115,24,13,0,0,0],[115,29,115,49,11,0,0,0],[115,50,115,59,11,0,0,0],[116,16,116,23,13,0,0,0],[116,24,116,32,13,0,0,0],[117,24,120,19,1,0,0,0],[121,13,121,14,12,0,0,0],[122,25,122,32,12,0,0,0],[122,36,122,62,12,0,0,0],[123,20,123,27,12,0,0,0],[123,20,123,60,12,0,0,0],[124,28,127,23,1,0,0,0],[124,32,124,52,1,0,0,0],[128,17,128,18,11,0,0,0],[129,17,129,70,11,0,0,0],[129,25,129,30,11,0,0,0],[129,31,129,45,11,0,0,0],[129,46,129,53,11,0,0,0],[130,20,130,43,11,0,0,0],[131,28,131,46,0,0,0,0],[132,17,132,18,11,0,0,0],[133,13,133,14,0,0,0,0],[134,16,134,69,11,0,0,0],[135,24,138,19,1,0,0,0],[135,28,135,48,1,0,0,0],[139,13,139,14,10,0,0,0],[140,18,140,19,111,0,0,0],[140,21,140,30,111,0,0,0],[140,35,140,60,10,0,0,0],[140,61,140,70,10,0,0,0],[141,20,141,67,111,0,0,0],[142,28,145,23,1,0,0,0],[142,32,142,52,1,0,0,0],[146,17,146,18,110,0,0,0],[147,17,147,72,110,0,0,0],[147,25,147,30,110,0,0,0],[147,31,147,45,110,0,0,0],[148,20,148,43,110,0,0,0],[149,28,149,46,1,0,0,0],[150,17,150,18,109,0,0,0],[152,16,152,63,8,0,0,0],[153,24,156,19,1,0,0,0],[153,28,153,48,1,0,0,0],[157,13,157,14,7,0,0,0],[158,18,158,19,9,0,0,0],[158,21,158,27,9,0,0,0],[158,32,158,54,7,0,0,0],[158,55,158,64,7,0,0,0],[159,20,159,64,9,0,0,0],[160,28,163,23,1,0,0,0],[160,32,160,52,1,0,0,0],[164,17,164,18,8,0,0,0],[165,17,165,69,8,0,0,0],[165,25,165,30,8,0,0,0],[165,31,165,45,8,0,0,0],[166,20,166,43,8,0,0,0],[167,28,167,46,0,0,0,0],[168,17,168,18,8,0,0,0],[171,9,171,15,4,0,0,0],[172,5,172,6,17,0,0,0]]},{"branches":[],"mcdc_records":[],"count":16,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNvMNtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB2_15DocumentSection8is_blank","regions":[[84,5,84,35,16,0,0,0],[85,13,85,24,16,0,0,0],[85,27,86,21,16,0,0,0],[87,14,87,22,16,0,0,0],[88,14,88,25,16,0,0,0],[89,13,89,26,16,0,0,0],[89,29,89,51,16,0,0,0],[89,52,89,55,16,0,0,0],[90,13,90,23,16,0,0,0],[90,26,90,45,16,0,0,0],[90,46,90,49,16,0,0,0],[91,11,91,22,16,0,0,0],[91,26,91,39,2,0,0,0],[91,43,91,53,2,0,0,0],[92,5,92,6,16,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/types.rs"],"name":"_RNvMs_NtNtCsj868BPJcX0E_8tinydocs4docx5typesNtB4_12DocumentSpec11total_chars","regions":[[116,5,116,39,1,0,0,0],[117,13,117,22,1,0,0,0],[117,25,117,43,1,0,0,0],[117,44,117,49,1,0,0,0],[118,21,118,27,1,0,0,0],[118,31,118,53,1,0,0,0],[118,54,120,10,1,0,0,0],[119,21,119,26,1,0,0,0],[119,27,119,41,1,0,0,0],[119,42,119,48,1,0,0,0],[120,9,120,10,0,0,0,0],[121,13,121,20,1,0,0,0],[121,24,121,38,1,0,0,0],[122,25,122,32,1,0,0,0],[122,36,122,62,1,0,0,0],[122,63,124,14,1,0,0,0],[123,25,123,30,1,0,0,0],[123,31,123,45,1,0,0,0],[123,46,123,53,1,0,0,0],[124,13,124,14,0,0,0,0],[125,17,125,26,1,0,0,0],[125,30,125,49,1,0,0,0],[125,50,127,14,1,0,0,0],[126,25,126,30,1,0,0,0],[126,31,126,45,1,0,0,0],[128,17,128,23,1,0,0,0],[128,27,128,43,1,0,0,0],[128,44,130,14,1,0,0,0],[129,25,129,30,1,0,0,0],[129,31,129,45,1,0,0,0],[132,9,132,14,1,0,0,0],[133,5,133,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":5,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCsj868BPJcX0E_8tinydocs5errorNtB3_5Error13invalid_inputNtNtCs8y6E41fb8tc_5alloc6string6StringBY_EB5_","regions":[[80,5,80,86,5,0,0,0],[81,9,84,10,5,0,0,0],[82,20,82,25,5,0,0,0],[82,26,82,30,5,0,0,0],[85,5,85,6,5,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCsj868BPJcX0E_8tinydocs5errorNtB3_5Error13invalid_inputNtNtCs8y6E41fb8tc_5alloc6string6StringReEB5_","regions":[[80,5,80,86,1,0,0,0],[81,9,84,10,1,0,0,0],[82,20,82,25,1,0,0,0],[82,26,82,30,1,0,0,0],[85,5,85,6,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCsj868BPJcX0E_8tinydocs5errorNtB3_5Error13invalid_inputReBY_EB5_","regions":[[80,5,80,86,4,0,0,0],[81,9,84,10,4,0,0,0],[82,20,82,25,4,0,0,0],[82,26,82,30,4,0,0,0],[85,5,85,6,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RINvMNtCsj868BPJcX0E_8tinydocs5errorNtB3_5Error13invalid_inputReNtNtCs8y6E41fb8tc_5alloc6string6StringEB5_","regions":[[80,5,80,86,4,0,0,0],[81,9,84,10,4,0,0,0],[82,20,82,25,4,0,0,0],[82,26,82,30,4,0,0,0],[85,5,85,6,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":4,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RNvMNtCsj868BPJcX0E_8tinydocs5errorNtB2_5Error15truncate_detail","regions":[[68,5,68,48,4,0,0,0],[69,12,69,15,4,0,0,0],[69,12,69,57,4,0,0,0],[70,20,70,23,2,0,0,0],[70,24,70,33,2,0,0,0],[71,9,71,10,2,0,0,0],[72,13,72,17,2,0,0,0],[72,43,72,57,2,0,0,0],[72,58,72,81,2,0,0,0],[72,82,72,87,2,0,0,0],[72,90,72,95,2,0,0,0],[73,13,73,20,2,0,0,0],[73,22,73,28,2,0,0,0],[73,31,73,34,2,0,0,0],[73,35,73,40,2,0,0,0],[73,43,73,47,2,0,0,0],[73,48,73,52,2,0,0,0],[73,54,73,61,2,0,0,0],[74,9,74,12,2,0,0,0],[74,13,74,21,2,0,0,0],[74,22,74,45,2,0,0,0],[75,9,75,12,2,0,0,0],[76,5,76,6,4,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/error/mod.rs"],"name":"_RNvMNtCsj868BPJcX0E_8tinydocs5errorNtB2_5Error17generation_failed","regions":[[59,5,59,48,2,0,0,0],[60,9,62,10,2,0,0,0],[63,5,63,6,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":18,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNCNvNtNtCsj868BPJcX0E_8tinydocs4docx4test11entry_names0B7_","regions":[[44,18,44,21,18,0,0,0],[44,18,44,49,18,0,0,0],[44,22,44,30,18,0,0,0],[44,50,44,59,18,0,0,0]]},{"branches":[],"mcdc_records":[],"count":22,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNCNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_44generate_produces_a_readable_ooxml_container0B7_","regions":[[226,34,226,35,22,0,0,0],[226,39,226,47,22,0,0,0]]},{"branches":[],"mcdc_records":[],"count":16,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNCNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_44generate_produces_a_readable_ooxml_containers_0B7_","regions":[[232,30,232,31,16,0,0,0],[232,35,232,55,16,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test10entry_body","regions":[[49,1,49,50,2,0,0,0],[50,9,50,16,2,0,0,0],[51,9,51,29,2,0,0,0],[51,30,51,50,2,0,0,0],[51,51,51,56,2,0,0,0],[51,57,51,63,2,0,0,0],[51,68,51,74,2,0,0,0],[51,75,51,98,2,0,0,0],[52,9,52,18,2,0,0,0],[52,21,52,24,2,0,0,0],[52,25,52,32,2,0,0,0],[52,33,52,37,2,0,0,0],[52,39,52,45,2,0,0,0],[52,46,52,61,2,0,0,0],[53,9,53,17,2,0,0,0],[53,20,53,31,2,0,0,0],[54,5,54,34,2,0,0,0],[54,35,54,45,2,0,0,0],[54,47,54,56,2,0,0,0],[54,58,54,64,2,0,0,0],[55,5,55,9,2,0,0,0],[56,1,56,2,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test11entry_names","regions":[[40,1,40,44,1,0,0,0],[41,9,41,16,1,0,0,0],[42,9,42,29,1,0,0,0],[42,30,42,50,1,0,0,0],[42,51,42,56,1,0,0,0],[42,57,42,63,1,0,0,0],[42,68,42,74,1,0,0,0],[42,75,42,98,1,0,0,0],[43,6,43,18,1,0,0,0],[44,10,44,13,1,0,0,0],[45,10,45,17,1,0,0,0],[46,1,46,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":12,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test14assert_rejects","regions":[[30,1,30,52,12,0,0,0],[31,11,31,15,12,0,0,0],[31,16,31,24,12,0,0,0],[32,42,32,43,12,0,0,0],[33,13,33,23,12,0,0,0],[35,9,35,14,0,0,0,0],[35,18,35,24,0,0,0,0],[37,1,37,2,12,0,0,0]]},{"branches":[],"mcdc_records":[],"count":15,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test4spec","regions":[[21,1,21,26,15,0,0,0],[22,5,26,6,15,0,0,0],[23,16,23,25,15,0,0,0],[23,26,23,35,15,0,0,0],[24,17,24,42,15,0,0,0],[27,1,27,2,15,0,0,0]]},{"branches":[],"mcdc_records":[],"count":18,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4test7section","regions":[[12,1,12,32,18,0,0,0],[13,5,17,6,18,0,0,0],[14,18,14,46,18,0,0,0],[15,21,15,25,18,0,0,0],[15,26,15,45,18,0,0,0],[15,46,15,55,18,0,0,0],[16,18,16,22,18,0,0,0],[18,1,18,2,18,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_21rejects_a_blank_title","regions":[[64,1,64,27,1,0,0,0],[65,9,65,14,1,0,0,0],[65,17,65,21,1,0,0,0],[66,5,66,12,1,0,0,0],[66,15,66,20,1,0,0,0],[66,21,66,30,1,0,0,0],[67,5,67,19,1,0,0,0],[67,20,67,22,1,0,0,0],[67,24,67,31,1,0,0,0],[68,1,68,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_24rejects_too_many_bullets","regions":[[136,1,136,30,1,0,0,0],[137,9,137,14,1,0,0,0],[137,17,137,21,1,0,0,0],[138,5,138,26,1,0,0,0],[138,29,138,33,1,0,0,0],[138,34,138,37,1,0,0,0],[138,38,138,47,1,0,0,0],[138,51,138,78,1,0,0,0],[139,5,139,19,1,0,0,0],[139,20,139,22,1,0,0,0],[139,24,139,45,1,0,0,0],[140,1,140,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_25rejects_too_many_sections","regions":[[92,1,92,31,1,0,0,0],[93,9,93,14,1,0,0,0],[93,17,93,21,1,0,0,0],[94,5,94,15,1,0,0,0],[94,18,94,22,1,0,0,0],[94,23,94,30,1,0,0,0],[94,34,94,50,1,0,0,0],[95,5,95,19,1,0,0,0],[95,20,95,22,1,0,0,0],[95,24,95,34,1,0,0,0],[96,1,96,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_26accepts_a_well_formed_spec","regions":[[59,1,59,32,1,0,0,0],[60,5,60,12,1,0,0,0],[60,13,60,30,1,0,0,0],[60,31,60,36,1,0,0,0],[61,1,61,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_26rejects_an_over_long_title","regions":[[71,1,71,32,1,0,0,0],[72,9,72,14,1,0,0,0],[72,17,72,21,1,0,0,0],[73,5,73,12,1,0,0,0],[73,15,73,18,1,0,0,0],[73,19,73,25,1,0,0,0],[73,26,73,44,1,0,0,0],[74,5,74,19,1,0,0,0],[74,20,74,22,1,0,0,0],[74,24,74,31,1,0,0,0],[75,1,75,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_27rejects_an_over_long_author","regions":[[78,1,78,33,1,0,0,0],[79,9,79,14,1,0,0,0],[79,17,79,21,1,0,0,0],[80,5,80,13,1,0,0,0],[80,16,80,52,1,0,0,0],[80,21,80,24,1,0,0,0],[81,5,81,19,1,0,0,0],[81,20,81,22,1,0,0,0],[81,24,81,32,1,0,0,0],[82,1,82,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_27rejects_too_many_paragraphs","regions":[[122,1,122,33,1,0,0,0],[123,9,123,14,1,0,0,0],[123,17,123,21,1,0,0,0],[124,5,124,29,1,0,0,0],[124,32,124,36,1,0,0,0],[124,37,124,40,1,0,0,0],[124,41,124,50,1,0,0,0],[124,54,124,84,1,0,0,0],[125,5,125,19,1,0,0,0],[125,20,125,22,1,0,0,0],[125,24,125,48,1,0,0,0],[126,1,126,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_29spec_defaults_optional_fields","regions":[[343,1,343,35,1,0,0,0],[344,9,344,10,1,0,0,0],[344,12,344,24,1,0,0,0],[344,27,344,47,1,0,0,0],[344,48,344,66,1,0,0,0],[344,68,344,74,1,0,0,0],[344,75,344,89,1,0,0,0],[345,5,345,15,1,0,0,0],[346,5,346,12,1,0,0,0],[346,13,346,23,1,0,0,0],[346,24,346,32,1,0,0,0],[347,1,347,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_29spec_round_trips_through_json","regions":[[327,1,327,35,1,0,0,0],[328,9,328,10,1,0,0,0],[328,13,328,17,1,0,0,0],[329,9,329,13,1,0,0,0],[329,16,329,37,1,0,0,0],[329,38,329,40,1,0,0,0],[329,42,329,48,1,0,0,0],[329,49,329,61,1,0,0,0],[330,9,330,13,1,0,0,0],[330,15,330,27,1,0,0,0],[330,30,330,50,1,0,0,0],[330,51,330,56,1,0,0,0],[330,58,330,64,1,0,0,0],[330,65,330,79,1,0,0,0],[331,5,331,15,1,0,0,0],[332,1,332,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_30rejects_a_wholly_blank_section","regions":[[99,1,99,36,1,0,0,0],[102,9,102,14,1,0,0,0],[102,17,102,21,1,0,0,0],[103,5,103,15,1,0,0,0],[103,18,103,22,1,0,0,0],[103,23,107,6,1,0,0,0],[104,18,104,40,1,0,0,0],[105,21,105,25,1,0,0,0],[105,26,105,30,1,0,0,0],[105,31,105,40,1,0,0,0],[108,5,108,19,1,0,0,0],[108,20,108,22,1,0,0,0],[108,24,108,37,1,0,0,0],[109,1,109,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_31rejects_a_spec_with_no_sections","regions":[[85,1,85,37,1,0,0,0],[86,9,86,14,1,0,0,0],[86,17,86,21,1,0,0,0],[87,5,87,15,1,0,0,0],[87,16,87,21,1,0,0,0],[88,5,88,19,1,0,0,0],[88,20,88,22,1,0,0,0],[88,24,88,34,1,0,0,0],[89,1,89,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_32spec_rejects_unknown_json_fields","regions":[[335,1,335,38,1,0,0,0],[338,9,338,13,1,0,0,0],[338,16,338,63,1,0,0,0],[339,5,339,12,1,0,0,0],[339,13,339,55,1,0,0,0],[339,56,339,62,1,0,0,0],[340,1,340,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_33total_chars_sums_every_text_field","regions":[[197,1,197,39,1,0,0,0],[198,9,198,10,1,0,0,0],[198,13,206,6,1,0,0,0],[199,16,199,22,1,0,0,0],[199,23,199,32,1,0,0,0],[200,17,200,39,1,0,0,0],[201,19,201,23,1,0,0,0],[202,22,202,45,1,0,0,0],[203,25,203,29,1,0,0,0],[203,30,203,34,1,0,0,0],[203,35,203,44,1,0,0,0],[204,22,204,26,1,0,0,0],[207,5,207,15,1,0,0,0],[207,16,207,17,1,0,0,0],[207,18,207,29,1,0,0,0],[208,1,208,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_34is_blank_reflects_content_presence","regions":[[175,1,175,40,1,0,0,0],[176,5,176,12,1,0,0,0],[176,13,176,34,1,0,0,0],[177,5,177,12,1,0,0,0],[178,9,182,10,1,0,0,0],[179,22,179,26,1,0,0,0],[183,10,183,18,1,0,0,0],[186,5,186,12,1,0,0,0],[187,9,192,20,1,0,0,0],[188,22,188,56,1,0,0,0],[194,1,194,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_38generate_validates_before_synthesising","regions":[[320,1,320,44,1,0,0,0],[321,9,321,14,1,0,0,0],[321,17,321,21,1,0,0,0],[322,5,322,12,1,0,0,0],[322,15,322,26,1,0,0,0],[323,5,323,12,1,0,0,0],[323,13,323,21,0,0,0,0],[323,22,323,30,1,0,0,0],[323,31,323,33,1,0,0,0],[324,1,324,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_43generate_drops_blank_paragraphs_and_bullets","regions":[[276,1,276,49,1,0,0,0],[279,9,279,10,1,0,0,0],[279,13,287,6,1,0,0,0],[280,16,280,25,1,0,0,0],[280,26,280,35,1,0,0,0],[281,17,281,40,1,0,0,0],[282,19,282,23,1,0,0,0],[283,22,283,46,1,0,0,0],[284,25,284,29,1,0,0,0],[284,30,284,36,1,0,0,0],[284,37,284,46,1,0,0,0],[284,50,284,55,1,0,0,0],[284,56,284,65,1,0,0,0],[284,69,284,80,1,0,0,0],[285,22,285,26,1,0,0,0],[285,27,285,33,1,0,0,0],[285,34,285,43,1,0,0,0],[288,9,288,13,1,0,0,0],[288,16,288,26,1,0,0,0],[289,9,289,58,1,0,0,0],[289,10,289,18,1,0,0,0],[289,19,289,21,1,0,0,0],[290,9,290,28,1,0,0,0],[292,5,292,12,1,0,0,0],[292,13,292,34,1,0,0,0],[293,5,293,12,1,0,0,0],[293,13,293,34,1,0,0,0],[294,5,294,12,1,0,0,0],[294,13,294,34,1,0,0,0],[301,5,301,15,1,0,0,0],[302,9,302,30,1,0,0,0],[302,31,302,36,1,0,0,0],[306,5,306,15,1,0,0,0],[307,9,307,30,1,0,0,0],[307,31,307,36,1,0,0,0],[311,9,311,16,2,0,0,0],[311,20,311,35,1,0,0,0],[312,9,312,16,2,0,0,0],[313,13,313,36,2,0,0,0],[313,14,313,18,2,0,0,0],[317,1,317,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_44generate_produces_a_readable_ooxml_container","regions":[[211,1,211,50,1,0,0,0],[212,9,212,14,1,0,0,0],[212,17,212,25,1,0,0,0],[212,26,212,33,1,0,0,0],[212,35,212,41,1,0,0,0],[212,42,212,69,1,0,0,0],[216,5,216,15,1,0,0,0],[216,16,216,28,1,0,0,0],[217,5,217,12,1,0,0,0],[218,9,218,26,1,0,0,0],[220,9,220,14,0,0,0,0],[220,15,220,18,0,0,0,0],[223,9,223,14,1,0,0,0],[223,17,223,28,1,0,0,0],[223,29,223,35,1,0,0,0],[224,9,224,17,3,0,0,0],[224,21,224,80,1,0,0,0],[225,9,225,16,3,0,0,0],[226,13,226,25,3,0,0,0],[226,26,226,29,3,0,0,0],[231,5,231,12,1,0,0,0],[232,9,232,21,1,0,0,0],[232,22,232,25,1,0,0,0],[235,1,235,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_44rejects_an_over_long_bullet_naming_its_index","regions":[[143,1,143,50,1,0,0,0],[144,9,144,14,1,0,0,0],[144,17,144,21,1,0,0,0],[145,5,145,26,1,0,0,0],[145,29,145,33,1,0,0,0],[145,34,145,38,1,0,0,0],[145,39,145,48,1,0,0,0],[145,52,145,55,1,0,0,0],[145,56,145,62,1,0,0,0],[145,63,145,86,1,0,0,0],[146,5,146,19,1,0,0,0],[146,20,146,22,1,0,0,0],[146,24,146,48,1,0,0,0],[147,1,147,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_45rejects_an_over_long_heading_naming_its_index","regions":[[112,1,112,51,1,0,0,0],[113,9,113,14,1,0,0,0],[113,17,113,21,1,0,0,0],[114,5,114,15,1,0,0,0],[114,16,114,20,1,0,0,0],[114,21,117,6,1,0,0,0],[115,23,115,26,1,0,0,0],[118,5,118,19,1,0,0,0],[118,20,118,22,1,0,0,0],[118,24,118,45,1,0,0,0],[119,1,119,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_47generate_carries_every_text_field_into_the_body","regions":[[238,1,238,53,1,0,0,0],[239,9,239,10,1,0,0,0],[239,13,254,6,1,0,0,0],[240,16,240,33,1,0,0,0],[240,34,240,43,1,0,0,0],[241,17,241,42,1,0,0,0],[242,19,242,23,1,0,0,0],[243,13,247,14,1,0,0,0],[244,26,244,54,1,0,0,0],[245,29,245,33,1,0,0,0],[245,34,245,69,1,0,0,0],[249,26,249,51,1,0,0,0],[250,29,250,33,1,0,0,0],[251,26,251,30,1,0,0,0],[251,31,251,40,1,0,0,0],[251,41,251,50,1,0,0,0],[255,9,255,13,1,0,0,0],[255,16,255,26,1,0,0,0],[256,9,256,58,1,0,0,0],[256,10,256,18,1,0,0,0],[256,19,256,21,1,0,0,0],[257,9,257,28,1,0,0,0],[259,9,259,15,7,0,0,0],[259,19,267,6,1,0,0,0],[261,9,261,16,1,0,0,0],[262,9,262,19,1,0,0,0],[263,9,263,44,1,0,0,0],[264,9,264,16,1,0,0,0],[268,9,268,16,7,0,0,0],[269,13,269,17,7,0,0,0],[269,13,269,34,7,0,0,0],[273,1,273,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_47rejects_an_over_long_paragraph_naming_its_index","regions":[[129,1,129,53,1,0,0,0],[130,9,130,14,1,0,0,0],[130,17,130,21,1,0,0,0],[131,5,131,29,1,0,0,0],[131,32,131,36,1,0,0,0],[131,37,131,41,1,0,0,0],[131,42,131,51,1,0,0,0],[131,55,131,58,1,0,0,0],[131,59,131,65,1,0,0,0],[131,66,131,89,1,0,0,0],[132,5,132,19,1,0,0,0],[132,20,132,22,1,0,0,0],[132,24,132,51,1,0,0,0],[133,1,133,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/docx/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs4docx4tests_50rejects_a_spec_over_the_aggregate_character_budget","regions":[[150,1,150,56,1,0,0,0],[156,9,156,24,1,0,0,0],[156,27,156,68,1,0,0,0],[157,5,157,12,1,0,0,0],[157,13,157,58,1,0,0,0],[158,9,158,18,1,0,0,0],[158,21,158,24,1,0,0,0],[158,25,158,31,1,0,0,0],[159,9,159,12,1,0,0,0],[159,15,163,6,1,0,0,0],[160,18,160,45,1,0,0,0],[161,21,161,25,1,0,0,0],[161,26,161,35,1,0,0,0],[164,9,164,10,1,0,0,0],[164,13,168,6,1,0,0,0],[165,16,165,22,1,0,0,0],[165,23,165,32,1,0,0,0],[166,17,166,21,1,0,0,0],[170,5,170,12,1,0,0,0],[170,13,170,45,1,0,0,0],[171,5,171,19,1,0,0,0],[171,20,171,22,1,0,0,0],[171,24,171,34,1,0,0,0],[172,1,172,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_29short_details_are_left_intact","regions":[[8,1,8,35,1,0,0,0],[9,9,9,12,1,0,0,0],[9,15,9,39,1,0,0,0],[9,40,9,46,1,0,0,0],[10,5,10,15,1,0,0,0],[12,9,14,10,1,0,0,0],[16,1,16,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_40long_details_are_truncated_with_a_suffix","regions":[[19,1,19,46,1,0,0,0],[20,9,20,12,1,0,0,0],[20,15,20,18,1,0,0,0],[20,19,20,25,1,0,0,0],[20,26,20,53,1,0,0,0],[21,35,21,41,1,0,0,0],[21,46,21,76,1,0,0,0],[22,9,22,15,0,0,0,0],[24,5,24,15,1,0,0,0],[24,16,24,30,1,0,0,0],[24,31,24,36,1,0,0,0],[25,5,25,12,1,0,0,0],[25,13,25,47,1,0,0,0],[26,1,26,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_42detail_at_exactly_the_cap_is_not_truncated","regions":[[39,1,39,48,1,0,0,0],[40,9,40,12,1,0,0,0],[40,15,40,18,1,0,0,0],[40,19,40,25,1,0,0,0],[41,5,41,15,1,0,0,0],[41,16,41,38,1,0,0,0],[41,39,41,43,1,0,0,0],[42,1,42,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_45invalid_input_carries_the_field_path_verbatim","regions":[[45,1,45,51,1,0,0,0],[46,9,46,12,1,0,0,0],[46,15,46,35,1,0,0,0],[47,5,47,15,1,0,0,0],[49,9,52,10,1,0,0,0],[50,20,50,44,1,0,0,0],[50,45,50,54,1,0,0,0],[54,1,54,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/src/error/test.rs"],"name":"_RNvNtNtCsj868BPJcX0E_8tinydocs5error4tests_46truncation_never_splits_a_multi_byte_character","regions":[[29,1,29,52,1,0,0,0],[32,9,32,12,1,0,0,0],[32,15,32,21,1,0,0,0],[32,22,32,28,1,0,0,0],[32,29,32,56,1,0,0,0],[33,9,33,15,1,0,0,0],[33,18,33,40,1,0,0,0],[33,41,33,45,1,0,0,0],[34,5,34,15,1,0,0,0],[34,16,34,30,1,0,0,0],[34,31,34,36,1,0,0,0],[35,5,35,12,1,0,0,0],[35,13,35,39,1,0,0,0],[36,1,36,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx00B8_","regions":[[32,45,32,59,0,0,0,0],[32,60,32,65,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx0s0_0B8_","regions":[[38,30,38,39,0,0,0,0],[38,40,38,46,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNCNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB6_8TinyDocs13generate_docx0s_0B8_","regions":[[35,23,35,46,0,0,0,0],[35,47,35,56,0,0,0,0],[36,26,36,61,0,0,0,0],[36,62,36,71,0,0,0,0],[37,13,37,14,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB4_8TinyDocs13generate_docx0B6_","regions":[[31,77,31,78,0,0,0,0],[32,9,32,36,0,0,0,0],[33,14,33,19,0,0,0,0],[34,14,34,21,0,0,0,0],[37,15,37,16,0,0,0,0],[38,14,38,21,0,0,0,0],[39,5,39,6,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvNtCs4qzlrmTkdH8_15tinydocs_module7service5setup0B5_","regions":[[54,57,54,58,0,0,0,0],[55,5,55,15,0,0,0,0],[56,10,56,18,0,0,0,0],[56,19,56,30,0,0,0,0],[56,31,56,39,0,0,0,0],[56,41,56,42,0,0,0,0],[56,44,56,52,0,0,0,0],[57,10,57,15,0,0,0,0],[57,15,57,16,0,0,0,0],[58,5,58,15,0,0,0,0],[58,5,58,44,0,0,0,0],[58,44,58,45,0,0,0,0],[59,5,59,11,0,0,0,0],[60,1,60,2,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNCNvXs_NtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB6_8TinyDocsNtNtCs1HgUDVOEcj9_7tinybus7service9Interface4call0B8_","regions":[[28,59,28,60,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvMNtCs4qzlrmTkdH8_15tinydocs_module7serviceNtB2_8TinyDocs13generate_docx","regions":[[31,5,31,76,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvNtCs4qzlrmTkdH8_15tinydocs_module7service5setup","regions":[[54,1,54,56,0,0,0,0]]},{"branches":[],"mcdc_records":[],"count":2,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/mod.rs"],"name":"_RNvNtCs4qzlrmTkdH8_15tinydocs_module7service9map_error","regions":[[42,1,42,40,2,0,0,0],[43,9,43,13,2,0,0,0],[43,22,43,27,2,0,0,0],[44,39,44,58,1,0,0,0],[45,43,45,66,1,0,0,0],[46,14,46,33,0,0,0,0],[48,5,51,6,2,0,0,0],[49,15,49,19,2,0,0,0],[49,20,49,29,2,0,0,0],[52,1,52,2,2,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/test.rs"],"name":"_RNvNtNtCs4qzlrmTkdH8_15tinydocs_module7service4tests_38domain_errors_keep_distinct_wire_names","regions":[[22,1,22,44,1,0,0,0],[23,9,23,22,1,0,0,0],[23,25,23,45,1,0,0,0],[24,9,24,16,1,0,0,0],[24,19,24,28,1,0,0,0],[24,29,24,43,1,0,0,0],[25,5,25,15,1,0,0,0],[25,16,25,23,1,0,0,0],[25,24,25,33,1,0,0,0],[27,9,27,25,1,0,0,0],[27,28,27,52,1,0,0,0],[27,53,27,69,1,0,0,0],[28,9,28,15,1,0,0,0],[28,18,28,27,1,0,0,0],[28,28,28,45,1,0,0,0],[29,5,29,15,1,0,0,0],[29,16,29,22,1,0,0,0],[29,23,29,32,1,0,0,0],[30,1,30,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":1,"filenames":["/home/enamakel/work/tinydocs/crates/tinydocs-module/src/service/test.rs"],"name":"_RNvNtNtCs4qzlrmTkdH8_15tinydocs_module7service4tests_59service_identity_is_valid_and_dispatch_matches_the_manifest","regions":[[10,1,10,65,1,0,0,0],[11,5,11,12,1,0,0,0],[11,13,11,44,1,0,0,0],[11,45,11,50,1,0,0,0],[12,5,12,12,1,0,0,0],[12,13,12,50,1,0,0,0],[12,51,12,56,1,0,0,0],[14,9,14,16,1,0,0,0],[14,19,14,27,1,0,0,0],[14,28,14,35,1,0,0,0],[15,5,15,15,1,0,0,0],[17,9,17,61,1,0,0,0],[19,1,19,2,1,0,0,0]]},{"branches":[],"mcdc_records":[],"count":0,"filenames":["/home/enamakel/work/tinydocs/examples/basic.rs"],"name":"_RNvCsf3pU3hkFCrx_5basic4main","regions":[[12,1,12,10,0,0,0,0],[13,9,13,13,0,0,0,0],[13,16,31,6,0,0,0,0],[14,16,14,34,0,0,0,0],[14,35,14,44,0,0,0,0],[15,17,15,43,0,0,0,0],[16,19,16,23,0,0,0,0],[17,13,21,14,0,0,0,0],[18,26,18,53,0,0,0,0],[19,29,19,33,0,0,0,0],[19,34,19,78,0,0,0,0],[23,26,23,58,0,0,0,0],[24,29,24,33,0,0,0,0],[25,26,25,30,0,0,0,0],[26,21,26,48,0,0,0,0],[26,49,26,58,0,0,0,0],[33,11,33,32,0,0,0,0],[34,12,34,17,0,0,0,0],[34,22,34,30,0,0,0,0],[34,62,34,67,0,0,0,0],[34,68,34,71,0,0,0,0],[35,13,35,18,0,0,0,0],[35,23,35,31,0,0,0,0],[40,9,40,16,0,0,0,0],[40,19,43,6,0,0,0,0],[44,11,44,35,0,0,0,0],[45,12,45,17,0,0,0,0],[45,22,45,30,0,0,0,0],[45,66,45,71,0,0,0,0],[45,72,45,75,0,0,0,0],[46,13,46,18,0,0,0,0],[46,23,46,31,0,0,0,0],[48,1,48,2,0,0,0,0]]}],"totals":{"branches":{"count":0,"covered":0,"notcovered":0,"percent":0},"functions":{"count":52,"covered":49,"percent":94.23076923076923},"instantiations":{"count":73,"covered":64,"percent":87.67123287671232},"lines":{"count":494,"covered":468,"percent":94.73684210526316},"mcdc":{"count":0,"covered":0,"notcovered":0,"percent":0},"regions":{"count":746,"covered":717,"notcovered":29,"percent":96.11260053619303}}}],"type":"llvm.coverage.json.export","version":"3.1.0","cargo_llvm_cov":{"version":"0.8.7","manifest_path":"/home/enamakel/work/tinydocs/Cargo.toml"}} \ No newline at end of file