[package]
edition = "2021"
rust-version = "1.81"
name = "disarm"
version = "0.10.0"
build = "build.rs"
include = [
"/src/**/*",
"/tests/*.rs",
"/tests/common/*.rs",
"/benchmarks/*.rs",
"/examples/*.rs",
"/build.rs",
"/Cargo.toml",
"/README.md",
"/LICENSE",
"/docs/RUST_API.md",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Unicode canonicalization and TR39 confusable analysis: building blocks for text-security pipelines (homoglyph/bidi/zalgo handling) plus standards-based transliteration"
homepage = "https://disarm.dev"
documentation = "https://docs.rs/disarm"
readme = "README.md"
keywords = [
"unicode-security",
"homoglyph",
"confusable",
"transliteration",
"normalization",
]
categories = [
"text-processing",
"internationalization",
"encoding",
]
license = "MIT"
repository = "https://github.com/raeq/disarm"
[package.metadata.docs.rs]
all-features = false
no-default-features = false
rustdoc-args = [
"--cfg",
"docsrs",
]
[features]
default = []
embed-dicts = []
extension-module = [
"dep:pyo3",
"pyo3/extension-module",
]
log = ["dep:log"]
log-content = ["log"]
[lib]
name = "disarm"
crate-type = [
"cdylib",
"lib",
]
path = "src/lib.rs"
[[example]]
name = "perf_workload"
path = "examples/perf_workload.rs"
[[example]]
name = "rust_quickstart"
path = "examples/rust_quickstart.rs"
[[test]]
name = "api_idioms"
path = "tests/api_idioms.rs"
[[test]]
name = "api_pure_rust"
path = "tests/api_pure_rust.rs"
[[test]]
name = "api_surface_contract"
path = "tests/api_surface_contract.rs"
[[test]]
name = "exhaustive_grapheme"
path = "tests/exhaustive_grapheme.rs"
[[test]]
name = "exhaustive_transliterate"
path = "tests/exhaustive_transliterate.rs"
[[test]]
name = "hot_path_guard"
path = "tests/hot_path_guard.rs"
[[test]]
name = "integration_confusables"
path = "tests/integration_confusables.rs"
[[test]]
name = "integration_emoji"
path = "tests/integration_emoji.rs"
[[test]]
name = "integration_slugify"
path = "tests/integration_slugify.rs"
[[test]]
name = "integration_transliterate"
path = "tests/integration_transliterate.rs"
[[test]]
name = "integration_transliterate_abjad"
path = "tests/integration_transliterate_abjad.rs"
[[test]]
name = "integration_transliterate_cjk"
path = "tests/integration_transliterate_cjk.rs"
[[test]]
name = "integration_transliterate_european"
path = "tests/integration_transliterate_european.rs"
[[test]]
name = "integration_transliterate_indic"
path = "tests/integration_transliterate_indic.rs"
[[test]]
name = "integration_whitespace"
path = "tests/integration_whitespace.rs"
[[test]]
name = "log_injection_no_recursion"
path = "tests/log_injection_no_recursion.rs"
[[test]]
name = "logging"
path = "tests/logging.rs"
[[test]]
name = "width_conformance"
path = "tests/width_conformance.rs"
[[bench]]
name = "bench_core"
path = "benchmarks/bench_core.rs"
harness = false
[[bench]]
name = "bench_iai"
path = "benchmarks/bench_iai.rs"
harness = false
[[bench]]
name = "bench_personas"
path = "benchmarks/bench_personas.rs"
harness = false
[dependencies.aho-corasick]
version = "1"
[dependencies.bitflags]
version = "2"
[dependencies.chardetng]
version = "1.0"
[dependencies.encoding_rs]
version = "0.8"
[dependencies.idna]
version = "1"
[dependencies.log]
version = "0.4"
optional = true
[dependencies.phf]
version = "0.13"
[dependencies.pyo3]
version = "0.29.0"
features = ["abi3-py310"]
optional = true
[dependencies.regex]
version = "1"
[dependencies.thiserror]
version = "2.0.18"
[dependencies.unicode-normalization]
version = "0.1"
[dependencies.unicode-segmentation]
version = "1"
[dev-dependencies.criterion]
version = "0.8"
features = ["html_reports"]
[dev-dependencies.iai-callgrind]
version = "0.16.1"
[dev-dependencies.proptest]
version = "1"
[build-dependencies.phf_codegen]
version = "0.13"
[lints.clippy]
cast_lossless = "allow"
cast_possible_truncation = "allow"
cast_sign_loss = "allow"
doc_markdown = "allow"
fn_params_excessive_bools = "allow"
implicit_hasher = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
must_use_candidate = "allow"
needless_pass_by_value = "allow"
return_self_not_must_use = "allow"
similar_names = "allow"
struct_excessive_bools = "allow"
too_many_arguments = "allow"
too_many_lines = "allow"
type_complexity = "allow"
unnecessary_wraps = "allow"
unused_self = "allow"
used_underscore_items = "allow"
[lints.clippy.all]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1
[lints.rust]
missing_docs = "warn"
unsafe_code = "forbid"
[profile.release]
lto = true
codegen-units = 1
strip = true