fossil_delta/
lib.rs

1use fossil_delta::{delta, deltainv};
2use pyo3::prelude::*;
3
4#[pymodule]
5fn fossil_delta(_py: Python, m: &PyModule) -> PyResult<()> {
6    /// Calculates delta between two given strings a and b
7    ///
8    /// >>> d = fossil_delta.delta(a, b)
9    /// >>> s = fossil_delta.deltainv(b, d)
10    /// >>> assert s == a
11    ///
12    #[pyfn(m, "delta")]
13    fn py_delta(py: Python, a: &str, b: &str) -> PyResult<PyObject> {
14        let res = delta(a, b);
15        Ok(res.to_object(py))
16    }
17    /// Applies delta tp given text and returns changed text
18    ///
19    /// >>> d = fossil_delta.delta(a, b)
20    /// >>> s = fossil_delta.deltainv(b, d)
21    /// >>> assert s == a
22    ///
23    #[pyfn(m, "deltainv")]
24    fn py_deltainv(py: Python, b: &str, d: PyObject) -> PyResult<String> {
25        let dv: Vec<u8> = d.extract(py).unwrap();
26        String::from_utf8(deltainv(b, &dv))
27            .map_err(|e| e.into())
28    }
29    Ok(())
30}