/
germanubis
/
sqlx
Обзор
Документация
Войти
/
germanubis
/
sqlx
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
sqlx-core/src/any/arguments.rs
87 строк
4 KB
iamjpotts
refactor(core): Remove lifetime parameter from Arguments trait (#3960)
14 сен 2025, 07:47
Не верифицирован
14 сен 2025, 07:47
8152689
Код
Авторство
О чём код?
use crate::any::value::AnyValueKind; use crate::any::{Any, AnyTypeInfoKind}; use crate::arguments::Arguments; use crate::encode::{Encode, IsNull}; use crate::error::BoxDynError; use crate::types::Type; use std::sync::Arc; #[derive(Default)] pub struct AnyArguments { #[doc(hidden)] pub values: AnyArgumentBuffer, } impl Arguments for AnyArguments { type Database = Any; fn reserve(&mut self, additional: usize, _size: usize) { self.values.0.reserve(additional); } fn add<'t, T>(&mut self, value: T) -> Result<(), BoxDynError> where T: Encode<'t, Self::Database> + Type<Self::Database>, { let _: IsNull = value.encode(&mut self.values)?; Ok(()) } fn len(&self) -> usize { self.values.0.len() } } #[derive(Default)] pub struct AnyArgumentBuffer(#[doc(hidden)] pub Vec<AnyValueKind>); impl AnyArguments { #[doc(hidden)] pub fn convert_into<'a, A: Arguments>(self) -> Result<A, BoxDynError> where Option<i32>: Type<A::Database> + Encode<'a, A::Database>, Option<bool>: Type<A::Database> + Encode<'a, A::Database>, Option<i16>: Type<A::Database> + Encode<'a, A::Database>, Option<i32>: Type<A::Database> + Encode<'a, A::Database>, Option<i64>: Type<A::Database> + Encode<'a, A::Database>, Option<f32>: Type<A::Database> + Encode<'a, A::Database>, Option<f64>: Type<A::Database> + Encode<'a, A::Database>, Option<String>: Type<A::Database> + Encode<'a, A::Database>, Option<Vec<u8>>: Type<A::Database> + Encode<'a, A::Database>, bool: Type<A::Database> + Encode<'a, A::Database>, i16: Type<A::Database> + Encode<'a, A::Database>, i32: Type<A::Database> + Encode<'a, A::Database>, i64: Type<A::Database> + Encode<'a, A::Database>, f32: Type<A::Database> + Encode<'a, A::Database>, f64: Type<A::Database> + Encode<'a, A::Database>, Arc<String>: Type<A::Database> + Encode<'a, A::Database>, Arc<str>: Type<A::Database> + Encode<'a, A::Database>, Arc<Vec<u8>>: Type<A::Database> + Encode<'a, A::Database>, { let mut out = A::default(); for arg in self.values.0 { match arg { AnyValueKind::Null(AnyTypeInfoKind::Null) => out.add(Option::<i32>::None), AnyValueKind::Null(AnyTypeInfoKind::Bool) => out.add(Option::<bool>::None), AnyValueKind::Null(AnyTypeInfoKind::SmallInt) => out.add(Option::<i16>::None), AnyValueKind::Null(AnyTypeInfoKind::Integer) => out.add(Option::<i32>::None), AnyValueKind::Null(AnyTypeInfoKind::BigInt) => out.add(Option::<i64>::None), AnyValueKind::Null(AnyTypeInfoKind::Real) => out.add(Option::<f64>::None), AnyValueKind::Null(AnyTypeInfoKind::Double) => out.add(Option::<f32>::None), AnyValueKind::Null(AnyTypeInfoKind::Text) => out.add(Option::<String>::None), AnyValueKind::Null(AnyTypeInfoKind::Blob) => out.add(Option::<Vec<u8>>::None), AnyValueKind::Bool(b) => out.add(b), AnyValueKind::SmallInt(i) => out.add(i), AnyValueKind::Integer(i) => out.add(i), AnyValueKind::BigInt(i) => out.add(i), AnyValueKind::Real(r) => out.add(r), AnyValueKind::Double(d) => out.add(d), AnyValueKind::Text(t) => out.add(t), AnyValueKind::TextSlice(t) => out.add(t), AnyValueKind::Blob(b) => out.add(b), }? } Ok(out) } }