statsig-rust 0.19.1-beta.2604130314

Statsig Rust SDK for usage in multi-user server environments.
Documentation
pub(crate) const LOCK_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(5);

#[macro_export]
macro_rules! unwrap_or_return {
    ($res: expr, $code: expr) => {
        match $res {
            Some(v) => v,
            None => return $code,
        }
    };
}

#[macro_export]
macro_rules! unwrap_or_return_with {
    ($res: expr, $func:expr) => {
        match $res {
            Some(v) => v,
            None => return $func(),
        }
    };
}

#[macro_export]
macro_rules! unwrap_or_else {
    ($res: expr, $else_block:block) => {
        match $res {
            Some(v) => v,
            None => $else_block,
        }
    };
}

#[macro_export]
macro_rules! ok_or_return_with {
    ($res:expr, $func:expr) => {
        match $res {
            Ok(v) => v,
            Err(e) => return $func(e),
        }
    };
}

#[macro_export]
macro_rules! unwrap_or_noop {
    ($res: expr) => {
        match $res {
            Some(v) => v,
            None => return,
        }
    };
}

#[macro_export]
macro_rules! read_lock_or_else {
    ($lock:expr, $else_block:block) => {
        match $lock.try_read_for($crate::macros::LOCK_TIMEOUT) {
            Some(data) => data,
            None => {
                if cfg!(test) {
                    panic!("Failed to acquire read lock");
                } else {
                    $else_block
                }
            }
        }
    };
}

#[macro_export]
macro_rules! read_lock_or_return {
    ($tag: expr, $lock:expr, $code: expr) => {
        match $lock.try_read_for($crate::macros::LOCK_TIMEOUT) {
            Some(data) => data,
            None => {
                if cfg!(test) {
                    panic!("Failed to acquire read lock");
                } else {
                    $crate::log_e!($tag, "Failed to acquire read lock");
                    return $code;
                }
            }
        }
    };
}

#[macro_export]
macro_rules! write_lock_or_else {
    ($lock:expr, $else_block:block) => {
        match $lock.try_write_for($crate::macros::LOCK_TIMEOUT) {
            Some(data) => data,
            None => {
                if cfg!(test) {
                    panic!("Failed to acquire write lock");
                } else {
                    $else_block
                }
            }
        }
    };
}

#[macro_export]
macro_rules! write_lock_or_noop {
    ($tag: expr, $lock:expr) => {
        match $lock.try_write_for($crate::macros::LOCK_TIMEOUT) {
            Some(data) => data,
            None => {
                if cfg!(test) {
                    panic!("Failed to acquire write lock");
                } else {
                    $crate::log_e!($tag, "Failed to acquire write lock");
                    return;
                }
            }
        }
    };
}

#[macro_export]
macro_rules! write_lock_or_return {
    ($tag: expr, $lock:expr, $code: expr) => {
        match $lock.try_write_for($crate::macros::LOCK_TIMEOUT) {
            Some(data) => data,
            None => {
                if cfg!(test) {
                    panic!("Failed to acquire write lock");
                } else {
                    $crate::log_e!($tag, "Failed to acquire write lock");
                    return $code;
                }
            }
        }
    };
}

#[macro_export]
macro_rules! serialize_if_not_none {
    ($state: expr, $field_name: expr, $value: expr) => {
        if let Some(v) = $value {
            $state.serialize_field($field_name, v)?
        }
    };
}