Skip to content
Snippets Groups Projects
lib.rs 1.67 KiB
Newer Older
  • Learn to ignore specific revisions
  • V02460's avatar
    V02460 committed
    use std::convert::Infallible;
    
    
    use pyo3::prelude::*;
    
    pub mod identifier;
    pub mod matrix_const;
    
    pub mod rendezvous;
    
    lazy_static! {
        static ref LOGGING_HANDLE: ResetHandle = pyo3_log::init();
    }
    
    
    /// Returns the hash of all the rust source files at the time it was compiled.
    ///
    /// Used by python to detect if the rust library is outdated.
    #[pyfunction]
    fn get_rust_file_digest() -> &'static str {
        env!("SYNAPSE_RUST_DIGEST")
    }
    
    
    /// Formats the sum of two numbers as string.
    #[pyfunction]
    #[pyo3(text_signature = "(a, b, /)")]
    fn sum_as_string(a: usize, b: usize) -> PyResult<String> {
        Ok((a + b).to_string())
    }
    
    
    /// Reset the cached logging configuration of pyo3-log to pick up any changes
    /// in the Python logging configuration.
    ///
    #[pyfunction]
    fn reset_logging_config() {
        LOGGING_HANDLE.reset();
    }
    
    
    /// The entry point for defining the Python module.
    #[pymodule]
    
    fn synapse_rust(py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
    
        m.add_function(wrap_pyfunction!(sum_as_string, m)?)?;
    
        m.add_function(wrap_pyfunction!(get_rust_file_digest, m)?)?;
    
        m.add_function(wrap_pyfunction!(reset_logging_config, m)?)?;
    
        acl::register_module(py, m)?;
    
        push::register_module(py, m)?;
    
        events::register_module(py, m)?;
    
        rendezvous::register_module(py, m)?;
    
    V02460's avatar
    V02460 committed
    
    pub trait UnwrapInfallible<T> {
        fn unwrap_infallible(self) -> T;
    }
    
    impl<T> UnwrapInfallible<T> for Result<T, Infallible> {
        fn unwrap_infallible(self) -> T {
            match self {
                Ok(val) => val,
                Err(never) => match never {},
            }
        }
    }