/* * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL * * Modified by Coffey Labs in 2026 for INBUXA. */ // inbuxa: composite stores (sharded members, read replicas) nest store // futures deeply enough to pass rustc's default query depth #![recursion_limit = "512"] #![warn(clippy::large_futures)] use std::sync::LazyLock; use imap_proto::{ResponseCode, StatusResponse, protocol::capability::Capability}; pub mod core; pub mod op; static SERVER_GREETING: &str = concat!(types::brand!(), " IMAP4rev2 at your service."); pub(crate) static GREETING_WITH_TLS: LazyLock> = LazyLock::new(|| build_greeting(true, true)); pub(crate) static GREETING_WITH_TLS_LOGIN_DISABLED: LazyLock> = LazyLock::new(|| build_greeting(true, false)); pub(crate) static GREETING_WITHOUT_TLS: LazyLock> = LazyLock::new(|| build_greeting(false, true)); pub(crate) static GREETING_WITHOUT_TLS_LOGIN_DISABLED: LazyLock> = LazyLock::new(|| build_greeting(false, false)); fn build_greeting(offer_tls: bool, allow_auth: bool) -> Vec { StatusResponse::ok(SERVER_GREETING) .with_code(ResponseCode::Capability { capabilities: Capability::all_capabilities(false, offer_tls, allow_auth, 0, 0), }) .into_bytes() } pub struct ImapError;