disarm 0.10.0

Unicode canonicalization and TR39 confusable analysis: building blocks for text-security pipelines (homoglyph/bidi/zalgo handling) plus standards-based transliteration
Documentation
//! PyO3 shims for `crate::reverse` (Layer-1).
//!
//! `_reverse_transliterate` validates the language at the boundary; Layer 1 / 2
//! take the typed `ReverseLang`.

use pyo3::prelude::*;

/// `reverse_transliterate(text, *, lang) -> str`
#[pyfunction]
#[pyo3(signature = (text, *, lang))]
pub fn _reverse_transliterate(text: &str, lang: &str) -> PyResult<String> {
    if !crate::reverse::supports_reverse(lang) {
        return Err(crate::ErrorRepr::ReverseUnsupportedLang {
            lang: lang.to_owned(),
            available: crate::reverse::reverse_langs().join(", "),
        }
        .into());
    }
    Ok(crate::reverse::reverse_transliterate_impl(text, lang))
}

/// `reverse_langs() -> list[str]`
#[pyfunction]
pub fn _reverse_langs() -> Vec<String> {
    crate::reverse::reverse_langs()
}