sqlx_exasol/types/
bool.rs1use 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}