sql_middleware/conversion.rs
1//! Parameter conversion utilities.
2//!
3//! This module provides utilities for converting parameters between different
4//! database-specific formats.
5
6use crate::middleware::{ConversionMode, ParamConverter, RowValues, SqlMiddlewareDbError};
7
8/// Convert a slice of generic `RowValues` into database-specific parameters.
9///
10/// This function uses the `ParamConverter` trait to convert a set of parameters
11/// into the format required by a specific database backend.
12///
13/// # Arguments
14///
15/// * `params` - The slice of `RowValues` to convert
16/// * `mode` - Whether the parameters will be used for a query or execution
17///
18/// # Returns
19///
20/// The converted parameters, or an error if conversion fails
21///
22/// # Errors
23///
24/// Returns `SqlMiddlewareDbError` if:
25/// - The parameter converter doesn't support the specified mode
26/// - Parameter conversion fails for any of the provided values
27///
28/// # Example
29///
30/// ```rust,no_run
31/// use sql_middleware::prelude::*;
32/// use sql_middleware::postgres::Params as PostgresParams;
33/// use sql_middleware::conversion::convert_sql_params;
34///
35/// fn convert_parameters<'a>(values: &'a [RowValues]) -> Result<PostgresParams<'a>, SqlMiddlewareDbError> {
36/// let mode = ConversionMode::Query;
37/// let postgres_params = convert_sql_params::<PostgresParams>(values, mode)?;
38/// Ok(postgres_params)
39/// }
40/// ```
41pub fn convert_sql_params<'a, T: ParamConverter<'a>>(
42 params: &'a [RowValues],
43 mode: ConversionMode,
44) -> Result<T::Converted, SqlMiddlewareDbError> {
45 // Check if the converter supports this mode
46 if !T::supports_mode(mode) {
47 return Err(SqlMiddlewareDbError::ParameterError(format!(
48 "Converter doesn't support mode: {mode:?}"
49 )));
50 }
51 T::convert_sql_params(params, mode)
52}