pooly 0.2.1

A protobuf to Postgres adapter + connection pooling middleware.
Documentation
use std::sync::Arc;

use ring::rand::{SecureRandom, SystemRandom};

use crate::models::errors::SecretsError;

pub struct VecGenerator {

    sys_random: Arc<SystemRandom>

}

impl VecGenerator {

    pub fn new(sys_random: Arc<SystemRandom>) -> VecGenerator {
        VecGenerator {
            sys_random
        }
    }

    pub fn generate_random(&self,
                           size: usize) -> Result<Vec<u8>, SecretsError> {
        let mut value = vec![0; size];

        self.sys_random.fill(&mut value)?;

        Ok(value)
    }

}

#[cfg(test)]
mod tests {
    use std::sync::Arc;

    use ring::rand::SystemRandom;

    use crate::services::secrets::random::VecGenerator;

    #[test]
    fn test_generates_random_vec_with_expected_size() {
        let generator = VecGenerator::new(Arc::new(SystemRandom::new()));

        assert!(generator.generate_random(0).unwrap().is_empty());
        assert_eq!(generator.generate_random(1).unwrap().len(), 1);
        assert_eq!(generator.generate_random(10).unwrap().len(), 10);
    }

}