sqlx-xugu 0.8.8

Xugu driver implementation for SQLx. Not for direct use; see the `sqlx` crate for details.
Documentation
use crate::error::Error;
use crate::io::{AsyncStreamExt, StreamDecode};
use crate::protocol::text::ColumnType;
use crate::protocol::ServerContext;

#[derive(Debug)]
#[allow(unused)]
pub(crate) struct ParameterDef {
    pub(crate) param_name: String,
    pub(crate) ordinal: i32,
    pub(crate) r#type: ColumnType,
    pub(crate) precision: i32,
    pub(crate) scale: i32,
}

impl StreamDecode<ServerContext> for ParameterDef {
    async fn decode_with<S: AsyncStreamExt>(
        stream: &mut S,
        _: ServerContext,
    ) -> Result<Self, Error> {
        let param_name = stream.read_str().await?;
        let ordinal = stream.read_i32().await? + 1;
        let type_id = stream.read_i32().await?;
        let precision_scale = stream.read_i32().await?;

        let r#type = ColumnType::try_from_i32(type_id)?;
        let precision;
        let scale;
        if r#type == ColumnType::NUMERIC {
            precision = precision_scale >> 16;
            scale = precision_scale & 0x0000ffff;
        } else {
            precision = precision_scale;
            scale = 0;
        }

        Ok(Self {
            param_name,
            ordinal,
            r#type,
            precision,
            scale,
        })
    }
}