From b2ec99072a7c78b4502fde35d295024db09db1a6 Mon Sep 17 00:00:00 2001 From: jedarden Date: Sun, 5 Jul 2026 17:15:32 -0400 Subject: [PATCH] chore(bf-3nsde): remove tracked repo-root debris and compiled binaries --- assess_doc_coverage.py | 116 - audit_docs.py | 110 - check_content.py | 21 - check_docs.py | 56 - check_examples.py | 57 - fix_fixtures.py | 43 - pdftract-test-merged.cdx.json | 3942 --------------------------------- tmp_fixtures.py | 59 - 8 files changed, 4404 deletions(-) delete mode 100644 assess_doc_coverage.py delete mode 100644 audit_docs.py delete mode 100644 check_content.py delete mode 100644 check_docs.py delete mode 100644 check_examples.py delete mode 100644 fix_fixtures.py delete mode 100644 pdftract-test-merged.cdx.json delete mode 100644 tmp_fixtures.py diff --git a/assess_doc_coverage.py b/assess_doc_coverage.py deleted file mode 100644 index 53bd5b0..0000000 --- a/assess_doc_coverage.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env python3 -"""Assess rustdoc coverage for pdftract-core public API.""" - -import re -from pathlib import Path -from collections import defaultdict -from dataclasses import dataclass - -@dataclass -class DocStats: - total_items: int = 0 - with_docs: int = 0 - with_examples: int = 0 - items: list = None - - def __post_init__(self): - if self.items is None: - self.items = [] - -def extract_public_items(file_path: Path) -> DocStats: - """Extract public items and their documentation status.""" - content = file_path.read_text() - lines = content.split('\n') - - stats = DocStats() - - # Pattern to match public items - patterns = { - 'pub fn': r'pub\s+fn\s+(\w+)', - 'pub struct': r'pub\s+struct\s+(\w+)', - 'pub enum': r'pub\s+enum\s+(\w+)', - 'pub trait': r'pub\s+trait\s+(\w+)', - 'pub const': r'pub\s+const\s+(\w+)', - 'pub type': r'pub\s+type\s+(\w+)', - 'pub mod': r'pub\s+mod\s+(\w+)', - } - - for i, line in enumerate(lines): - for item_type, pattern in patterns.items(): - match = re.search(pattern, line) - if match: - name = match.group(1) - stats.total_items += 1 - - # Check for doc comment above - has_doc = False - has_example = False - - # Look back for doc comments (/// or //!) - j = i - 1 - doc_lines = [] - while j >= 0 and (lines[j].strip().startswith('///') or lines[j].strip().startswith('//!') or lines[j].strip() == ''): - if lines[j].strip().startswith('///') or lines[j].strip().startswith('//!'): - doc_lines.append(lines[j]) - j -= 1 - - has_doc = len(doc_lines) > 0 - has_example = any('```rust' in dl or '```no_run' in dl or '```ignore' in dl for dl in doc_lines) - - if has_doc: - stats.with_docs += 1 - if has_example: - stats.with_examples += 1 - - stats.items.append({ - 'name': name, - 'type': item_type, - 'file': str(file_path), - 'line': i + 1, - 'has_doc': has_doc, - 'has_example': has_example, - }) - - return stats - -def main(): - src_dir = Path('/home/coding/pdftract/crates/pdftract-core/src') - - all_stats = DocStats() - module_docs = {} - - for rs_file in src_dir.rglob('*.rs'): - # Skip files in tests/ and examples/ - if 'tests' in rs_file.parts or 'examples' in rs_file.parts: - continue - - stats = extract_public_items(rs_file) - - if stats.total_items > 0: - module_name = rs_file.relative_to(src_dir) - module_docs[module_name] = stats - all_stats.total_items += stats.total_items - all_stats.with_docs += stats.with_docs - all_stats.with_examples += stats.with_examples - - print(f"Total public items: {all_stats.total_items}") - print(f"With documentation: {all_stats.with_docs} ({all_stats.with_docs/all_stats.total_items*100:.1f}%)") - print(f"With examples: {all_stats.with_examples} ({all_stats.with_examples/all_stats.total_items*100:.1f}%)") - print() - - # Show modules with worst coverage - print("Modules needing documentation (sorted by items without examples):") - for module, stats in sorted(module_docs.items(), key=lambda x: x[1].total_items - x[1].with_examples, reverse=True): - if stats.total_items > 0: - coverage = stats.with_examples / stats.total_items * 100 if stats.total_items > 0 else 0 - print(f" {module}: {stats.with_examples}/{stats.total_items} ({coverage:.0f}%)") - - # List items without docs - print("\nItems WITHOUT any documentation:") - for module, stats in module_docs.items(): - for item in stats.items: - if not item['has_doc']: - print(f" {module}:{item['line']} - {item['type']} {item['name']}") - -if __name__ == '__main__': - main() diff --git a/audit_docs.py b/audit_docs.py deleted file mode 100644 index aac986c..0000000 --- a/audit_docs.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python3 -""" -Audit script to find public items in pdftract-core that are missing documentation. -""" -import re -import subprocess -from pathlib import Path -from collections import defaultdict - -PUBLIC_PATTERNS = [ - (r'pub fn (\w+)', 'function'), - (r'pub struct (\w+)', 'struct'), - (r'pub enum (\w+)', 'enum'), - (r'pub trait (\w+)', 'trait'), - (r'pub type (\w+)', 'type'), - (r'pub const (\w+)', 'const'), - (r'pub mod (\w+)', 'module'), - (r'pub (?:static|async) (\w+)', 'other'), -] - -def has_doc_comment(lines, line_idx): - """Check if there's a doc comment before the given line.""" - for i in range(line_idx - 1, -1, -1): - line = lines[i].strip() - if line.startswith('///') or line.startswith('//!'): - return True - if line and not line.startswith('//') and not line.startswith('#'): - break - return False - -def audit_file(filepath): - """Audit a single Rust file for missing documentation.""" - items = [] - lines = filepath.read_text(encoding='utf-8').split('\n') - - for line_idx, line in enumerate(lines): - for pattern, item_type in PUBLIC_PATTERNS: - match = re.search(pattern, line) - if match: - item_name = match.group(1) - has_docs = has_doc_comment(lines, line_idx) - items.append({ - 'name': item_name, - 'type': item_type, - 'has_docs': has_docs, - 'line': line_idx + 1, - 'file': str(filepath.relative_to('/home/coding/pdftract/crates/pdftract-core/src')) - }) - return items - -def main(): - src_dir = Path('/home/coding/pdftract/crates/pdftract-core/src') - - all_items = [] - for rs_file in sorted(src_dir.rglob('*.rs')): - all_items.extend(audit_file(rs_file)) - - # Group by type and coverage - by_type = defaultdict(lambda: {'total': 0, 'with_docs': 0, 'missing': []}) - for item in all_items: - by_type[item['type']]['total'] += 1 - if item['has_docs']: - by_type[item['type']]['with_docs'] += 1 - else: - by_type[item['type']]['missing'].append(item) - - # Print summary - print("=" * 60) - print("PDFTRACT-CORE DOCUMENTATION AUDIT") - print("=" * 60) - print() - - total_items = len(all_items) - total_with_docs = sum(1 for i in all_items if i['has_docs']) - - print(f"TOTAL PUBLIC ITEMS: {total_items}") - print(f"WITH DOCUMENTATION: {total_with_docs} ({100 * total_with_docs / total_items:.1f}%)") - print(f"MISSING DOCUMENTATION: {total_items - total_with_docs} ({100 * (total_items - total_with_docs) / total_items:.1f}%)") - print() - - print("BY TYPE:") - print("-" * 40) - for item_type, data in sorted(by_type.items()): - coverage = 100 * data['with_docs'] / data['total'] if data['total'] > 0 else 0 - print(f"{item_type:12}: {data['with_docs']:4}/{data['total']:<4} ({coverage:5.1f}%)") - print() - - # Print top missing items - if any(by_type[t]['missing'] for t in by_type): - print("TOP ITEMS MISSING DOCS (first 20 by type):") - print("-" * 40) - for item_type in sorted(by_type.keys()): - missing = by_type[item_type]['missing'][:10] - for item in missing: - print(f" [{item_type}] {item['name']} at {item['file']}:{item['line']}") - - print() - print("=" * 60) - - # Return exit code based on 80% threshold - coverage = 100 * total_with_docs / total_items if total_items > 0 else 0 - if coverage >= 80: - print(f"✓ PASS: {coverage:.1f}% coverage meets 80% threshold") - return 0 - else: - print(f"✗ FAIL: {coverage:.1f}% coverage below 80% threshold") - return 1 - -if __name__ == '__main__': - exit(main()) diff --git a/check_content.py b/check_content.py deleted file mode 100644 index fbc3dc0..0000000 --- a/check_content.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python3 -import sys -try: - import pikepdf -except ImportError: - sys.exit("pikepdf not available") - -def extract_text(path): - with pikepdf.open(path) as pdf: - for page in pdf.pages: - if "/Contents" in page: - contents = page["/Contents"] - if hasattr(contents, "read_bytes"): - data = contents.read_bytes() - else: - data = bytes(contents) - print(f"{path}: {data[:200]}") - break - -extract_text("tests/fingerprint/fixtures/content_edit_one_glyph/v1.pdf") -extract_text("tests/fingerprint/fixtures/content_edit_one_glyph/v2.pdf") diff --git a/check_docs.py b/check_docs.py deleted file mode 100644 index f4b90d2..0000000 --- a/check_docs.py +++ /dev/null @@ -1,56 +0,0 @@ -import re -import os -from pathlib import Path - -def count_public_items(file_path): - with open(file_path, 'r') as f: - lines = f.readlines() - - items = [] - i = 0 - while i < len(lines): - line = lines[i] - # Check for public items - if re.match(r'^pub (fn|struct|enum|trait|type|const|static)', line): - item = {'line': i + 1, 'type': line.strip(), 'has_doc': False} - # Check for doc comments in the 3 lines before - j = max(0, i - 3) - while j < i: - if lines[j].strip().startswith('///'): - item['has_doc'] = True - break - j += 1 - items.append(item) - i += 1 - - return items - -src_dir = Path('crates/pdftract-core/src') -all_items = [] -for rs_file in src_dir.rglob('*.rs'): - items = count_public_items(rs_file) - all_items.extend(items) - -total = len(all_items) -with_docs = sum(1 for item in all_items if item['has_doc']) - -print(f"Total public items: {total}") -print(f"Items with docs: {with_docs}") -print(f"Coverage: {with_docs/total*100:.1f}%") - -# Show which modules need work -modules = {} -for item in all_items: - module = item.get('module', 'unknown') - if module not in modules: - modules[module] = {'total': 0, 'with_docs': 0} - modules[module]['total'] += 1 - if item['has_doc']: - modules[module]['with_docs'] += 1 - -print("\nModules needing work:") -for mod, counts in sorted(modules.items(), key=lambda x: x[1]['total'] - x[1]['with_docs'], reverse=True): - if counts['total'] > 0: - coverage = counts['with_docs']/counts['total']*100 - if coverage < 80: - print(f" {mod}: {coverage:.0f}% ({counts['with_docs']}/{counts['total']})") diff --git a/check_examples.py b/check_examples.py deleted file mode 100644 index c9ae2b9..0000000 --- a/check_examples.py +++ /dev/null @@ -1,57 +0,0 @@ -import re -from pathlib import Path - -def count_items_with_examples(file_path): - with open(file_path, 'r') as f: - content = f.read() - lines = f.readlines() - - items = [] - i = 0 - while i < len(lines): - line = lines[i] - # Check for public items - if re.match(r'^pub (fn|struct|enum|trait|type|const|static)', line): - item = {'line': i + 1, 'type': line.strip(), 'has_doc': False, 'has_example': False} - # Look back up to 10 lines for doc comments - j = max(0, i - 10) - doc_lines = [] - while j < i: - if lines[j].strip().startswith('///'): - doc_lines.append(lines[j]) - elif not lines[j].strip().startswith('///') and doc_lines: - # Non-doc comment breaks the doc block - break - j += 1 - - if doc_lines: - item['has_doc'] = True - # Check for example in doc (```rust) - doc_text = '\n'.join(doc_lines) - if '```rust' in doc_text: - item['has_example'] = True - - items.append(item) - i += 1 - - return items - -src_dir = Path('crates/pdftract-core/src') -all_items = [] -for rs_file in src_dir.rglob('*.rs'): - items = count_items_with_examples(rs_file) - all_items.extend(items) - -total = len(all_items) -with_docs = sum(1 for item in all_items if item['has_doc']) -with_examples = sum(1 for item in all_items if item['has_example']) - -print(f"Total public items: {total}") -print(f"Items with docs: {with_docs} ({with_docs/total*100:.1f}%)") -print(f"Items with examples: {with_examples} ({with_examples/total*100:.1f}%)") - -# Show items missing docs -print("\nItems missing documentation:") -for item in sorted(all_items, key=lambda x: x['line']): - if not item['has_doc']: - print(f" {item['type']}") diff --git a/fix_fixtures.py b/fix_fixtures.py deleted file mode 100644 index 881aec3..0000000 --- a/fix_fixtures.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -"""Fix malformed PDF fixtures with incorrect startxref offsets.""" -import re -import subprocess - -fixtures = [ - "tests/document_model/fixtures/ocg_default_off.pdf", - "tests/document_model/fixtures/tagged_3_level_outline.pdf", - "tests/document_model/fixtures/multi_revision_3.pdf", - "tests/document_model/fixtures/inheritance_grandparent_mediabox.pdf", - "tests/document_model/fixtures/missing_mediabox.pdf", - "tests/document_model/fixtures/partial_resource_override.pdf", - "tests/document_model/fixtures/js_in_openaction.pdf", - "tests/document_model/fixtures/xfa_form.pdf", - "tests/document_model/fixtures/pdfa_1b_conformance.pdf", - "tests/document_model/fixtures/page_labels_roman_arabic.pdf", - "tests/document_model/fixtures/encrypted_unknown_handler.pdf", -] - -for fixture_path in fixtures: - try: - # Read the file - with open(fixture_path, 'rb') as f: - data = f.read() - - # Find the first "xref" (the correct one) - xref_match = re.search(b'xref\n', data) - if not xref_match: - print(f"Skipping {fixture_path}: no xref found") - continue - - correct_offset = xref_match.start() - - # Fix the startxref value - new_data = re.sub(rb'startxref\n\d+', f'startxref\n{correct_offset}'.encode(), data) - - # Write back - with open(fixture_path, 'wb') as f: - f.write(new_data) - - print(f"Fixed {fixture_path}: startxref now points to {correct_offset}") - except Exception as e: - print(f"Error fixing {fixture_path}: {e}") diff --git a/pdftract-test-merged.cdx.json b/pdftract-test-merged.cdx.json deleted file mode 100644 index 90a71a0..0000000 --- a/pdftract-test-merged.cdx.json +++ /dev/null @@ -1,3942 +0,0 @@ -{ - "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", - "bomFormat": "CycloneDX", - "specVersion": "1.5", - "version": 1, - "metadata": { - "timestamp": "2026-05-23T03:44:47.688963346Z", - "tools": [ - { - "vendor": "CycloneDX", - "name": "cargo-cyclonedx", - "version": "0.5.9" - } - ], - "component": { - "type": "library", - "bom-ref": "path+file:///home/coding/pdftract/crates/pdftract-core#0.1.0", - "name": "pdftract-core", - "version": "0.1.0", - "scope": "required", - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pdftract-core@0.1.0?download_url=file://.", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/jedarden/pdftract" - } - ], - "components": [ - { - "type": "library", - "bom-ref": "path+file:///home/coding/pdftract/crates/pdftract-core#0.1.0 bin-target-0", - "name": "pdftract_core", - "version": "0.1.0", - "purl": "pkg:cargo/pdftract-core@0.1.0?download_url=file://.#src/lib.rs" - } - ] - }, - "properties": [ - { - "name": "cdx:rustc:sbom:target:triple", - "value": "x86_64-unknown-linux-gnu" - } - ] - }, - "components": [ - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#adler2@2.0.1", - "author": "Jonas Schievink , oyvindln ", - "name": "adler2", - "version": "2.0.1", - "description": "A simple clean-room implementation of the Adler-32 checksum", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - } - ], - "licenses": [ - { - "expression": "0BSD OR MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/adler2@2.0.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/adler2/" - }, - { - "type": "vcs", - "url": "https://github.com/oyvindln/adler2" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#aho-corasick@1.1.4", - "author": "Andrew Gallant ", - "name": "aho-corasick", - "version": "1.1.4", - "description": "Fast multiple substring searching.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" - } - ], - "licenses": [ - { - "expression": "Unlicense OR MIT" - } - ], - "purl": "pkg:cargo/aho-corasick@1.1.4", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/BurntSushi/aho-corasick" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/aho-corasick" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstream@1.0.0", - "name": "anstream", - "version": "1.0.0", - "description": "IO stream adapters for writing colored text that will gracefully degrade according to your terminal's capabilities.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstream@1.0.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-parse@1.0.0", - "name": "anstyle-parse", - "version": "1.0.0", - "description": "Parse ANSI Style Escapes", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle-parse@1.0.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle-query@1.1.5", - "name": "anstyle-query", - "version": "1.1.5", - "description": "Look up colored console capabilities", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle-query@1.1.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anstyle@1.0.14", - "name": "anstyle", - "version": "1.0.14", - "description": "ANSI text styling", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anstyle@1.0.14", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.102", - "author": "David Tolnay ", - "name": "anyhow", - "version": "1.0.102", - "description": "Flexible concrete Error type built on std::error::Error", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/anyhow@1.0.102", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/anyhow" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/anyhow" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#autocfg@1.5.0", - "author": "Josh Stone ", - "name": "autocfg", - "version": "1.5.0", - "description": "Automatic cfg for Rust compiler features", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/autocfg@1.5.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/autocfg/" - }, - { - "type": "vcs", - "url": "https://github.com/cuviper/autocfg" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bitflags@2.11.1", - "author": "The Rust Project Developers", - "name": "bitflags", - "version": "2.11.1", - "description": "A macro to generate structures which behave like bitflags. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/bitflags@2.11.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/bitflags" - }, - { - "type": "website", - "url": "https://github.com/bitflags/bitflags" - }, - { - "type": "vcs", - "url": "https://github.com/bitflags/bitflags" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#block-buffer@0.10.4", - "author": "RustCrypto Developers", - "name": "block-buffer", - "version": "0.10.4", - "description": "Buffer type for block processing of data", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/block-buffer@0.10.4", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/block-buffer" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bstr@1.12.1", - "author": "Andrew Gallant ", - "name": "bstr", - "version": "1.12.1", - "description": "A string type that is not required to be valid UTF-8.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/bstr@1.12.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/bstr" - }, - { - "type": "website", - "url": "https://github.com/BurntSushi/bstr" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/bstr" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#bytes@1.11.1", - "author": "Carl Lerche , Sean McArthur ", - "name": "bytes", - "version": "1.11.1", - "description": "Types and traits for working with bytes", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/bytes@1.11.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/tokio-rs/bytes" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.4", - "author": "Alex Crichton ", - "name": "cfg-if", - "version": "1.0.4", - "description": "A macro to ergonomically define an item depending on a large number of #[cfg] parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/cfg-if@1.0.4", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/cfg-if" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#chrono-tz-build@0.3.0", - "name": "chrono-tz-build", - "version": "0.3.0", - "description": "internal build script for chrono-tz", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/chrono-tz-build@0.3.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/chrono-tz-build" - }, - { - "type": "vcs", - "url": "https://github.com/chronotope/chrono-tz" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#chrono-tz@0.9.0", - "name": "chrono-tz", - "version": "0.9.0", - "description": "TimeZone implementations for chrono from the IANA database", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/chrono-tz@0.9.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/chrono-tz" - }, - { - "type": "vcs", - "url": "https://github.com/chronotope/chrono-tz" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#chrono@0.4.44", - "name": "chrono", - "version": "0.4.44", - "description": "Date and time library for Rust", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/chrono@0.4.44", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/chrono/" - }, - { - "type": "website", - "url": "https://github.com/chronotope/chrono" - }, - { - "type": "vcs", - "url": "https://github.com/chronotope/chrono" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap@4.6.1", - "name": "clap", - "version": "4.6.1", - "description": "A simple to use, efficient, and full-featured Command Line Argument Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap@4.6.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_builder@4.6.0", - "name": "clap_builder", - "version": "4.6.0", - "description": "A simple to use, efficient, and full-featured Command Line Argument Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_builder@4.6.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_derive@4.6.1", - "name": "clap_derive", - "version": "4.6.1", - "description": "Parse command line argument by defining a struct, derive crate.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_derive@4.6.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#clap_lex@1.1.0", - "name": "clap_lex", - "version": "1.1.0", - "description": "Minimal, flexible command line parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/clap_lex@1.1.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/clap-rs/clap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#colorchoice@1.0.5", - "name": "colorchoice", - "version": "1.0.5", - "description": "Global override of color control", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/colorchoice@1.0.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-cli/anstyle.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#cpufeatures@0.2.17", - "author": "RustCrypto Developers", - "name": "cpufeatures", - "version": "0.2.17", - "description": "Lightweight runtime CPU feature detection for aarch64, loongarch64, and x86/x86_64 targets, with no_std support and support for mobile targets including Android and iOS ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/cpufeatures@0.2.17", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/cpufeatures" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#crc32fast@1.5.0", - "author": "Sam Rijs , Alex Crichton ", - "name": "crc32fast", - "version": "1.5.0", - "description": "Fast, SIMD-accelerated CRC32 (IEEE) checksum computation", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/crc32fast@1.5.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/srijs/rust-crc32fast" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#crossbeam-deque@0.8.6", - "name": "crossbeam-deque", - "version": "0.8.6", - "description": "Concurrent work-stealing deque", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/crossbeam-deque@0.8.6", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-deque" - }, - { - "type": "vcs", - "url": "https://github.com/crossbeam-rs/crossbeam" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#crossbeam-epoch@0.9.18", - "name": "crossbeam-epoch", - "version": "0.9.18", - "description": "Epoch-based garbage collection", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/crossbeam-epoch@0.9.18", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-epoch" - }, - { - "type": "vcs", - "url": "https://github.com/crossbeam-rs/crossbeam" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#crossbeam-utils@0.8.21", - "name": "crossbeam-utils", - "version": "0.8.21", - "description": "Utilities for concurrent programming", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/crossbeam-utils@0.8.21", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-utils" - }, - { - "type": "vcs", - "url": "https://github.com/crossbeam-rs/crossbeam" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#crypto-common@0.1.7", - "author": "RustCrypto Developers", - "name": "crypto-common", - "version": "0.1.7", - "description": "Common cryptographic traits", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/crypto-common@0.1.7", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/crypto-common" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/traits" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#deunicode@1.6.2", - "author": "Kornel Lesinski , Amit Chowdhury ", - "name": "deunicode", - "version": "1.6.2", - "description": "Convert Unicode strings to pure ASCII by intelligently transliterating them. Suppors Emoji and Chinese.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04" - } - ], - "licenses": [ - { - "expression": "BSD-3-Clause" - } - ], - "purl": "pkg:cargo/deunicode@1.6.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/deunicode" - }, - { - "type": "website", - "url": "https://lib.rs/crates/deunicode" - }, - { - "type": "vcs", - "url": "https://github.com/kornelski/deunicode/" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#digest@0.10.7", - "author": "RustCrypto Developers", - "name": "digest", - "version": "0.10.7", - "description": "Traits for cryptographic hash functions and message authentication codes", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/digest@0.10.7", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/digest" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/traits" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#equivalent@1.0.2", - "name": "equivalent", - "version": "1.0.2", - "description": "Traits for key comparison in maps.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/equivalent@1.0.2", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/indexmap-rs/equivalent" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#errno@0.3.14", - "author": "Chris Wong , Dan Gohman ", - "name": "errno", - "version": "0.3.14", - "description": "Cross-platform interface to the `errno` variable.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/errno@0.3.14", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/errno" - }, - { - "type": "vcs", - "url": "https://github.com/lambda-fairy/rust-errno" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#fastrand@2.4.1", - "author": "Stjepan Glavina ", - "name": "fastrand", - "version": "2.4.1", - "description": "A simple and fast random number generator", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/fastrand@2.4.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/smol-rs/fastrand" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#flate2@1.1.9", - "author": "Alex Crichton , Josh Triplett ", - "name": "flate2", - "version": "1.1.9", - "description": "DEFLATE compression and decompression exposed as Read/BufRead/Write streams. Supports miniz_oxide and multiple zlib implementations. Supports zlib, gzip, and raw deflate streams. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/flate2@1.1.9", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/flate2" - }, - { - "type": "website", - "url": "https://github.com/rust-lang/flate2-rs" - }, - { - "type": "vcs", - "url": "https://github.com/rust-lang/flate2-rs" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#generic-array@0.14.7", - "author": "Bartłomiej Kamiński , Aaron Trent ", - "name": "generic-array", - "version": "0.14.7", - "description": "Generic types implementing functionality of arrays", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/generic-array@0.14.7", - "externalReferences": [ - { - "type": "documentation", - "url": "http://fizyk20.github.io/generic-array/generic_array/" - }, - { - "type": "vcs", - "url": "https://github.com/fizyk20/generic-array.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#getrandom@0.2.17", - "author": "The Rand Project Developers", - "name": "getrandom", - "version": "0.2.17", - "description": "A small cross-platform library for retrieving random data from system source", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/getrandom@0.2.17", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/getrandom" - }, - { - "type": "vcs", - "url": "https://github.com/rust-random/getrandom" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#getrandom@0.4.2", - "author": "The Rand Project Developers", - "name": "getrandom", - "version": "0.4.2", - "description": "A small cross-platform library for retrieving random data from system source", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/getrandom@0.4.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/getrandom" - }, - { - "type": "vcs", - "url": "https://github.com/rust-random/getrandom" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#globset@0.4.18", - "author": "Andrew Gallant ", - "name": "globset", - "version": "0.4.18", - "description": "Cross platform single glob and glob set matching. Glob set matching is the process of matching one or more glob patterns against a single candidate path simultaneously, and returning all of the globs that matched. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" - } - ], - "licenses": [ - { - "expression": "Unlicense OR MIT" - } - ], - "purl": "pkg:cargo/globset@0.4.18", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/globset" - }, - { - "type": "website", - "url": "https://github.com/BurntSushi/ripgrep/tree/master/crates/globset" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/ripgrep/tree/master/crates/globset" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#globwalk@0.9.1", - "author": "Gilad Naaman ", - "name": "globwalk", - "version": "0.9.1", - "description": "Glob-matched recursive file system walking.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/globwalk@0.9.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/gilnaa/globwalk" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#hashbrown@0.17.1", - "name": "hashbrown", - "version": "0.17.1", - "description": "A Rust port of Google's SwissTable hash map", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/hashbrown@0.17.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/hashbrown" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.4.1", - "author": "Without Boats ", - "name": "heck", - "version": "0.4.1", - "description": "heck is a case conversion library.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/heck@0.4.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/heck" - }, - { - "type": "website", - "url": "https://github.com/withoutboats/heck" - }, - { - "type": "vcs", - "url": "https://github.com/withoutboats/heck" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#heck@0.5.0", - "name": "heck", - "version": "0.5.0", - "description": "heck is a case conversion library.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/heck@0.5.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/withoutboats/heck" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#hex@0.4.3", - "author": "KokaKiwi ", - "name": "hex", - "version": "0.4.3", - "description": "Encoding and decoding data into/from hexadecimal representation.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/hex@0.4.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/hex/" - }, - { - "type": "vcs", - "url": "https://github.com/KokaKiwi/rust-hex" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#humansize@2.1.3", - "author": "Leopold Arkham ", - "name": "humansize", - "version": "2.1.3", - "description": "A configurable crate to easily represent sizes in a human-readable format.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/humansize@2.1.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/humansize" - }, - { - "type": "website", - "url": "https://github.com/LeopoldArkham/humansize" - }, - { - "type": "vcs", - "url": "https://github.com/LeopoldArkham/humansize" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#iana-time-zone@0.1.65", - "author": "Andrew Straw , René Kijewski , Ryan Lopopolo ", - "name": "iana-time-zone", - "version": "0.1.65", - "description": "get the IANA time zone for the current system", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/iana-time-zone@0.1.65", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/strawlab/iana-time-zone" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ignore@0.4.25", - "author": "Andrew Gallant ", - "name": "ignore", - "version": "0.4.25", - "description": "A fast library for efficiently matching ignore files such as `.gitignore` against file paths. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" - } - ], - "licenses": [ - { - "expression": "Unlicense OR MIT" - } - ], - "purl": "pkg:cargo/ignore@0.4.25", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/ignore" - }, - { - "type": "website", - "url": "https://github.com/BurntSushi/ripgrep/tree/master/crates/ignore" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/ripgrep/tree/master/crates/ignore" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#indexmap@2.14.0", - "name": "indexmap", - "version": "2.14.0", - "description": "A hash table with consistent order and fast iteration.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/indexmap@2.14.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/indexmap/" - }, - { - "type": "vcs", - "url": "https://github.com/indexmap-rs/indexmap" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#indoc@2.0.7", - "author": "David Tolnay ", - "name": "indoc", - "version": "2.0.7", - "description": "Indented document literals", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/indoc@2.0.7", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/indoc" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/indoc" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#is_terminal_polyfill@1.70.2", - "name": "is_terminal_polyfill", - "version": "1.70.2", - "description": "Polyfill for `is_terminal` stdlib feature for use with older MSRVs", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/is_terminal_polyfill@1.70.2", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/polyfill-rs/is_terminal_polyfill" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#itoa@1.0.18", - "author": "David Tolnay ", - "name": "itoa", - "version": "1.0.18", - "description": "Fast integer primitive to string conversion", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/itoa@1.0.18", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/itoa" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/itoa" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#lazy_static@1.5.0", - "author": "Marvin Löbel ", - "name": "lazy_static", - "version": "1.5.0", - "description": "A macro for declaring lazily evaluated statics in Rust.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/lazy_static@1.5.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/lazy_static" - }, - { - "type": "vcs", - "url": "https://github.com/rust-lang-nursery/lazy-static.rs" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#libc@0.2.186", - "author": "The Rust Project Developers", - "name": "libc", - "version": "0.2.186", - "description": "Raw FFI bindings to platform libraries like libc.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/libc@0.2.186", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/libc" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#libm@0.2.16", - "author": "Alex Crichton , Amanieu d'Antras , Jorge Aparicio , Trevor Gross ", - "name": "libm", - "version": "0.2.16", - "description": "libm in pure Rust", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/libm@0.2.16", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-lang/compiler-builtins" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#linux-raw-sys@0.12.1", - "author": "Dan Gohman ", - "name": "linux-raw-sys", - "version": "0.12.1", - "description": "Generated bindings for Linux's userspace API", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/linux-raw-sys@0.12.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/linux-raw-sys" - }, - { - "type": "vcs", - "url": "https://github.com/sunfishcode/linux-raw-sys" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#lock_api@0.4.14", - "author": "Amanieu d'Antras ", - "name": "lock_api", - "version": "0.4.14", - "description": "Wrappers to create fully-featured Mutex and RwLock types. Compatible with no_std.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/lock_api@0.4.14", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/Amanieu/parking_lot" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#log@0.4.29", - "author": "The Rust Project Developers", - "name": "log", - "version": "0.4.29", - "description": "A lightweight logging facade for Rust ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/log@0.4.29", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/log" - }, - { - "type": "vcs", - "url": "https://github.com/rust-lang/log" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#lzw@0.10.0", - "author": "nwin ", - "name": "lzw", - "version": "0.10.0", - "description": "LZW compression and decompression.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/lzw@0.10.0", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/nwin/lzw.git" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#memchr@2.8.0", - "author": "Andrew Gallant , bluss", - "name": "memchr", - "version": "2.8.0", - "description": "Provides extremely fast (uses SIMD on x86_64, aarch64 and wasm32) routines for 1, 2 or 3 byte search and single substring search. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" - } - ], - "licenses": [ - { - "expression": "Unlicense OR MIT" - } - ], - "purl": "pkg:cargo/memchr@2.8.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/memchr/" - }, - { - "type": "website", - "url": "https://github.com/BurntSushi/memchr" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/memchr" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#memoffset@0.9.1", - "author": "Gilad Naaman ", - "name": "memoffset", - "version": "0.9.1", - "description": "offset_of functionality for Rust structs.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/memoffset@0.9.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/Gilnaa/memoffset" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#miniz_oxide@0.8.9", - "author": "Frommi , oyvindln , Rich Geldreich richgel99@gmail.com", - "name": "miniz_oxide", - "version": "0.8.9", - "description": "DEFLATE compression and decompression library rewritten in Rust based on miniz", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" - } - ], - "licenses": [ - { - "expression": "MIT OR Zlib OR Apache-2.0" - } - ], - "purl": "pkg:cargo/miniz_oxide@0.8.9", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/miniz_oxide" - }, - { - "type": "website", - "url": "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide" - }, - { - "type": "vcs", - "url": "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#mio@1.2.0", - "author": "Carl Lerche , Thomas de Zeeuw , Tokio Contributors ", - "name": "mio", - "version": "1.2.0", - "description": "Lightweight non-blocking I/O.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/mio@1.2.0", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/tokio-rs/mio" - }, - { - "type": "vcs", - "url": "https://github.com/tokio-rs/mio" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#num-traits@0.2.19", - "author": "The Rust Project Developers", - "name": "num-traits", - "version": "0.2.19", - "description": "Numeric traits for generic mathematics", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/num-traits@0.2.19", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/num-traits" - }, - { - "type": "website", - "url": "https://github.com/rust-num/num-traits" - }, - { - "type": "vcs", - "url": "https://github.com/rust-num/num-traits" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#once_cell@1.21.4", - "author": "Aleksey Kladov ", - "name": "once_cell", - "version": "1.21.4", - "description": "Single assignment cells and lazy values.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/once_cell@1.21.4", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/once_cell" - }, - { - "type": "vcs", - "url": "https://github.com/matklad/once_cell" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#parking_lot@0.12.5", - "author": "Amanieu d'Antras ", - "name": "parking_lot", - "version": "0.12.5", - "description": "More compact and efficient implementations of the standard synchronization primitives.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/parking_lot@0.12.5", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/Amanieu/parking_lot" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#parking_lot_core@0.9.12", - "author": "Amanieu d'Antras ", - "name": "parking_lot_core", - "version": "0.9.12", - "description": "An advanced API for creating custom synchronization primitives.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/parking_lot_core@0.9.12", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/Amanieu/parking_lot" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#parse-zoneinfo@0.3.1", - "name": "parse-zoneinfo", - "version": "0.3.1", - "description": "Parse zoneinfo files from the IANA database", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/parse-zoneinfo@0.3.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/chronotope/chrono-tz" - } - ] - }, - { - "type": "library", - "bom-ref": "path+file:///home/coding/pdftract/crates/pdftract-core#0.1.0", - "name": "pdftract-core", - "version": "0.1.0", - "scope": "required", - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pdftract-core@0.1.0?download_url=file://../pdftract-core", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/jedarden/pdftract" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#percent-encoding@2.3.2", - "author": "The rust-url developers", - "name": "percent-encoding", - "version": "2.3.2", - "description": "Percent encoding and decoding", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/percent-encoding@2.3.2", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/servo/rust-url/" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pest@2.8.6", - "author": "Dragoș Tiselice ", - "name": "pest", - "version": "2.8.6", - "description": "The Elegant Parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pest@2.8.6", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/pest" - }, - { - "type": "website", - "url": "https://pest.rs/" - }, - { - "type": "vcs", - "url": "https://github.com/pest-parser/pest" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pest_derive@2.8.6", - "author": "Dragoș Tiselice ", - "name": "pest_derive", - "version": "2.8.6", - "description": "pest's derive macro", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pest_derive@2.8.6", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/pest" - }, - { - "type": "website", - "url": "https://pest.rs/" - }, - { - "type": "vcs", - "url": "https://github.com/pest-parser/pest" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pest_generator@2.8.6", - "author": "Dragoș Tiselice ", - "name": "pest_generator", - "version": "2.8.6", - "description": "pest code generator", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pest_generator@2.8.6", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/pest" - }, - { - "type": "website", - "url": "https://pest.rs/" - }, - { - "type": "vcs", - "url": "https://github.com/pest-parser/pest" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pest_meta@2.8.6", - "author": "Dragoș Tiselice ", - "name": "pest_meta", - "version": "2.8.6", - "description": "pest meta language parser and validator", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pest_meta@2.8.6", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/pest" - }, - { - "type": "website", - "url": "https://pest.rs/" - }, - { - "type": "vcs", - "url": "https://github.com/pest-parser/pest" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#phf@0.11.3", - "author": "Steven Fackler ", - "name": "phf", - "version": "0.11.3", - "description": "Runtime support for perfect hash function data structures", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/phf@0.11.3", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-phf/rust-phf" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#phf_codegen@0.11.3", - "author": "Steven Fackler ", - "name": "phf_codegen", - "version": "0.11.3", - "description": "Codegen library for PHF types", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/phf_codegen@0.11.3", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-phf/rust-phf" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#phf_generator@0.11.3", - "author": "Steven Fackler ", - "name": "phf_generator", - "version": "0.11.3", - "description": "PHF generation logic", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/phf_generator@0.11.3", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-phf/rust-phf" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#phf_shared@0.11.3", - "author": "Steven Fackler ", - "name": "phf_shared", - "version": "0.11.3", - "description": "Support code shared by PHF libraries", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/phf_shared@0.11.3", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/rust-phf/rust-phf" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pin-project-lite@0.2.17", - "name": "pin-project-lite", - "version": "0.2.17", - "description": "A lightweight version of pin-project written with declarative macros. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/pin-project-lite@0.2.17", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/taiki-e/pin-project-lite" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#portable-atomic@1.13.1", - "name": "portable-atomic", - "version": "1.13.1", - "description": "Portable atomic types including support for 128-bit atomics, atomic float, etc. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/portable-atomic@1.13.1", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/taiki-e/portable-atomic" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ppv-lite86@0.2.21", - "author": "The CryptoCorrosion Contributors", - "name": "ppv-lite86", - "version": "0.2.21", - "description": "Cross-platform cryptography-oriented low-level SIMD library.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/ppv-lite86@0.2.21", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/cryptocorrosion/cryptocorrosion" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#proc-macro2@1.0.106", - "author": "David Tolnay , Alex Crichton ", - "name": "proc-macro2", - "version": "1.0.106", - "description": "A substitute implementation of the compiler's `proc_macro` API to decouple token-based libraries from the procedural macro use case.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/proc-macro2@1.0.106", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/proc-macro2" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/proc-macro2" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-build-config@0.20.3", - "author": "PyO3 Project and Contributors ", - "name": "pyo3-build-config", - "version": "0.20.3", - "description": "Build configuration for the PyO3 ecosystem", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pyo3-build-config@0.20.3", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/pyo3/pyo3" - }, - { - "type": "vcs", - "url": "https://github.com/pyo3/pyo3" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-ffi@0.20.3", - "author": "PyO3 Project and Contributors ", - "name": "pyo3-ffi", - "version": "0.20.3", - "description": "Python-API bindings for the PyO3 ecosystem", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pyo3-ffi@0.20.3", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/pyo3/pyo3" - }, - { - "type": "other", - "url": "python" - }, - { - "type": "vcs", - "url": "https://github.com/pyo3/pyo3" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-macros-backend@0.20.3", - "author": "PyO3 Project and Contributors ", - "name": "pyo3-macros-backend", - "version": "0.20.3", - "description": "Code generation for PyO3 package", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pyo3-macros-backend@0.20.3", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/pyo3/pyo3" - }, - { - "type": "vcs", - "url": "https://github.com/pyo3/pyo3" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3-macros@0.20.3", - "author": "PyO3 Project and Contributors ", - "name": "pyo3-macros", - "version": "0.20.3", - "description": "Proc macros for PyO3 package", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pyo3-macros@0.20.3", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/pyo3/pyo3" - }, - { - "type": "vcs", - "url": "https://github.com/pyo3/pyo3" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#pyo3@0.20.3", - "author": "PyO3 Project and Contributors ", - "name": "pyo3", - "version": "0.20.3", - "description": "Bindings to Python interpreter", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/pyo3@0.20.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/crate/pyo3/" - }, - { - "type": "website", - "url": "https://github.com/pyo3/pyo3" - }, - { - "type": "vcs", - "url": "https://github.com/pyo3/pyo3" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#quote@1.0.45", - "author": "David Tolnay ", - "name": "quote", - "version": "1.0.45", - "description": "Quasi-quoting macro quote!(...)", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/quote@1.0.45", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/quote/" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/quote" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rand@0.8.6", - "author": "The Rand Project Developers, The Rust Project Developers", - "name": "rand", - "version": "0.8.6", - "description": "Random number generators and other randomness functionality. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rand@0.8.6", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/rand" - }, - { - "type": "website", - "url": "https://rust-random.github.io/book" - }, - { - "type": "vcs", - "url": "https://github.com/rust-random/rand" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rand_chacha@0.3.1", - "author": "The Rand Project Developers, The Rust Project Developers, The CryptoCorrosion Contributors", - "name": "rand_chacha", - "version": "0.3.1", - "description": "ChaCha random number generator ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rand_chacha@0.3.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/rand_chacha" - }, - { - "type": "website", - "url": "https://rust-random.github.io/book" - }, - { - "type": "vcs", - "url": "https://github.com/rust-random/rand" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rand_core@0.6.4", - "author": "The Rand Project Developers, The Rust Project Developers", - "name": "rand_core", - "version": "0.6.4", - "description": "Core random number generator traits and tools for implementation. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rand_core@0.6.4", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/rand_core" - }, - { - "type": "website", - "url": "https://rust-random.github.io/book" - }, - { - "type": "vcs", - "url": "https://github.com/rust-random/rand" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#regex-automata@0.4.14", - "author": "The Rust Project Developers, Andrew Gallant ", - "name": "regex-automata", - "version": "0.4.14", - "description": "Automata construction and matching using regular expressions.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/regex-automata@0.4.14", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/regex-automata" - }, - { - "type": "website", - "url": "https://github.com/rust-lang/regex/tree/master/regex-automata" - }, - { - "type": "vcs", - "url": "https://github.com/rust-lang/regex" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#regex-syntax@0.8.10", - "author": "The Rust Project Developers, Andrew Gallant ", - "name": "regex-syntax", - "version": "0.8.10", - "description": "A regular expression parser.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/regex-syntax@0.8.10", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/regex-syntax" - }, - { - "type": "website", - "url": "https://github.com/rust-lang/regex/tree/master/regex-syntax" - }, - { - "type": "vcs", - "url": "https://github.com/rust-lang/regex" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#regex@1.12.3", - "author": "The Rust Project Developers, Andrew Gallant ", - "name": "regex", - "version": "1.12.3", - "description": "An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/regex@1.12.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/regex" - }, - { - "type": "website", - "url": "https://github.com/rust-lang/regex" - }, - { - "type": "vcs", - "url": "https://github.com/rust-lang/regex" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rustix@1.1.4", - "author": "Dan Gohman , Jakub Konka ", - "name": "rustix", - "version": "1.1.4", - "description": "Safe Rust bindings to POSIX/Unix/Linux/Winsock-like syscalls", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/rustix@1.1.4", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/rustix" - }, - { - "type": "vcs", - "url": "https://github.com/bytecodealliance/rustix" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22", - "author": "David Tolnay ", - "name": "rustversion", - "version": "1.0.22", - "description": "Conditional compilation according to rustc compiler version", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/rustversion@1.0.22", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/rustversion" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/rustversion" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#same-file@1.0.6", - "author": "Andrew Gallant ", - "name": "same-file", - "version": "1.0.6", - "description": "A simple crate for determining whether two file paths point to the same file. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" - } - ], - "licenses": [ - { - "expression": "Unlicense OR MIT" - } - ], - "purl": "pkg:cargo/same-file@1.0.6", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/same-file" - }, - { - "type": "website", - "url": "https://github.com/BurntSushi/same-file" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/same-file" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#scopeguard@1.2.0", - "author": "bluss", - "name": "scopeguard", - "version": "1.2.0", - "description": "A RAII scope guard that will run a given closure when it goes out of scope, even if the code between panics (assuming unwinding panic). Defines the macros `defer!`, `defer_on_unwind!`, `defer_on_success!` as shorthands for guards with one of the implemented strategies. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/scopeguard@1.2.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/scopeguard/" - }, - { - "type": "vcs", - "url": "https://github.com/bluss/scopeguard" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#secrecy@0.10.3", - "author": "Tony Arcieri ", - "name": "secrecy", - "version": "0.10.3", - "description": "Wrapper types and traits for secret management which help ensure they aren't accidentally copied, logged, or otherwise exposed (as much as possible), and also ensure secrets are securely wiped from memory when dropped. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/secrecy@0.10.3", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/iqlusioninc/crates/" - }, - { - "type": "vcs", - "url": "https://github.com/iqlusioninc/crates/tree/main/secrecy" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde@1.0.228", - "author": "Erick Tryzelaar , David Tolnay ", - "name": "serde", - "version": "1.0.228", - "description": "A generic serialization/deserialization framework", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/serde@1.0.228", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/serde" - }, - { - "type": "website", - "url": "https://serde.rs" - }, - { - "type": "vcs", - "url": "https://github.com/serde-rs/serde" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde_core@1.0.228", - "author": "Erick Tryzelaar , David Tolnay ", - "name": "serde_core", - "version": "1.0.228", - "description": "Serde traits only, with no support for derive -- use the `serde` crate instead", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/serde_core@1.0.228", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/serde_core" - }, - { - "type": "website", - "url": "https://serde.rs" - }, - { - "type": "vcs", - "url": "https://github.com/serde-rs/serde" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde_derive@1.0.228", - "author": "Erick Tryzelaar , David Tolnay ", - "name": "serde_derive", - "version": "1.0.228", - "description": "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/serde_derive@1.0.228", - "externalReferences": [ - { - "type": "documentation", - "url": "https://serde.rs/derive.html" - }, - { - "type": "website", - "url": "https://serde.rs" - }, - { - "type": "vcs", - "url": "https://github.com/serde-rs/serde" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#serde_json@1.0.149", - "author": "Erick Tryzelaar , David Tolnay ", - "name": "serde_json", - "version": "1.0.149", - "description": "A JSON serialization file format", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/serde_json@1.0.149", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/serde_json" - }, - { - "type": "vcs", - "url": "https://github.com/serde-rs/json" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#sha2@0.10.9", - "author": "RustCrypto Developers", - "name": "sha2", - "version": "0.10.9", - "description": "Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/sha2@0.10.9", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/sha2" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/hashes" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#signal-hook-registry@1.4.8", - "author": "Michal 'vorner' Vaner , Masaki Hara ", - "name": "signal-hook-registry", - "version": "1.4.8", - "description": "Backend crate for signal-hook", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/signal-hook-registry@1.4.8", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/signal-hook-registry" - }, - { - "type": "vcs", - "url": "https://github.com/vorner/signal-hook" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#simd-adler32@0.3.9", - "author": "Marvin Countryman ", - "name": "simd-adler32", - "version": "0.3.9", - "description": "A SIMD-accelerated Adler-32 hash algorithm implementation.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/simd-adler32@0.3.9", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/mcountryman/simd-adler32" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#siphasher@1.0.3", - "author": "Frank Denis ", - "name": "siphasher", - "version": "1.0.3", - "description": "SipHash-2-4, SipHash-1-3 and 128-bit variants in pure Rust", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/siphasher@1.0.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/siphasher" - }, - { - "type": "website", - "url": "https://docs.rs/siphasher" - }, - { - "type": "vcs", - "url": "https://github.com/jedisct1/rust-siphash" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#slug@0.1.6", - "author": "Steven Allen ", - "name": "slug", - "version": "0.1.6", - "description": "Convert a unicode string to a slug", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/slug@0.1.6", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/slug" - }, - { - "type": "website", - "url": "https://github.com/Stebalien/slug-rs" - }, - { - "type": "vcs", - "url": "https://github.com/Stebalien/slug-rs" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#smallvec@1.15.1", - "author": "The Servo Project Developers", - "name": "smallvec", - "version": "1.15.1", - "description": "'Small vector' optimization: store up to a small number of items on the stack", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/smallvec@1.15.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/smallvec/" - }, - { - "type": "vcs", - "url": "https://github.com/servo/rust-smallvec" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#socket2@0.6.3", - "author": "Alex Crichton , Thomas de Zeeuw ", - "name": "socket2", - "version": "0.6.3", - "description": "Utilities for handling networking sockets with a maximal amount of configuration possible intended. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/socket2@0.6.3", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/socket2" - }, - { - "type": "website", - "url": "https://github.com/rust-lang/socket2" - }, - { - "type": "vcs", - "url": "https://github.com/rust-lang/socket2" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#strsim@0.11.1", - "author": "Danny Guo , maxbachmann ", - "name": "strsim", - "version": "0.11.1", - "description": "Implementations of string similarity metrics. Includes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro, Jaro-Winkler, and Sørensen-Dice. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/strsim@0.11.1", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/strsim/" - }, - { - "type": "website", - "url": "https://github.com/rapidfuzz/strsim-rs" - }, - { - "type": "vcs", - "url": "https://github.com/rapidfuzz/strsim-rs" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#syn@2.0.117", - "author": "David Tolnay ", - "name": "syn", - "version": "2.0.117", - "description": "Parser for Rust source code", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/syn@2.0.117", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/syn" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/syn" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#target-lexicon@0.12.16", - "author": "Dan Gohman ", - "name": "target-lexicon", - "version": "0.12.16", - "description": "Targeting utilities for compilers and related tools", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 WITH LLVM-exception" - } - ], - "purl": "pkg:cargo/target-lexicon@0.12.16", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/target-lexicon/" - }, - { - "type": "vcs", - "url": "https://github.com/bytecodealliance/target-lexicon" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#tempfile@3.27.0", - "author": "Steven Allen , The Rust Project Developers, Ashley Mannix , Jason White ", - "name": "tempfile", - "version": "3.27.0", - "description": "A library for managing temporary files and directories.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/tempfile@3.27.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/tempfile" - }, - { - "type": "website", - "url": "https://stebalien.com/projects/tempfile-rs/" - }, - { - "type": "vcs", - "url": "https://github.com/Stebalien/tempfile" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#tera@1.20.1", - "author": "Vincent Prouillet ", - "name": "tera", - "version": "1.20.1", - "description": "Template engine based on Jinja2/Django templates", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e8004bca281f2d32df3bacd59bc67b312cb4c70cea46cbd79dbe8ac5ed206722" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/tera@1.20.1", - "externalReferences": [ - { - "type": "website", - "url": "https://keats.github.io/tera/" - }, - { - "type": "vcs", - "url": "https://github.com/Keats/tera" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#thiserror-impl@1.0.69", - "author": "David Tolnay ", - "name": "thiserror-impl", - "version": "1.0.69", - "description": "Implementation detail of the `thiserror` crate", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/thiserror-impl@1.0.69", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/dtolnay/thiserror" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#thiserror@1.0.69", - "author": "David Tolnay ", - "name": "thiserror", - "version": "1.0.69", - "description": "derive(Error)", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/thiserror@1.0.69", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/thiserror" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/thiserror" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#tokio-macros@2.7.0", - "author": "Tokio Contributors ", - "name": "tokio-macros", - "version": "2.7.0", - "description": "Tokio's proc macros. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/tokio-macros@2.7.0", - "externalReferences": [ - { - "type": "website", - "url": "https://tokio.rs" - }, - { - "type": "vcs", - "url": "https://github.com/tokio-rs/tokio" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#tokio@1.52.3", - "author": "Tokio Contributors ", - "name": "tokio", - "version": "1.52.3", - "description": "An event-driven, non-blocking I/O platform for writing asynchronous I/O backed applications. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/tokio@1.52.3", - "externalReferences": [ - { - "type": "website", - "url": "https://tokio.rs" - }, - { - "type": "vcs", - "url": "https://github.com/tokio-rs/tokio" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#typenum@1.20.0", - "author": "Paho Lurie-Gregg , Andre Bogus ", - "name": "typenum", - "version": "1.20.0", - "description": "Typenum is a Rust library for type-level numbers evaluated at compile time. It currently supports bits, unsigned integers, and signed integers. It also provides a type-level array of type-level numbers, but its implementation is incomplete.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/typenum@1.20.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/typenum" - }, - { - "type": "vcs", - "url": "https://github.com/paholg/typenum" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#ucd-trie@0.1.7", - "author": "Andrew Gallant ", - "name": "ucd-trie", - "version": "0.1.7", - "description": "A trie for storing Unicode codepoint sets and maps. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/ucd-trie@0.1.7", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/ucd-trie" - }, - { - "type": "website", - "url": "https://github.com/BurntSushi/ucd-generate" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/ucd-generate" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-ident@1.0.24", - "author": "David Tolnay ", - "name": "unicode-ident", - "version": "1.0.24", - "description": "Determine whether characters have the XID_Start or XID_Continue properties according to Unicode Standard Annex #31", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - } - ], - "licenses": [ - { - "expression": "(MIT OR Apache-2.0) AND Unicode-3.0" - } - ], - "purl": "pkg:cargo/unicode-ident@1.0.24", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/unicode-ident" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/unicode-ident" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#unicode-segmentation@1.13.2", - "author": "kwantam , Manish Goregaokar ", - "name": "unicode-segmentation", - "version": "1.13.2", - "description": "This crate provides Grapheme Cluster, Word and Sentence boundaries according to Unicode Standard Annex #29 rules. ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/unicode-segmentation@1.13.2", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/unicode-rs/unicode-segmentation" - }, - { - "type": "vcs", - "url": "https://github.com/unicode-rs/unicode-segmentation" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#unindent@0.2.4", - "author": "David Tolnay ", - "name": "unindent", - "version": "0.2.4", - "description": "Remove a column of leading whitespace from a string", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/unindent@0.2.4", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/unindent" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/indoc" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#utf8parse@0.2.2", - "author": "Joe Wilm , Christian Duerr ", - "name": "utf8parse", - "version": "0.2.2", - "description": "Table-driven UTF-8 parser", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/utf8parse@0.2.2", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/utf8parse/" - }, - { - "type": "vcs", - "url": "https://github.com/alacritty/vte" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#version_check@0.9.5", - "author": "Sergio Benitez ", - "name": "version_check", - "version": "0.9.5", - "description": "Tiny crate to check the version of the installed/running rustc.", - "scope": "excluded", - "hashes": [ - { - "alg": "SHA-256", - "content": "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - } - ], - "licenses": [ - { - "expression": "MIT OR Apache-2.0" - } - ], - "purl": "pkg:cargo/version_check@0.9.5", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/version_check/" - }, - { - "type": "vcs", - "url": "https://github.com/SergioBenitez/version_check" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#walkdir@2.5.0", - "author": "Andrew Gallant ", - "name": "walkdir", - "version": "2.5.0", - "description": "Recursively walk a directory.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" - } - ], - "licenses": [ - { - "expression": "Unlicense OR MIT" - } - ], - "purl": "pkg:cargo/walkdir@2.5.0", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/walkdir/" - }, - { - "type": "website", - "url": "https://github.com/BurntSushi/walkdir" - }, - { - "type": "vcs", - "url": "https://github.com/BurntSushi/walkdir" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#zerocopy@0.8.48", - "author": "Joshua Liebow-Feeser , Jack Wrenn ", - "name": "zerocopy", - "version": "0.8.48", - "description": "Zerocopy makes zero-cost memory manipulation effortless. We write \"unsafe\" so you don't have to.", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" - } - ], - "licenses": [ - { - "expression": "BSD-2-Clause OR Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/zerocopy@0.8.48", - "externalReferences": [ - { - "type": "vcs", - "url": "https://github.com/google/zerocopy" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#zeroize@1.8.2", - "author": "The RustCrypto Project Developers", - "name": "zeroize", - "version": "1.8.2", - "description": "Securely clear secrets from memory with a simple trait built on stable Rust primitives which guarantee memory is zeroed using an operation will not be 'optimized away' by the compiler. Uses a portable pure Rust implementation that works everywhere, even WASM! ", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" - } - ], - "licenses": [ - { - "expression": "Apache-2.0 OR MIT" - } - ], - "purl": "pkg:cargo/zeroize@1.8.2", - "externalReferences": [ - { - "type": "website", - "url": "https://github.com/RustCrypto/utils/tree/master/zeroize" - }, - { - "type": "vcs", - "url": "https://github.com/RustCrypto/utils" - } - ] - }, - { - "type": "library", - "bom-ref": "registry+https://github.com/rust-lang/crates.io-index#zmij@1.0.21", - "author": "David Tolnay ", - "name": "zmij", - "version": "1.0.21", - "description": "A double-to-string conversion algorithm based on Schubfach and yy", - "scope": "required", - "hashes": [ - { - "alg": "SHA-256", - "content": "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" - } - ], - "licenses": [ - { - "expression": "MIT" - } - ], - "purl": "pkg:cargo/zmij@1.0.21", - "externalReferences": [ - { - "type": "documentation", - "url": "https://docs.rs/zmij" - }, - { - "type": "vcs", - "url": "https://github.com/dtolnay/zmij" - } - ] - } - ] -} diff --git a/tmp_fixtures.py b/tmp_fixtures.py deleted file mode 100644 index e4959aa..0000000 --- a/tmp_fixtures.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python3 -"""Generate content_edit fixtures using pikepdf.""" - -import pikepdf -from pathlib import Path - - -def create_simple_pdf(content, output_path): - """Create a simple PDF with minimal text content.""" - pdf = pikepdf.new() - pdf.add_blank_page(page_size=(612, 792)) - page = pdf.pages[0] - - content_stream = f""" -BT -/F1 12 Tf -50 700 Td -({content}) Tj -ET -""" - stream = pikepdf.Stream(pdf, content_stream.encode()) - page["/Contents"] = stream - page["/Resources"] = pikepdf.Dictionary({ - "/Font": pikepdf.Dictionary({ - "/F1": pikepdf.Dictionary({ - "/Type": "/Font", - "/Subtype": "/Type1", - "/BaseFont": "/Helvetica" - }) - }) - }) - pdf.save(output_path) - - -def main(): - # Use absolute path since we may run from different directories - import os - script_dir = Path(os.path.dirname(os.path.abspath(__file__))) - fixtures_dir = script_dir / "tests" / "fingerprint" / "fixtures" - - # Generate content_edit_one_glyph fixtures - dir = fixtures_dir / "content_edit_one_glyph" - dir.mkdir(exist_ok=True) - create_simple_pdf("Hello World", dir / "v1.pdf") - create_simple_pdf("Hello Worl", dir / "v2.pdf") - print("Generated content_edit_one_glyph fixtures") - - # Generate content_edit_one_paragraph fixtures - dir = fixtures_dir / "content_edit_one_paragraph" - dir.mkdir(exist_ok=True) - original_text = "This is the first paragraph. " * 5 - variant_text = "This is the second paragraph. " + "This is the first paragraph. " * 4 - create_simple_pdf(original_text, dir / "v1.pdf") - create_simple_pdf(variant_text, dir / "v2.pdf") - print("Generated content_edit_one_paragraph fixtures") - - -if __name__ == "__main__": - main()