kevin
rust cursor2api
2887ce2
use crate::{
app::constant::{
CURSOR_API2_HOST, CURSOR_HOST, DEFAULT_TOKEN_FILE_NAME, DEFAULT_TOKEN_LIST_FILE_NAME,
EMPTY_STRING,
},
common::utils::{parse_ascii_char_from_env, parse_string_from_env},
};
use std::sync::LazyLock;
macro_rules! def_pub_static {
// 基础版本:直接存储 String
($name:ident, $value:expr) => {
pub static $name: LazyLock<String> = LazyLock::new(|| $value);
};
// 环境变量版本
($name:ident, env: $env_key:expr, default: $default:expr) => {
pub static $name: LazyLock<String> =
LazyLock::new(|| parse_string_from_env($env_key, $default).trim().to_string());
};
}
// macro_rules! def_pub_static_getter {
// ($name:ident) => {
// paste::paste! {
// pub fn [<get_ $name:lower>]() -> String {
// (*$name).clone()
// }
// }
// };
// }
def_pub_static!(ROUTE_PREFIX, env: "ROUTE_PREFIX", default: EMPTY_STRING);
def_pub_static!(AUTH_TOKEN, env: "AUTH_TOKEN", default: EMPTY_STRING);
def_pub_static!(TOKEN_FILE, env: "TOKEN_FILE", default: DEFAULT_TOKEN_FILE_NAME);
def_pub_static!(TOKEN_LIST_FILE, env: "TOKEN_LIST_FILE", default: DEFAULT_TOKEN_LIST_FILE_NAME);
def_pub_static!(ROUTE_MODELS_PATH, format!("{}/v1/models", *ROUTE_PREFIX));
def_pub_static!(
ROUTE_CHAT_PATH,
format!("{}/v1/chat/completions", *ROUTE_PREFIX)
);
pub static START_TIME: LazyLock<chrono::DateTime<chrono::Local>> =
LazyLock::new(chrono::Local::now);
pub fn get_start_time() -> chrono::DateTime<chrono::Local> {
*START_TIME
}
def_pub_static!(DEFAULT_INSTRUCTIONS, env: "DEFAULT_INSTRUCTIONS", default: "Respond in Chinese by default");
def_pub_static!(REVERSE_PROXY_HOST, env: "REVERSE_PROXY_HOST", default: EMPTY_STRING);
def_pub_static!(SHARED_AUTH_TOKEN, env: "SHARED_AUTH_TOKEN", default: EMPTY_STRING);
pub static USE_SHARE: LazyLock<bool> = LazyLock::new(|| !SHARED_AUTH_TOKEN.is_empty());
pub static TOKEN_DELIMITER: LazyLock<char> = LazyLock::new(|| {
let delimiter = parse_ascii_char_from_env("TOKEN_DELIMITER", ',');
if delimiter.is_ascii_alphabetic()
|| delimiter.is_ascii_digit()
|| delimiter == '+'
|| delimiter == '/'
{
','
} else {
delimiter
}
});
pub static TOKEN_DELIMITER_LEN: LazyLock<usize> = LazyLock::new(|| TOKEN_DELIMITER.len_utf8());
pub static USE_PROXY: LazyLock<bool> = LazyLock::new(|| !REVERSE_PROXY_HOST.is_empty());
pub static CURSOR_API2_CHAT_URL: LazyLock<String> = LazyLock::new(|| {
let host = if *USE_PROXY {
&*REVERSE_PROXY_HOST
} else {
CURSOR_API2_HOST
};
format!("https://{}/aiserver.v1.AiService/StreamChat", host)
});
pub static CURSOR_API2_STRIPE_URL: LazyLock<String> = LazyLock::new(|| {
let host = if *USE_PROXY {
&*REVERSE_PROXY_HOST
} else {
CURSOR_API2_HOST
};
format!("https://{}/auth/full_stripe_profile", host)
});
pub static CURSOR_USAGE_API_URL: LazyLock<String> = LazyLock::new(|| {
let host = if *USE_PROXY {
&*REVERSE_PROXY_HOST
} else {
CURSOR_HOST
};
format!("https://{}/api/usage", host)
});
pub static CURSOR_USER_API_URL: LazyLock<String> = LazyLock::new(|| {
let host = if *USE_PROXY {
&*REVERSE_PROXY_HOST
} else {
CURSOR_HOST
};
format!("https://{}/api/auth/me", host)
});
// pub static DEBUG: LazyLock<bool> = LazyLock::new(|| parse_bool_from_env("DEBUG", false));
// #[macro_export]
// macro_rules! debug_println {
// ($($arg:tt)*) => {
// if *crate::app::statics::DEBUG {
// println!($($arg)*);
// }
// };
// }