xkv 0.1.53

use global static vars connect redis with fred or kvrocks / 使用全局静态变量通过 fred 连接 redis 或 kvrocks
Documentation
#[macro_export]
macro_rules! conn {
  ($var:ident) => {
    $crate::conn_with_dollar!($var, $);
  };
}

#[macro_export]
macro_rules! conn_with_dollar {
  ($var:ident, $d:tt) => {
    use $crate::fred::prelude::Client;
    #[macro_export]
    macro_rules! $var {
      ($func:ident $d($d args:expr),*) => {
        let _:() = $crate::$var.$func($d($d args),*).await?;
      };
    }

    static_::init!($var: Client {
      use $crate::{conn, log::{warn, info}};

      let mut retry = 0;
      let prefix = stringify!($var);
      loop {
        match conn(prefix).await {
          Ok(r) => {
            if retry > 0 {
              info!("✅ connected redis {prefix}");
            }
            return Ok(r);
          }
          Err(err) => {
            warn!("❌ redis {prefix} ( retry {} ): {}", retry, err);
            if retry > 99 {
              return Err(err);
            }
            retry += 1;
          }
        }
      }
    });
  };
}