sqlx_exasol/types/
bool.rs

1use serde::Deserialize;
2use sqlx_core::{
3    decode::Decode,
4    encode::{Encode, IsNull},
5    error::BoxDynError,
6    types::Type,
7};
8
9use crate::{
10    arguments::ExaBuffer,
11    database::Exasol,
12    type_info::{ExaDataType, ExaTypeInfo},
13    value::ExaValueRef,
14};
15
16impl Type<Exasol> for bool {
17    fn type_info() -> ExaTypeInfo {
18        ExaDataType::Boolean.into()
19    }
20}
21
22impl Encode<'_, Exasol> for bool {
23    fn encode_by_ref(&self, buf: &mut ExaBuffer) -> Result<IsNull, BoxDynError> {
24        buf.append(self)?;
25        Ok(IsNull::No)
26    }
27
28    fn produces(&self) -> Option<ExaTypeInfo> {
29        Some(ExaDataType::Boolean.into())
30    }
31
32    fn size_hint(&self) -> usize {
33        if *self {
34            stringify!(true).len()
35        } else {
36            stringify!(false).len()
37        }
38    }
39}
40
41impl Decode<'_, Exasol> for bool {
42    fn decode(value: ExaValueRef<'_>) -> Result<Self, BoxDynError> {
43        <Self as Deserialize>::deserialize(value.value).map_err(From::from)
44    }
45}