html-generator 0.0.4

A robust Rust library designed for transforming Markdown into SEO-optimized, accessible HTML. Featuring front matter extraction, custom header processing, table of contents generation, and performance optimization for web projects of any scale.
Documentation
# -----------------------------------------------------------------------------
# HTML Generator - A Rust-based HTML generation and optimization library.
# -----------------------------------------------------------------------------

[package]
name = "html-generator"
version = "0.0.4"
edition = "2021"
rust-version = "1.56.0"
license = "MIT OR Apache-2.0"
description = """
A robust Rust library designed for transforming Markdown into SEO-optimized, accessible HTML. Featuring front matter extraction, custom header processing, table of contents generation, and performance optimization for web projects of any scale.
"""
homepage = "https://html-generator.co/"
documentation = "https://doc.html-generator.co/html_generator/"
repository = "https://github.com/sebastienrousseau/html-generator"
readme = "README.md"
build = "build.rs"

# -----------------------------------------------------------------------------
# Crate Configuration
# -----------------------------------------------------------------------------
categories = [
    "web-programming",
    "command-line-utilities",
    "data-structures",
    "parsing",
    "development-tools"
]

# Keywords for easier discoverability on Crates.io.
keywords = ["html", "web_development", "seo", "html-generator"]

# Excluding unnecessary files from the package
exclude = [
    "/.git/*",                          # Exclude version control files
    "/.github/*",                       # Exclude GitHub workflows
    "/.gitignore",                      # Ignore Git ignore file
    "/.vscode/*"                        # Ignore VSCode settings
]

# Including necessary files in the package
include = [
    "/CONTRIBUTING.md",
    "/LICENSE-APACHE",
    "/LICENSE-MIT",
    "/benches/**",
    "/build.rs",
    "/Cargo.toml",
    "/examples/**",
    "/README.md",
    "/src/**",
]

# -----------------------------------------------------------------------------
# Library Information
# -----------------------------------------------------------------------------

# The library file that contains the main logic for the binary.
[lib]
name = "html_generator"
path = "src/lib.rs"

# -----------------------------------------------------------------------------
# Dependencies
# -----------------------------------------------------------------------------

[dependencies]
# Dependencies required for building and running the project.
cfg = "0.9.0"
comrak = { version = "0.50", features = ["syntect"] }
lazy_static = "1.5.0"
log = "0.4.29"
mdx-gen = "0.0.2"
minify-html = "0.18"
once_cell = "1.21.4"
regex = "1.12.3"
scraper = "0.22.0"
serde_json = "1.0.149"
tempfile = "3.27.0"
thiserror = "2.0.18"
tokio = { version = "1.50.0", features = ["full"] }
uuid = { version = "1.22.0", features = ["v4"] }

# -----------------------------------------------------------------------------
# Build Dependencies
# -----------------------------------------------------------------------------

[build-dependencies]
# Dependencies for build scripts.
version_check = "0.9.5"

# -----------------------------------------------------------------------------
# Development Dependencies
# -----------------------------------------------------------------------------

[dev-dependencies]
# Dependencies required for testing and development.
criterion = "0.5.1"
test-case = "3.3.1"


# -----------------------------------------------------------------------------
# Features
# -----------------------------------------------------------------------------

[features]
# Features that can be enabled or disabled.
default = []
async = []

# -----------------------------------------------------------------------------
# Examples -  cargo run --example <name>
# -----------------------------------------------------------------------------

[[example]]
name = "accessibility"
path = "examples/accessibility_example.rs"

[[example]]
name = "aria"
path = "examples/aria_elements_example.rs"

[[example]]
name = "basic"
path = "examples/basic_example.rs"

[[example]]
name = "comprehensive"
path = "examples/comprehensive_example.rs"

[[example]]
name = "custom"
path = "examples/custom_config_example.rs"

[[example]]
name = "error"
path = "examples/error_example.rs"

[[example]]
name = "generator"
path = "examples/generator_example.rs"

[[example]]
name = "lib"
path = "examples/lib_example.rs"

[[example]]
name = "performance"
path = "examples/performance_example.rs"

[[example]]
name = "seo"
path = "examples/seo_example.rs"

[[example]]
name = "style"
path = "examples/style_example.rs"

[[example]]
name = "utils"
path = "examples/utils_example.rs"

# -----------------------------------------------------------------------------
# Criterion Benchmark
# -----------------------------------------------------------------------------
[[bench]]                         # Benchmarking configuration.
name = "html_benchmark"           # Name of the benchmark.
harness = false                   # Disable the default benchmark harness.

# -----------------------------------------------------------------------------
# Documentation Configuration
# -----------------------------------------------------------------------------
[package.metadata.docs.rs]
# Settings for building and hosting documentation on docs.rs.
all-features = true                         # Build documentation with all features enabled
rustdoc-args = ["--cfg", "docsrs"]          # Arguments passed to `rustdoc` when building the documentation
targets = ["x86_64-unknown-linux-gnu"]      # Default target platform for the docs

# -----------------------------------------------------------------------------
# Linting Configuration
# -----------------------------------------------------------------------------
[lints.rust]
# Linting rules for the project.

## Warnings
missing_copy_implementations = "warn"       # Warn if types can implement `Copy` but don’t
missing_docs = "warn"                       # Warn if public items lack documentation
unstable_features = "warn"                  # Warn on the usage of unstable features
unused_extern_crates = "warn"               # Warn about unused external crates
unused_results = "warn"                     # Warn if a result type is unused (e.g., errors ignored)

## Allowances
bare_trait_objects = "allow"                # Allow bare trait objects (e.g., `Box<dyn Trait>`)
elided_lifetimes_in_paths = "allow"         # Allow lifetimes to be elided in paths
non_camel_case_types = "allow"              # Allow non-camel-case types
non_upper_case_globals = "allow"            # Allow non-uppercase global variables
trivial_bounds = "allow"                    # Allow trivial bounds in trait definitions
unsafe_code = "allow"                       # Allow the usage of unsafe code blocks

## Forbidden
missing_debug_implementations = "forbid"    # Forbid missing `Debug` implementations
non_ascii_idents = "forbid"                 # Forbid non-ASCII identifiers
unreachable_pub = "forbid"                  # Forbid unreachable `pub` items

## Denials
dead_code = "deny"                          # Deny unused, dead code in the project
deprecated_in_future = "deny"               # Deny code that will be deprecated in the future
ellipsis_inclusive_range_patterns = "deny"  # Deny usage of inclusive ranges in match patterns (`...`)
explicit_outlives_requirements = "deny"     # Deny unnecessary lifetime outlives requirements
future_incompatible = { level = "deny", priority = -1 } # Handle future compatibility issues
keyword_idents = { level = "deny", priority = -1 }      # Deny usage of keywords as identifiers
macro_use_extern_crate = "deny"             # Deny macro use of `extern crate`
meta_variable_misuse = "deny"               # Deny misuse of meta variables in macros
missing_fragment_specifier = "deny"         # Deny missing fragment specifiers in macros
noop_method_call = "deny"                   # Deny method calls that have no effect
rust_2018_idioms = { level = "deny", priority = -1 }    # Enforce Rust 2018 idioms
rust_2021_compatibility = { level = "deny", priority = -1 } # Enforce Rust 2021 compatibility
single_use_lifetimes = "deny"               # Deny lifetimes that are used only once
trivial_casts = "deny"                      # Deny trivial casts (e.g., `as` when unnecessary)
trivial_numeric_casts = "deny"              # Deny trivial numeric casts (e.g., `i32` to `i64`)
unused = { level = "deny", priority = -1 }  # Deny unused code, variables, etc.
unused_features = "deny"                    # Deny unused features
unused_import_braces = "deny"               # Deny unnecessary braces around imports
unused_labels = "deny"                      # Deny unused labels in loops
unused_lifetimes = "deny"                   # Deny unused lifetimes
unused_macro_rules = "deny"                 # Deny unused macros
unused_qualifications = "deny"              # Deny unnecessary type qualifications
variant_size_differences = "deny"           # Deny enum variants with significant size differences

# -----------------------------------------------------------------------------
# Clippy Configuration
# -----------------------------------------------------------------------------
[package.metadata.clippy]
# Clippy lint configuration for enhanced code analysis.
warn-lints = [
    "clippy::all",                           # Enable all common Clippy lints
    "clippy::pedantic",                      # Enable pedantic lints for stricter checking
    "clippy::cargo",                         # Enable lints specific to cargo
    "clippy::nursery",                       # Enable experimental lints from Clippy’s nursery
    "clippy::complexity",                    # Warn on code complexity and suggest improvements
    "clippy::correctness",                   # Ensure code correctness, flagging potential issues
    "clippy::perf",                          # Lints that catch performance issues
    "clippy::style",                         # Suggest stylistic improvements
    "clippy::suspicious",                    # Detect suspicious code patterns
    "clippy::module_name_repetitions",       # Avoid repeating module names in the crate name
]

# Customize Clippy to allow certain less critical lints.
allow-lints = [
    "clippy::module_inception",              # Allow modules with the same name as their parents
    "clippy::too_many_arguments",            # Allow functions with more than 7 arguments if justified
    "clippy::missing_docs_in_private_items", # Skip requiring documentation for private items
]

# Enforce specific warnings and errors more strictly.
deny-lints = [
    "clippy::unwrap_used",                   # Deny the use of unwrap to ensure error handling
    "clippy::expect_used",                   # Deny the use of expect to avoid improper error handling
]

# -----------------------------------------------------------------------------
# Profiles
# -----------------------------------------------------------------------------
[profile.dev]
# Development profile configuration for fast builds and debugging.
codegen-units = 256                         # Increase codegen units for faster compilation
debug = true                                # Enable debugging symbols
debug-assertions = true                     # Enable debug assertions
incremental = true                          # Enable incremental compilation
lto = false                                 # Disable link-time optimization for development
opt-level = 0                               # No optimizations in development
overflow-checks = true                      # Enable overflow checks for arithmetic operations
panic = 'unwind'                            # Enable unwinding for panics (useful in development)
rpath = false                               # Disable rpath generation
strip = false                               # Do not strip symbols in development builds

[profile.release]
# Release profile configuration for optimized builds.
codegen-units = 1                           # Reduce codegen units for better performance
debug = false                               # Disable debug symbols in release builds
debug-assertions = false                    # Disable debug assertions
incremental = false                         # Disable incremental compilation for optimal binary size
lto = true                                  # Enable link-time optimization for smaller and faster binaries
opt-level = "z"                             # Optimize for binary size
overflow-checks = false                     # Disable overflow checks for performance
panic = "abort"                             # Use abort on panic for minimal overhead
rpath = false                               # Disable rpath generation
strip = "symbols"                           # Strip symbols for smaller binary size

[profile.test]
# Test profile configuration for debugging and development.
codegen-units = 256                         # Increase codegen units for faster test builds
debug = true                                # Enable debugging symbols for test builds
debug-assertions = true                     # Enable debug assertions for tests
incremental = true                          # Enable incremental compilation for tests
lto = false                                 # Disable link-time optimization during testing
opt-level = 0                               # No optimizations in test builds
overflow-checks = true                      # Enable overflow checks for tests
rpath = false                               # Disable rpath generation
strip = false                               # Do not strip symbols in test builds