Skip to content
Snippets Groups Projects
mod.rs 1.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jason Volk's avatar
    Jason Volk committed
    pub mod bytes;
    
    Jason Volk's avatar
    Jason Volk committed
    pub mod content_disposition;
    pub mod debug;
    pub mod defer;
    
    pub mod hash;
    
    Jason Volk's avatar
    Jason Volk committed
    pub mod html;
    pub mod json;
    
    Jason Volk's avatar
    Jason Volk committed
    pub mod mutex_map;
    
    Jason Volk's avatar
    Jason Volk committed
    pub mod rand;
    
    Jason Volk's avatar
    Jason Volk committed
    pub mod string;
    
    Jason Volk's avatar
    Jason Volk committed
    pub mod sys;
    
    Jason Volk's avatar
    Jason Volk committed
    mod tests;
    
    Jason Volk's avatar
    Jason Volk committed
    pub mod time;
    
    Jason Volk's avatar
    Jason Volk committed
    use std::cmp::{self, Ordering};
    
    Jason Volk's avatar
    Jason Volk committed
    pub use bytes::{increment, u64_from_bytes, u64_from_u8, u64_from_u8x8};
    
    Jason Volk's avatar
    Jason Volk committed
    pub use debug::slice_truncated as debug_slice_truncated;
    
    pub use hash::calculate_hash;
    
    Jason Volk's avatar
    Jason Volk committed
    pub use html::Escape as HtmlEscape;
    pub use json::{deserialize_from_str, to_canonical_object};
    
    pub use mutex_map::{Guard as MutexMapGuard, MutexMap};
    
    Jason Volk's avatar
    Jason Volk committed
    pub use rand::string as random_string;
    pub use string::{str_from_bytes, string_from_bytes};
    
    Jason Volk's avatar
    Jason Volk committed
    pub use sys::available_parallelism;
    
    pub use time::now_millis as millis_since_unix_epoch;
    
    Jason Volk's avatar
    Jason Volk committed
    
    
    Jason Volk's avatar
    Jason Volk committed
    #[inline]
    
    Jason Volk's avatar
    Jason Volk committed
    pub fn clamp<T: Ord>(val: T, min: T, max: T) -> T { cmp::min(cmp::max(val, min), max) }
    
    Jason Volk's avatar
    Jason Volk committed
    
    
    Jason Volk's avatar
    Jason Volk committed
    #[inline]
    pub fn exchange<T: Clone>(state: &mut T, source: T) -> T {
    	let ret = state.clone();
    	*state = source;
    	ret
    }
    
    
    Jason Volk's avatar
    Jason Volk committed
    #[must_use]
    pub fn generate_keypair() -> Vec<u8> {
    
    Jason Volk's avatar
    Jason Volk committed
    	let mut value = rand::string(8).as_bytes().to_vec();
    
    	value.push(0xFF);
    	value.extend_from_slice(
    		&ruma::signatures::Ed25519KeyPair::generate().expect("Ed25519KeyPair generation always works (?)"),
    	);
    	value
    
    timokoesters's avatar
    timokoesters committed
    }
    
    
    Jason Volk's avatar
    Jason Volk committed
    #[allow(clippy::impl_trait_in_params)]
    pub fn common_elements(
    
    	mut iterators: impl Iterator<Item = impl Iterator<Item = Vec<u8>>>, check_order: impl Fn(&[u8], &[u8]) -> Ordering,
    
    ) -> Option<impl Iterator<Item = Vec<u8>>> {
    
    	let first_iterator = iterators.next()?;
    
    	let mut other_iterators = iterators.map(Iterator::peekable).collect::<Vec<_>>();
    
    
    	Some(first_iterator.filter(move |target| {
    		other_iterators.iter_mut().all(|it| {
    			while let Some(element) = it.peek() {
    				match check_order(element, target) {
    					Ordering::Greater => return false, // We went too far
    					Ordering::Equal => return true,    // Element is in both iters
    					Ordering::Less => {
    						// Keep searching
    						it.next();
    					},
    				}
    			}
    			false
    		})
    	}))