awa-ui 0.4.1

Web UI and JSON API for the Awa job queue
Documentation
use serde::Serialize;
use sqlx::PgPool;

use crate::error::ApiError;

#[derive(Clone)]
pub struct AppState {
    pub pool: PgPool,
    pub read_only: bool,
}

impl AppState {
    pub fn new(pool: PgPool, read_only: bool) -> Self {
        Self { pool, read_only }
    }

    pub fn require_writable(&self) -> Result<(), ApiError> {
        if self.read_only {
            return Err(ApiError::read_only());
        }
        Ok(())
    }
}

pub async fn detect_read_only(pool: &PgPool) -> Result<bool, sqlx::Error> {
    let read_only =
        sqlx::query_scalar::<_, bool>("SELECT current_setting('transaction_read_only') = 'on'")
            .fetch_one(pool)
            .await?;
    Ok(read_only)
}

#[derive(Debug, Serialize)]
pub struct Capabilities {
    pub read_only: bool,
}