rrdcached-client 0.2.0

A RRDCached (RRDtool) client library
Documentation
use crate::errors::RRDCachedClientError;

pub fn check_data_source_name(name: &str) -> Result<(), RRDCachedClientError> {
    if name.is_empty() || name.len() > 64 {
        return Err(RRDCachedClientError::InvalidDataSourceName(
            "name must be between 1 and 64 characters".to_string(),
        ));
    }
    if !name
        .chars()
        .all(|c| c.is_alphanumeric() || c == '_' || c == '-')
    {
        return Err(RRDCachedClientError::InvalidDataSourceName(
            "name must only contain alphanumeric characters and underscores".to_string(),
        ));
    }
    Ok(())
}

pub fn check_rrd_path(name: &str) -> Result<(), RRDCachedClientError> {
    if name.is_empty() || name.len() > 64 {
        return Err(RRDCachedClientError::InvalidCreateDataSerie(
            "name must be between 1 and 64 characters".to_string(),
        ));
    }
    if !name
        .chars()
        .all(|c| c.is_alphanumeric() || c == '_' || c == '-')
    {
        return Err(RRDCachedClientError::InvalidCreateDataSerie(
            "name must only contain alphanumeric characters and underscores".to_string(),
        ));
    }
    Ok(())
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_check_data_source_name() {
        let result = check_data_source_name("test");
        assert!(result.is_ok());

        let result = check_data_source_name("test_");
        assert!(result.is_ok());

        let result = check_data_source_name("test-");
        assert!(result.is_ok());

        let result = check_data_source_name("test_1_a");
        assert!(result.is_ok());

        let result = check_data_source_name("");
        assert!(result.is_err());

        let result = check_data_source_name("a".repeat(65).as_str());
        assert!(result.is_err());

        let result = check_data_source_name("test!");
        assert!(result.is_err());

        let result = check_data_source_name("test\n");
        assert!(result.is_err());

        let result = check_data_source_name("test:GAUGE");
        assert!(result.is_err());
    }

    #[test]
    fn test_check_rrd_path() {
        let result = check_rrd_path("test");
        assert!(result.is_ok());

        let result = check_rrd_path("test_");
        assert!(result.is_ok());

        let result = check_rrd_path("test-");
        assert!(result.is_ok());

        let result = check_rrd_path("test_1_a");
        assert!(result.is_ok());

        let result = check_rrd_path("");
        assert!(result.is_err());

        let result = check_rrd_path("a".repeat(65).as_str());
        assert!(result.is_err());

        let result = check_rrd_path("test!");
        assert!(result.is_err());

        let result = check_rrd_path("test\n");
        assert!(result.is_err());

        let result = check_rrd_path("test.rrd");
        assert!(result.is_err());
    }
}