shardline-server 1.0.1

HTTP server boundary, runtime, and operator workflows for Shardline.
Documentation
use crate::ServerError;

pub(crate) const fn checked_add(left: u64, right: u64) -> Result<u64, ServerError> {
    match left.checked_add(right) {
        Some(value) => Ok(value),
        None => Err(ServerError::Overflow),
    }
}

pub(crate) const fn checked_increment(value: u64) -> Result<u64, ServerError> {
    checked_add(value, 1)
}

#[cfg(test)]
mod tests {
    use crate::ServerError;

    #[test]
    fn checked_add_zero_zero() {
        assert!(matches!(super::checked_add(0, 0), Ok(0)));
    }

    #[test]
    fn checked_add_basic() {
        assert!(matches!(super::checked_add(5, 3), Ok(8)));
    }

    #[test]
    fn checked_add_overflow() {
        let result = super::checked_add(u64::MAX, 1);
        assert!(matches!(result, Err(ServerError::Overflow)));
    }

    #[test]
    fn checked_increment_basic() {
        assert!(matches!(super::checked_increment(0), Ok(1)));
    }

    #[test]
    fn checked_increment_overflow() {
        let result = super::checked_increment(u64::MAX);
        assert!(matches!(result, Err(ServerError::Overflow)));
    }
}