noema-actix-webapi 0.1.0

Actix-web backend runtime on Noema (modules, sqlx, UoW, swagger, WebSocket dispatch)
//! Actix-web backend runtime on Noema.
//!
//! Application prelude: [`prelude`]. Infrastructure hatch: [`db::postgres_tx`].

extern crate self as noema_actix_webapi;

pub mod actix;
pub mod background_task;
pub mod bootstrap;
pub mod clock;
pub mod config;
pub mod cors;
pub mod db;
pub mod error;
pub mod hasher;
pub mod http_client;
pub mod logger;
pub mod modules;
pub mod page;
pub mod request;
pub mod uow;
pub mod validation;
pub mod ws;

pub use background_task::{BackgroundTask, background_task, spawn_background_tasks};
pub use bootstrap::{Application, Error, start};
pub use clock::{Clock, SystemClock};
pub use config::{
    ApplicationConfig, CorsConfig, DatabaseConfig, DatabasePoolConfig, Environment,
    HttpClientConfig, HttpConfig, LogConfig,
};
pub use cors::{apply_cors_from, cors, cors_from};
pub use db::PgPool;
pub use error::{
    CODE_DATABASE, CODE_INTERNAL, CODE_UNAUTHORIZED, CODE_UNAVAILABLE, CODE_VALIDATION, ErrorBody,
    HttpError, HttpResult, MappedError, error_response, error_ws_envelope, map_error,
};
pub use hasher::{Argon2Hasher, Hasher};
pub use http_client::{
    HttpClient, HttpClientError, Method, OutboundRequest, OutboundResponse, ReqwestHttpClient,
};
pub use logger::{Logger, TracingLogger};
pub use modules::{Infrastructure, Module, Modules, Presentation};
pub use page::{DEFAULT_PAGE, DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE, PageRequest, PageResult};
pub use request::{
    IDEMPOTENCY_HEADER, RequestContext, RequestError, RequestExtra, RequestScope, request_context,
};
pub use uow::{Tx, UnitOfWork};
pub use validation::{
    ValidationError, push_result, require_email, require_in_range, require_non_empty,
};
pub use ws::{
    Session, SessionContext, SessionHub, SessionId, WsConnection, WsError, WsFanoutMessage,
    connect, on_ws_publish, process_origin,
};

/// Types for application code (no sqlx transaction).
pub mod prelude {
    pub use crate::background_task::{BackgroundTask, background_task, spawn_background_tasks};
    pub use crate::bootstrap::{Application, start};
    pub use crate::clock::Clock;
    pub use crate::config::{
        ApplicationConfig, CorsConfig, DatabasePoolConfig, Environment, HttpClientConfig,
        HttpConfig, LogConfig,
    };
    pub use crate::cors::{cors, cors_from};
    pub use crate::error::{
        ErrorBody, HttpError, HttpResult, MappedError, error_response, error_ws_envelope, map_error,
    };
    pub use crate::hasher::Hasher;
    pub use crate::http_client::{HttpClient, OutboundRequest, OutboundResponse};
    pub use crate::logger::Logger;
    pub use crate::modules::{Infrastructure, Module, Modules, Presentation};
    pub use crate::page::{PageRequest, PageResult};
    pub use crate::request::{
        IDEMPOTENCY_HEADER, RequestContext, RequestError, RequestExtra, RequestScope,
        request_context,
    };
    pub use crate::uow::{Tx, UnitOfWork};
    pub use crate::validation::{
        ValidationError, push_result, require_email, require_in_range, require_non_empty,
    };
    pub use crate::with_transaction;
    pub use crate::ws::{
        Session, SessionContext, SessionHub, SessionId, WsConnection, WsError, WsFanoutMessage,
        connect, on_ws_publish, process_origin,
    };
    pub use noema::resolve;
    pub use noema::send;
}

noema::dependency!(singleton, ApplicationConfig);
noema::dependency!(singleton, PgPool);
noema::dependency!(singleton, SessionHub);
noema::dependency_as!(singleton, UnitOfWork: crate::uow::PsqlUnitOfWork);
noema::dependency_as!(singleton, Logger: crate::logger::TracingLogger);
noema::dependency_as!(singleton, Hasher: crate::hasher::Argon2Hasher);
noema::dependency_as!(singleton, Clock: crate::clock::SystemClock);
noema::dependency_as!(singleton, HttpClient: crate::http_client::ReqwestHttpClient);