pub use crate::Redirect;
pub use crate::paths::PathExt;
#[cfg(feature = "ws")]
pub use autumn_macros::ws;
pub use autumn_macros::{
api_doc, authorize, cached, delete, get, job, jobs, main, oauth2_callback, one_off_tasks,
patch, paths, post, put, routes, scheduled, secured, service, static_get, static_routes, task,
tasks,
};
#[cfg(feature = "mail")]
pub use autumn_macros::{mail_previews, mailer, mailer_preview};
pub use crate::assets::asset_url;
#[cfg(feature = "maud")]
pub use maud::{Markup, PreEscaped, html};
#[cfg(feature = "db")]
pub use crate::db::Db;
pub use crate::extract::Form;
pub use crate::extract::Json;
#[cfg(feature = "multipart")]
pub use crate::extract::Multipart;
pub use crate::extract::Path;
pub use crate::extract::Query;
#[cfg(feature = "flash")]
pub use crate::flash::{Flash, FlashLevel, FlashMessage};
#[cfg(feature = "htmx")]
pub use crate::htmx::HxResponseExt;
#[cfg(feature = "htmx")]
pub use crate::htmx::{HTMX_CSRF_JS_PATH, HTMX_JS_PATH, HxRequest};
#[cfg(feature = "mail")]
pub use crate::mail::{
Mail, MailConfig, MailDeliveryQueue, MailDeliveryQueueHandle, MailError, MailPreview,
MailPreviewError, MailPreviewRegistry, MailTransport, Mailer, SmtpConfig, TlsMode, Transport,
};
pub use crate::sse::{Event, Sse};
pub use crate::task::TaskArgs;
#[cfg(feature = "ws")]
pub use crate::{
Broadcast, BroadcastError, ChannelMessage, ChannelStats, Channels, ChannelsBackend,
LocalChannelsBackend,
};
pub use axum::extract::State;
pub use axum::response::IntoResponse;
pub use http::StatusCode;
pub use crate::audit::{AuditEvent, AuditStatus};
pub use crate::error::{AutumnError, AutumnResult};
pub use crate::pagination::{CursorPage, CursorRequest, Page, PageRequest};
pub use crate::validation::{Valid, ValidateExt, Validated};
pub use validator::Validate;
pub use crate::form::{Changeset, ChangesetForm, IntoChangeset};
#[cfg(feature = "db")]
pub use crate::hooks::{
DraftField, FieldDiff, MutationContext, MutationHooks, MutationOp, Patch, UpdateDraft,
};
pub use crate::auth::ApiToken;
pub use crate::auth::Auth;
pub use crate::auth::RequireApiToken;
pub use crate::session::Session;
pub use crate::authorization::{Policy, PolicyContext, Scope, ScopeQuery, Scoped};
pub use crate::security::CsrfFormField;
pub use crate::security::CsrfToken;
pub use crate::webhook::{
SignedWebhook, WebhookEndpointConfig, WebhookProvider, WebhookReplayBackend,
WebhookReplayConfig,
};
pub use crate::state::AppState;
#[cfg(feature = "i18n")]
pub use crate::i18n::Locale;
#[cfg(feature = "i18n")]
pub use crate::i18n::t;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn prelude_types_are_accessible() {
#[cfg(feature = "db")]
let _state = AppState {
extensions: std::sync::Arc::new(std::sync::RwLock::new(
std::collections::HashMap::new(),
)),
pool: None,
replica_pool: None,
profile: None,
started_at: std::time::Instant::now(),
health_detailed: false,
probes: crate::probe::ProbeState::ready_for_test(),
metrics: crate::middleware::MetricsCollector::new(),
log_levels: crate::actuator::LogLevels::new("info"),
task_registry: crate::actuator::TaskRegistry::new(),
job_registry: crate::actuator::JobRegistry::new(),
config_props: crate::actuator::ConfigProperties::default(),
#[cfg(feature = "ws")]
channels: crate::channels::Channels::new(32),
#[cfg(feature = "ws")]
shutdown: tokio_util::sync::CancellationToken::new(),
policy_registry: crate::authorization::PolicyRegistry::default(),
forbidden_response: crate::authorization::ForbiddenResponse::default(),
auth_session_key: "user_id".to_owned(),
shared_cache: None,
};
#[cfg(not(feature = "db"))]
let _state = AppState {
extensions: std::sync::Arc::new(std::sync::RwLock::new(
std::collections::HashMap::new(),
)),
profile: None,
started_at: std::time::Instant::now(),
health_detailed: false,
probes: crate::probe::ProbeState::ready_for_test(),
metrics: crate::middleware::MetricsCollector::new(),
log_levels: crate::actuator::LogLevels::new("info"),
task_registry: crate::actuator::TaskRegistry::new(),
job_registry: crate::actuator::JobRegistry::new(),
config_props: crate::actuator::ConfigProperties::default(),
#[cfg(feature = "ws")]
channels: crate::channels::Channels::new(32),
#[cfg(feature = "ws")]
shutdown: tokio_util::sync::CancellationToken::new(),
policy_registry: crate::authorization::PolicyRegistry::default(),
forbidden_response: crate::authorization::ForbiddenResponse::default(),
auth_session_key: "user_id".to_owned(),
shared_cache: None,
};
let _err: AutumnResult<()> = Ok(());
}
#[test]
fn json_type_works_through_prelude() {
let json: Json<&str> = Json("ok");
assert_eq!(json.0, "ok");
}
#[test]
fn error_types_work_through_prelude() {
let err = AutumnError::bad_request_msg("test");
let result: AutumnResult<()> = Err(err);
assert!(result.is_err());
}
#[cfg(feature = "maud")]
#[test]
fn maud_types_work_through_prelude() {
let markup: Markup = html! { "hello" };
assert!(markup.into_string().contains("hello"));
}
}