tools.rs: improve docs
This commit is contained in:
		@ -1,5 +1,7 @@
 | 
			
		||||
pub mod static_map;
 | 
			
		||||
 | 
			
		||||
pub mod tools;
 | 
			
		||||
 | 
			
		||||
/// API definition helper
 | 
			
		||||
///
 | 
			
		||||
/// This module contains helper classes to define REST APIs. Method
 | 
			
		||||
@ -10,8 +12,6 @@ pub mod static_map;
 | 
			
		||||
/// hierarchy of API entries, and provides ways to find an API
 | 
			
		||||
/// definition by path.
 | 
			
		||||
 | 
			
		||||
pub mod tools;
 | 
			
		||||
 | 
			
		||||
#[macro_use]
 | 
			
		||||
pub mod api {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								src/tools.rs
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								src/tools.rs
									
									
									
									
									
								
							@ -1,3 +1,7 @@
 | 
			
		||||
//! Tools and utilities
 | 
			
		||||
//!
 | 
			
		||||
//! This is a collection of small and useful tools.
 | 
			
		||||
 | 
			
		||||
use failure::*;
 | 
			
		||||
use nix::unistd;
 | 
			
		||||
use nix::sys::stat;
 | 
			
		||||
@ -13,6 +17,12 @@ use std::os::unix::io::AsRawFd;
 | 
			
		||||
 | 
			
		||||
pub mod timer;
 | 
			
		||||
 | 
			
		||||
/// Directly map a type into a binary buffer. This is mostly useful
 | 
			
		||||
/// for reading structured data from a byte stream (file). You need to
 | 
			
		||||
/// make sure that the buffer location does not change, so please
 | 
			
		||||
/// avoid vec resize while you use such map.
 | 
			
		||||
///
 | 
			
		||||
/// This function panics if the buffer is not large enough.
 | 
			
		||||
pub fn map_struct<T>(buffer: &[u8]) -> Result<&T, Error> {
 | 
			
		||||
    if buffer.len() < ::std::mem::size_of::<T>() {
 | 
			
		||||
        bail!("unable to map struct - buffer too small");
 | 
			
		||||
@ -20,6 +30,12 @@ pub fn map_struct<T>(buffer: &[u8]) -> Result<&T, Error> {
 | 
			
		||||
    Ok(unsafe { & * (buffer.as_ptr() as *const T) })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Directly map a type into a mutable binary buffer. This is mostly
 | 
			
		||||
/// useful for writing structured data into a byte stream (file). You
 | 
			
		||||
/// need to make sure that the buffer location does not change, so
 | 
			
		||||
/// please avoid vec resize while you use such map.
 | 
			
		||||
///
 | 
			
		||||
/// This function panics if the buffer is not large enough.
 | 
			
		||||
pub fn map_struct_mut<T>(buffer: &mut [u8]) -> Result<&mut T, Error> {
 | 
			
		||||
    if buffer.len() < ::std::mem::size_of::<T>() {
 | 
			
		||||
        bail!("unable to map struct - buffer too small");
 | 
			
		||||
@ -27,7 +43,8 @@ pub fn map_struct_mut<T>(buffer: &mut [u8]) -> Result<&mut T, Error> {
 | 
			
		||||
    Ok(unsafe { &mut * (buffer.as_ptr() as *mut T) })
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Atomically write a file. We first create a temporary file, which
 | 
			
		||||
/// is then renamed.
 | 
			
		||||
pub fn file_set_contents<P: AsRef<Path>>(
 | 
			
		||||
    path: P,
 | 
			
		||||
    data: &[u8],
 | 
			
		||||
@ -73,6 +90,8 @@ pub fn file_set_contents<P: AsRef<Path>>(
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Create a file lock using fntl. This function allows you to specify
 | 
			
		||||
/// a timeout if you want to avoid infinite blocking.
 | 
			
		||||
pub fn lock_file<F: AsRawFd>(
 | 
			
		||||
    file: &mut F,
 | 
			
		||||
    exclusive: bool,
 | 
			
		||||
@ -110,6 +129,8 @@ pub fn lock_file<F: AsRawFd>(
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Open or create a lock file (append mode). Then try to
 | 
			
		||||
/// aquire a lock using `lock_file()`.
 | 
			
		||||
pub fn open_file_locked<P: AsRef<Path>>(path: P, timeout: Duration)
 | 
			
		||||
    -> Result<File, Error>
 | 
			
		||||
{
 | 
			
		||||
@ -131,8 +152,9 @@ pub fn open_file_locked<P: AsRef<Path>>(path: P, timeout: Duration)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Note: We cannot implement an Iterator, because Iterators cannot
 | 
			
		||||
// return a borrowed buffer ref (we want zero-copy)
 | 
			
		||||
/// Split a file into equal sized chunks. The last chunk may be
 | 
			
		||||
/// smaller. Note: We cannot implement an `Iterator`, because iterators
 | 
			
		||||
/// cannot return a borrowed buffer ref (we want zero-copy)
 | 
			
		||||
pub fn file_chunker<C, R>(
 | 
			
		||||
    mut file: R,
 | 
			
		||||
    chunk_size: usize,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user