CoolFace
Apppublic

devin15/cursor2api-rust

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
lazy.rs121 linesDownload Raw Back to app
1use crate::{2    app::constant::{3        CURSOR_API2_HOST, CURSOR_HOST, DEFAULT_TOKEN_FILE_NAME, DEFAULT_TOKEN_LIST_FILE_NAME,4        EMPTY_STRING,5    },6    common::utils::{parse_ascii_char_from_env, parse_string_from_env},7};8use std::sync::LazyLock;9 10macro_rules! def_pub_static {11    // 基础版本:直接存储 String12    ($name:ident, $value:expr) => {13        pub static $name: LazyLock<String> = LazyLock::new(|| $value);14    };15 16    // 环境变量版本17    ($name:ident, env: $env_key:expr, default: $default:expr) => {18        pub static $name: LazyLock<String> =19            LazyLock::new(|| parse_string_from_env($env_key, $default).trim().to_string());20    };21}22 23// macro_rules! def_pub_static_getter {24//     ($name:ident) => {25//         paste::paste! {26//             pub fn [<get_ $name:lower>]() -> String {27//                 (*$name).clone()28//             }29//         }30//     };31// }32 33def_pub_static!(ROUTE_PREFIX, env: "ROUTE_PREFIX", default: EMPTY_STRING);34def_pub_static!(AUTH_TOKEN, env: "AUTH_TOKEN", default: EMPTY_STRING);35def_pub_static!(TOKEN_FILE, env: "TOKEN_FILE", default: DEFAULT_TOKEN_FILE_NAME);36def_pub_static!(TOKEN_LIST_FILE, env: "TOKEN_LIST_FILE", default: DEFAULT_TOKEN_LIST_FILE_NAME);37def_pub_static!(ROUTE_MODELS_PATH, format!("{}/v1/models", *ROUTE_PREFIX));38def_pub_static!(39    ROUTE_CHAT_PATH,40    format!("{}/v1/chat/completions", *ROUTE_PREFIX)41);42 43pub static START_TIME: LazyLock<chrono::DateTime<chrono::Local>> =44    LazyLock::new(chrono::Local::now);45 46pub fn get_start_time() -> chrono::DateTime<chrono::Local> {47    *START_TIME48}49 50def_pub_static!(DEFAULT_INSTRUCTIONS, env: "DEFAULT_INSTRUCTIONS", default: "Respond in Chinese by default");51 52def_pub_static!(REVERSE_PROXY_HOST, env: "REVERSE_PROXY_HOST", default: EMPTY_STRING);53 54def_pub_static!(SHARED_AUTH_TOKEN, env: "SHARED_AUTH_TOKEN", default: EMPTY_STRING);55 56pub static USE_SHARE: LazyLock<bool> = LazyLock::new(|| !SHARED_AUTH_TOKEN.is_empty());57 58pub static TOKEN_DELIMITER: LazyLock<char> = LazyLock::new(|| {59    let delimiter = parse_ascii_char_from_env("TOKEN_DELIMITER", ',');60    if delimiter.is_ascii_alphabetic()61        || delimiter.is_ascii_digit()62        || delimiter == '+'63        || delimiter == '/'64    {65        ','66    } else {67        delimiter68    }69});70 71pub static TOKEN_DELIMITER_LEN: LazyLock<usize> = LazyLock::new(|| TOKEN_DELIMITER.len_utf8());72 73pub static USE_PROXY: LazyLock<bool> = LazyLock::new(|| !REVERSE_PROXY_HOST.is_empty());74 75pub static CURSOR_API2_CHAT_URL: LazyLock<String> = LazyLock::new(|| {76    let host = if *USE_PROXY {77        &*REVERSE_PROXY_HOST78    } else {79        CURSOR_API2_HOST80    };81    format!("https://{}/aiserver.v1.AiService/StreamChat", host)82});83 84pub static CURSOR_API2_STRIPE_URL: LazyLock<String> = LazyLock::new(|| {85    let host = if *USE_PROXY {86        &*REVERSE_PROXY_HOST87    } else {88        CURSOR_API2_HOST89    };90    format!("https://{}/auth/full_stripe_profile", host)91});92 93pub static CURSOR_USAGE_API_URL: LazyLock<String> = LazyLock::new(|| {94    let host = if *USE_PROXY {95        &*REVERSE_PROXY_HOST96    } else {97        CURSOR_HOST98    };99    format!("https://{}/api/usage", host)100});101 102pub static CURSOR_USER_API_URL: LazyLock<String> = LazyLock::new(|| {103    let host = if *USE_PROXY {104        &*REVERSE_PROXY_HOST105    } else {106        CURSOR_HOST107    };108    format!("https://{}/api/auth/me", host)109});110 111// pub static DEBUG: LazyLock<bool> = LazyLock::new(|| parse_bool_from_env("DEBUG", false));112 113// #[macro_export]114// macro_rules! debug_println {115//     ($($arg:tt)*) => {116//         if *crate::app::statics::DEBUG {117//             println!($($arg)*);118//         }119//     };120// }121