athena_rs 3.18.0

Hyper performant polyglot Database driver
Documentation
//! `/schema/columns` response orchestration helpers.
//!
//! This module composes validated column-query input with loader rows and
//! response payload mapping.

use actix_web::HttpResponse;
use serde_json::json;
use sqlx::{Pool, Postgres};

use super::super::catalog_errors::schema_internal_fetch_error;
use super::super::catalog_service_loader_query::load_schema_column_rows;
use super::super::presentation::schema_columns as build_schema_columns_payload;
use super::super::request_params::NormalizedColumnQuery;

/// Builds a `/schema/columns` response for validated table/schema query input.
pub(in super::super) async fn schema_columns_response(
    pool: &Pool<Postgres>,
    query: NormalizedColumnQuery,
) -> HttpResponse {
    let rows = match load_schema_column_rows(pool, &query).await {
        Ok(rows) => rows,
        Err(err) => return schema_internal_fetch_error("columns", &err),
    };

    HttpResponse::Ok().json(json!({ "columns": build_schema_columns_payload(rows) }))
}