1use super::*;
2
3mod rdbms_types {
4 use super::*;
5 use spin::postgres3_0_0::postgres as pg3;
6 use spin::postgres4_0_0::postgres as pg4;
7
8 impl From<v2::rdbms_types::Column> for v1::rdbms_types::Column {
9 fn from(value: v2::rdbms_types::Column) -> Self {
10 v1::rdbms_types::Column {
11 name: value.name,
12 data_type: value.data_type.into(),
13 }
14 }
15 }
16
17 impl From<pg4::Column> for v1::rdbms_types::Column {
18 fn from(value: spin::postgres4_0_0::postgres::Column) -> Self {
19 v1::rdbms_types::Column {
20 name: value.name,
21 data_type: value.data_type.into(),
22 }
23 }
24 }
25
26 impl From<pg4::Column> for v2::rdbms_types::Column {
27 fn from(value: pg4::Column) -> Self {
28 v2::rdbms_types::Column {
29 name: value.name,
30 data_type: value.data_type.into(),
31 }
32 }
33 }
34
35 impl From<pg4::Column> for pg3::Column {
36 fn from(value: pg4::Column) -> Self {
37 pg3::Column {
38 name: value.name,
39 data_type: value.data_type.into(),
40 }
41 }
42 }
43
44 impl From<v2::rdbms_types::DbValue> for v1::rdbms_types::DbValue {
45 fn from(value: v2::rdbms_types::DbValue) -> v1::rdbms_types::DbValue {
46 match value {
47 v2::rdbms_types::DbValue::Boolean(b) => v1::rdbms_types::DbValue::Boolean(b),
48 v2::rdbms_types::DbValue::Int8(i) => v1::rdbms_types::DbValue::Int8(i),
49 v2::rdbms_types::DbValue::Int16(i) => v1::rdbms_types::DbValue::Int16(i),
50 v2::rdbms_types::DbValue::Int32(i) => v1::rdbms_types::DbValue::Int32(i),
51 v2::rdbms_types::DbValue::Int64(i) => v1::rdbms_types::DbValue::Int64(i),
52 v2::rdbms_types::DbValue::Uint8(j) => v1::rdbms_types::DbValue::Uint8(j),
53 v2::rdbms_types::DbValue::Uint16(u) => v1::rdbms_types::DbValue::Uint16(u),
54 v2::rdbms_types::DbValue::Uint32(u) => v1::rdbms_types::DbValue::Uint32(u),
55 v2::rdbms_types::DbValue::Uint64(u) => v1::rdbms_types::DbValue::Uint64(u),
56 v2::rdbms_types::DbValue::Floating32(r) => v1::rdbms_types::DbValue::Floating32(r),
57 v2::rdbms_types::DbValue::Floating64(r) => v1::rdbms_types::DbValue::Floating64(r),
58 v2::rdbms_types::DbValue::Str(s) => v1::rdbms_types::DbValue::Str(s),
59 v2::rdbms_types::DbValue::Binary(b) => v1::rdbms_types::DbValue::Binary(b),
60 v2::rdbms_types::DbValue::DbNull => v1::rdbms_types::DbValue::DbNull,
61 v2::rdbms_types::DbValue::Unsupported => v1::rdbms_types::DbValue::Unsupported,
62 }
63 }
64 }
65
66 impl From<pg4::DbValue> for v1::rdbms_types::DbValue {
67 fn from(value: pg4::DbValue) -> v1::rdbms_types::DbValue {
68 match value {
69 pg4::DbValue::Boolean(b) => v1::rdbms_types::DbValue::Boolean(b),
70 pg4::DbValue::Int8(i) => v1::rdbms_types::DbValue::Int8(i),
71 pg4::DbValue::Int16(i) => v1::rdbms_types::DbValue::Int16(i),
72 pg4::DbValue::Int32(i) => v1::rdbms_types::DbValue::Int32(i),
73 pg4::DbValue::Int64(i) => v1::rdbms_types::DbValue::Int64(i),
74 pg4::DbValue::Floating32(r) => v1::rdbms_types::DbValue::Floating32(r),
75 pg4::DbValue::Floating64(r) => v1::rdbms_types::DbValue::Floating64(r),
76 pg4::DbValue::Str(s) => v1::rdbms_types::DbValue::Str(s),
77 pg4::DbValue::Binary(b) => v1::rdbms_types::DbValue::Binary(b),
78 pg4::DbValue::DbNull => v1::rdbms_types::DbValue::DbNull,
79 pg4::DbValue::Unsupported(_) => v1::rdbms_types::DbValue::Unsupported,
80 _ => v1::rdbms_types::DbValue::Unsupported,
81 }
82 }
83 }
84
85 impl From<pg4::DbValue> for v2::rdbms_types::DbValue {
86 fn from(value: pg4::DbValue) -> v2::rdbms_types::DbValue {
87 match value {
88 pg4::DbValue::Boolean(b) => v2::rdbms_types::DbValue::Boolean(b),
89 pg4::DbValue::Int8(i) => v2::rdbms_types::DbValue::Int8(i),
90 pg4::DbValue::Int16(i) => v2::rdbms_types::DbValue::Int16(i),
91 pg4::DbValue::Int32(i) => v2::rdbms_types::DbValue::Int32(i),
92 pg4::DbValue::Int64(i) => v2::rdbms_types::DbValue::Int64(i),
93 pg4::DbValue::Floating32(r) => v2::rdbms_types::DbValue::Floating32(r),
94 pg4::DbValue::Floating64(r) => v2::rdbms_types::DbValue::Floating64(r),
95 pg4::DbValue::Str(s) => v2::rdbms_types::DbValue::Str(s),
96 pg4::DbValue::Binary(b) => v2::rdbms_types::DbValue::Binary(b),
97 pg4::DbValue::DbNull => v2::rdbms_types::DbValue::DbNull,
98 pg4::DbValue::Unsupported(_) => v2::rdbms_types::DbValue::Unsupported,
99 _ => v2::rdbms_types::DbValue::Unsupported,
100 }
101 }
102 }
103
104 impl From<pg4::DbValue> for pg3::DbValue {
105 fn from(value: pg4::DbValue) -> pg3::DbValue {
106 match value {
107 pg4::DbValue::Boolean(b) => pg3::DbValue::Boolean(b),
108 pg4::DbValue::Int8(i) => pg3::DbValue::Int8(i),
109 pg4::DbValue::Int16(i) => pg3::DbValue::Int16(i),
110 pg4::DbValue::Int32(i) => pg3::DbValue::Int32(i),
111 pg4::DbValue::Int64(i) => pg3::DbValue::Int64(i),
112 pg4::DbValue::Floating32(r) => pg3::DbValue::Floating32(r),
113 pg4::DbValue::Floating64(r) => pg3::DbValue::Floating64(r),
114 pg4::DbValue::Str(s) => pg3::DbValue::Str(s),
115 pg4::DbValue::Binary(b) => pg3::DbValue::Binary(b),
116 pg4::DbValue::Date(d) => pg3::DbValue::Date(d),
117 pg4::DbValue::Datetime(dt) => pg3::DbValue::Datetime(dt),
118 pg4::DbValue::Time(t) => pg3::DbValue::Time(t),
119 pg4::DbValue::Timestamp(t) => pg3::DbValue::Timestamp(t),
120 pg4::DbValue::Uuid(_) => pg3::DbValue::Unsupported,
121 pg4::DbValue::Jsonb(_) => pg3::DbValue::Unsupported,
122 pg4::DbValue::Decimal(_) => pg3::DbValue::Unsupported,
123 pg4::DbValue::RangeInt32(_) => pg3::DbValue::Unsupported,
124 pg4::DbValue::RangeInt64(_) => pg3::DbValue::Unsupported,
125 pg4::DbValue::RangeDecimal(_) => pg3::DbValue::Unsupported,
126 pg4::DbValue::ArrayInt32(_) => pg3::DbValue::Unsupported,
127 pg4::DbValue::ArrayInt64(_) => pg3::DbValue::Unsupported,
128 pg4::DbValue::ArrayDecimal(_) => pg3::DbValue::Unsupported,
129 pg4::DbValue::ArrayStr(_) => pg3::DbValue::Unsupported,
130 pg4::DbValue::Interval(_) => pg3::DbValue::Unsupported,
131 pg4::DbValue::DbNull => pg3::DbValue::DbNull,
132 pg4::DbValue::Unsupported(_) => pg3::DbValue::Unsupported,
133 }
134 }
135 }
136
137 impl From<pg4::DbDataType> for v1::rdbms_types::DbDataType {
138 fn from(value: pg4::DbDataType) -> v1::rdbms_types::DbDataType {
139 match value {
140 pg4::DbDataType::Boolean => v1::rdbms_types::DbDataType::Boolean,
141 pg4::DbDataType::Int8 => v1::rdbms_types::DbDataType::Int8,
142 pg4::DbDataType::Int16 => v1::rdbms_types::DbDataType::Int16,
143 pg4::DbDataType::Int32 => v1::rdbms_types::DbDataType::Int32,
144 pg4::DbDataType::Int64 => v1::rdbms_types::DbDataType::Int64,
145 pg4::DbDataType::Floating32 => v1::rdbms_types::DbDataType::Floating32,
146 pg4::DbDataType::Floating64 => v1::rdbms_types::DbDataType::Floating64,
147 pg4::DbDataType::Str => v1::rdbms_types::DbDataType::Str,
148 pg4::DbDataType::Binary => v1::rdbms_types::DbDataType::Binary,
149 pg4::DbDataType::Other(_) => v1::rdbms_types::DbDataType::Other,
150 _ => v1::rdbms_types::DbDataType::Other,
151 }
152 }
153 }
154
155 impl From<pg4::DbDataType> for v2::rdbms_types::DbDataType {
156 fn from(value: pg4::DbDataType) -> v2::rdbms_types::DbDataType {
157 match value {
158 pg4::DbDataType::Boolean => v2::rdbms_types::DbDataType::Boolean,
159 pg4::DbDataType::Int8 => v2::rdbms_types::DbDataType::Int8,
160 pg4::DbDataType::Int16 => v2::rdbms_types::DbDataType::Int16,
161 pg4::DbDataType::Int32 => v2::rdbms_types::DbDataType::Int32,
162 pg4::DbDataType::Int64 => v2::rdbms_types::DbDataType::Int64,
163 pg4::DbDataType::Floating32 => v2::rdbms_types::DbDataType::Floating32,
164 pg4::DbDataType::Floating64 => v2::rdbms_types::DbDataType::Floating64,
165 pg4::DbDataType::Str => v2::rdbms_types::DbDataType::Str,
166 pg4::DbDataType::Binary => v2::rdbms_types::DbDataType::Binary,
167 pg4::DbDataType::Other(_) => v2::rdbms_types::DbDataType::Other,
168 _ => v2::rdbms_types::DbDataType::Other,
169 }
170 }
171 }
172
173 impl From<pg4::DbDataType> for pg3::DbDataType {
174 fn from(value: pg4::DbDataType) -> pg3::DbDataType {
175 match value {
176 pg4::DbDataType::Boolean => pg3::DbDataType::Boolean,
177 pg4::DbDataType::Int8 => pg3::DbDataType::Int8,
178 pg4::DbDataType::Int16 => pg3::DbDataType::Int16,
179 pg4::DbDataType::Int32 => pg3::DbDataType::Int32,
180 pg4::DbDataType::Int64 => pg3::DbDataType::Int64,
181 pg4::DbDataType::Floating32 => pg3::DbDataType::Floating32,
182 pg4::DbDataType::Floating64 => pg3::DbDataType::Floating64,
183 pg4::DbDataType::Str => pg3::DbDataType::Str,
184 pg4::DbDataType::Binary => pg3::DbDataType::Binary,
185 pg4::DbDataType::Date => pg3::DbDataType::Date,
186 pg4::DbDataType::Datetime => pg3::DbDataType::Datetime,
187 pg4::DbDataType::Time => pg3::DbDataType::Time,
188 pg4::DbDataType::Timestamp => pg3::DbDataType::Timestamp,
189 pg4::DbDataType::Uuid => pg3::DbDataType::Other,
190 pg4::DbDataType::Jsonb => pg3::DbDataType::Other,
191 pg4::DbDataType::Decimal => pg3::DbDataType::Other,
192 pg4::DbDataType::RangeInt32 => pg3::DbDataType::Other,
193 pg4::DbDataType::RangeInt64 => pg3::DbDataType::Other,
194 pg4::DbDataType::RangeDecimal => pg3::DbDataType::Other,
195 pg4::DbDataType::ArrayInt32 => pg3::DbDataType::Other,
196 pg4::DbDataType::ArrayInt64 => pg3::DbDataType::Other,
197 pg4::DbDataType::ArrayDecimal => pg3::DbDataType::Other,
198 pg4::DbDataType::ArrayStr => pg3::DbDataType::Other,
199 pg4::DbDataType::Interval => pg3::DbDataType::Other,
200 pg4::DbDataType::Other(_) => pg3::DbDataType::Other,
201 }
202 }
203 }
204
205 impl From<v2::rdbms_types::DbDataType> for v1::rdbms_types::DbDataType {
206 fn from(value: v2::rdbms_types::DbDataType) -> v1::rdbms_types::DbDataType {
207 match value {
208 v2::rdbms_types::DbDataType::Boolean => v1::rdbms_types::DbDataType::Boolean,
209 v2::rdbms_types::DbDataType::Int8 => v1::rdbms_types::DbDataType::Int8,
210 v2::rdbms_types::DbDataType::Int16 => v1::rdbms_types::DbDataType::Int16,
211 v2::rdbms_types::DbDataType::Int32 => v1::rdbms_types::DbDataType::Int32,
212 v2::rdbms_types::DbDataType::Int64 => v1::rdbms_types::DbDataType::Int64,
213 v2::rdbms_types::DbDataType::Uint8 => v1::rdbms_types::DbDataType::Uint8,
214 v2::rdbms_types::DbDataType::Uint16 => v1::rdbms_types::DbDataType::Uint16,
215 v2::rdbms_types::DbDataType::Uint32 => v1::rdbms_types::DbDataType::Uint32,
216 v2::rdbms_types::DbDataType::Uint64 => v1::rdbms_types::DbDataType::Uint64,
217 v2::rdbms_types::DbDataType::Floating32 => v1::rdbms_types::DbDataType::Floating32,
218 v2::rdbms_types::DbDataType::Floating64 => v1::rdbms_types::DbDataType::Floating64,
219 v2::rdbms_types::DbDataType::Str => v1::rdbms_types::DbDataType::Str,
220 v2::rdbms_types::DbDataType::Binary => v1::rdbms_types::DbDataType::Binary,
221 v2::rdbms_types::DbDataType::Other => v1::rdbms_types::DbDataType::Other,
222 }
223 }
224 }
225
226 impl From<v1::rdbms_types::ParameterValue> for v2::rdbms_types::ParameterValue {
227 fn from(value: v1::rdbms_types::ParameterValue) -> v2::rdbms_types::ParameterValue {
228 match value {
229 v1::rdbms_types::ParameterValue::Boolean(b) => {
230 v2::rdbms_types::ParameterValue::Boolean(b)
231 }
232 v1::rdbms_types::ParameterValue::Int8(i) => {
233 v2::rdbms_types::ParameterValue::Int8(i)
234 }
235 v1::rdbms_types::ParameterValue::Int16(i) => {
236 v2::rdbms_types::ParameterValue::Int16(i)
237 }
238 v1::rdbms_types::ParameterValue::Int32(i) => {
239 v2::rdbms_types::ParameterValue::Int32(i)
240 }
241 v1::rdbms_types::ParameterValue::Int64(i) => {
242 v2::rdbms_types::ParameterValue::Int64(i)
243 }
244 v1::rdbms_types::ParameterValue::Uint8(u) => {
245 v2::rdbms_types::ParameterValue::Uint8(u)
246 }
247 v1::rdbms_types::ParameterValue::Uint16(u) => {
248 v2::rdbms_types::ParameterValue::Uint16(u)
249 }
250 v1::rdbms_types::ParameterValue::Uint32(u) => {
251 v2::rdbms_types::ParameterValue::Uint32(u)
252 }
253 v1::rdbms_types::ParameterValue::Uint64(u) => {
254 v2::rdbms_types::ParameterValue::Uint64(u)
255 }
256 v1::rdbms_types::ParameterValue::Floating32(r) => {
257 v2::rdbms_types::ParameterValue::Floating32(r)
258 }
259 v1::rdbms_types::ParameterValue::Floating64(r) => {
260 v2::rdbms_types::ParameterValue::Floating64(r)
261 }
262 v1::rdbms_types::ParameterValue::Str(s) => v2::rdbms_types::ParameterValue::Str(s),
263 v1::rdbms_types::ParameterValue::Binary(b) => {
264 v2::rdbms_types::ParameterValue::Binary(b)
265 }
266 v1::rdbms_types::ParameterValue::DbNull => v2::rdbms_types::ParameterValue::DbNull,
267 }
268 }
269 }
270
271 impl TryFrom<v1::rdbms_types::ParameterValue> for pg4::ParameterValue {
272 type Error = v1::postgres::PgError;
273
274 fn try_from(
275 value: v1::rdbms_types::ParameterValue,
276 ) -> Result<pg4::ParameterValue, Self::Error> {
277 let converted = match value {
278 v1::rdbms_types::ParameterValue::Boolean(b) => pg4::ParameterValue::Boolean(b),
279 v1::rdbms_types::ParameterValue::Int8(i) => pg4::ParameterValue::Int8(i),
280 v1::rdbms_types::ParameterValue::Int16(i) => pg4::ParameterValue::Int16(i),
281 v1::rdbms_types::ParameterValue::Int32(i) => pg4::ParameterValue::Int32(i),
282 v1::rdbms_types::ParameterValue::Int64(i) => pg4::ParameterValue::Int64(i),
283 v1::rdbms_types::ParameterValue::Uint8(_)
284 | v1::rdbms_types::ParameterValue::Uint16(_)
285 | v1::rdbms_types::ParameterValue::Uint32(_)
286 | v1::rdbms_types::ParameterValue::Uint64(_) => {
287 return Err(v1::postgres::PgError::ValueConversionFailed(
288 "Postgres does not support unsigned integers".to_owned(),
289 ));
290 }
291 v1::rdbms_types::ParameterValue::Floating32(r) => {
292 pg4::ParameterValue::Floating32(r)
293 }
294 v1::rdbms_types::ParameterValue::Floating64(r) => {
295 pg4::ParameterValue::Floating64(r)
296 }
297 v1::rdbms_types::ParameterValue::Str(s) => pg4::ParameterValue::Str(s),
298 v1::rdbms_types::ParameterValue::Binary(b) => pg4::ParameterValue::Binary(b),
299 v1::rdbms_types::ParameterValue::DbNull => pg4::ParameterValue::DbNull,
300 };
301 Ok(converted)
302 }
303 }
304
305 impl TryFrom<v2::rdbms_types::ParameterValue> for pg4::ParameterValue {
306 type Error = v2::rdbms_types::Error;
307
308 fn try_from(
309 value: v2::rdbms_types::ParameterValue,
310 ) -> Result<pg4::ParameterValue, Self::Error> {
311 let converted = match value {
312 v2::rdbms_types::ParameterValue::Boolean(b) => pg4::ParameterValue::Boolean(b),
313 v2::rdbms_types::ParameterValue::Int8(i) => pg4::ParameterValue::Int8(i),
314 v2::rdbms_types::ParameterValue::Int16(i) => pg4::ParameterValue::Int16(i),
315 v2::rdbms_types::ParameterValue::Int32(i) => pg4::ParameterValue::Int32(i),
316 v2::rdbms_types::ParameterValue::Int64(i) => pg4::ParameterValue::Int64(i),
317 v2::rdbms_types::ParameterValue::Uint8(_)
318 | v2::rdbms_types::ParameterValue::Uint16(_)
319 | v2::rdbms_types::ParameterValue::Uint32(_)
320 | v2::rdbms_types::ParameterValue::Uint64(_) => {
321 return Err(v2::rdbms_types::Error::ValueConversionFailed(
322 "Postgres does not support unsigned integers".to_owned(),
323 ));
324 }
325 v2::rdbms_types::ParameterValue::Floating32(r) => {
326 pg4::ParameterValue::Floating32(r)
327 }
328 v2::rdbms_types::ParameterValue::Floating64(r) => {
329 pg4::ParameterValue::Floating64(r)
330 }
331 v2::rdbms_types::ParameterValue::Str(s) => pg4::ParameterValue::Str(s),
332 v2::rdbms_types::ParameterValue::Binary(b) => pg4::ParameterValue::Binary(b),
333 v2::rdbms_types::ParameterValue::DbNull => pg4::ParameterValue::DbNull,
334 };
335 Ok(converted)
336 }
337 }
338
339 impl From<pg3::ParameterValue> for pg4::ParameterValue {
340 fn from(value: pg3::ParameterValue) -> pg4::ParameterValue {
341 match value {
342 pg3::ParameterValue::Boolean(b) => pg4::ParameterValue::Boolean(b),
343 pg3::ParameterValue::Int8(i) => pg4::ParameterValue::Int8(i),
344 pg3::ParameterValue::Int16(i) => pg4::ParameterValue::Int16(i),
345 pg3::ParameterValue::Int32(i) => pg4::ParameterValue::Int32(i),
346 pg3::ParameterValue::Int64(i) => pg4::ParameterValue::Int64(i),
347 pg3::ParameterValue::Floating32(r) => pg4::ParameterValue::Floating32(r),
348 pg3::ParameterValue::Floating64(r) => pg4::ParameterValue::Floating64(r),
349 pg3::ParameterValue::Str(s) => pg4::ParameterValue::Str(s),
350 pg3::ParameterValue::Binary(b) => pg4::ParameterValue::Binary(b),
351 pg3::ParameterValue::Date(d) => pg4::ParameterValue::Date(d),
352 pg3::ParameterValue::Datetime(dt) => pg4::ParameterValue::Datetime(dt),
353 pg3::ParameterValue::Time(t) => pg4::ParameterValue::Time(t),
354 pg3::ParameterValue::Timestamp(t) => pg4::ParameterValue::Timestamp(t),
355 pg3::ParameterValue::DbNull => pg4::ParameterValue::DbNull,
356 }
357 }
358 }
359
360 impl From<v2::rdbms_types::Error> for v1::mysql::MysqlError {
361 fn from(error: v2::rdbms_types::Error) -> v1::mysql::MysqlError {
362 match error {
363 v2::mysql::Error::ConnectionFailed(e) => v1::mysql::MysqlError::ConnectionFailed(e),
364 v2::mysql::Error::BadParameter(e) => v1::mysql::MysqlError::BadParameter(e),
365 v2::mysql::Error::QueryFailed(e) => v1::mysql::MysqlError::QueryFailed(e),
366 v2::mysql::Error::ValueConversionFailed(e) => {
367 v1::mysql::MysqlError::ValueConversionFailed(e)
368 }
369 v2::mysql::Error::Other(e) => v1::mysql::MysqlError::OtherError(e),
370 }
371 }
372 }
373
374 impl From<pg4::Error> for v1::postgres::PgError {
375 fn from(error: pg4::Error) -> v1::postgres::PgError {
376 match error {
377 pg4::Error::ConnectionFailed(e) => v1::postgres::PgError::ConnectionFailed(e),
378 pg4::Error::BadParameter(e) => v1::postgres::PgError::BadParameter(e),
379 pg4::Error::QueryFailed(e) => v1::postgres::PgError::QueryFailed(pg_error_text(e)),
380 pg4::Error::ValueConversionFailed(e) => {
381 v1::postgres::PgError::ValueConversionFailed(e)
382 }
383 pg4::Error::Other(e) => v1::postgres::PgError::OtherError(e),
384 }
385 }
386 }
387
388 impl From<pg4::Error> for v2::rdbms_types::Error {
389 fn from(error: pg4::Error) -> v2::rdbms_types::Error {
390 match error {
391 pg4::Error::ConnectionFailed(e) => v2::rdbms_types::Error::ConnectionFailed(e),
392 pg4::Error::BadParameter(e) => v2::rdbms_types::Error::BadParameter(e),
393 pg4::Error::QueryFailed(e) => v2::rdbms_types::Error::QueryFailed(pg_error_text(e)),
394 pg4::Error::ValueConversionFailed(e) => {
395 v2::rdbms_types::Error::ValueConversionFailed(e)
396 }
397 pg4::Error::Other(e) => v2::rdbms_types::Error::Other(e),
398 }
399 }
400 }
401
402 impl From<pg4::Error> for pg3::Error {
403 fn from(error: pg4::Error) -> pg3::Error {
404 match error {
405 pg4::Error::ConnectionFailed(e) => pg3::Error::ConnectionFailed(e),
406 pg4::Error::BadParameter(e) => pg3::Error::BadParameter(e),
407 pg4::Error::QueryFailed(e) => pg3::Error::QueryFailed(pg_error_text(e)),
408 pg4::Error::ValueConversionFailed(e) => pg3::Error::ValueConversionFailed(e),
409 pg4::Error::Other(e) => pg3::Error::Other(e),
410 }
411 }
412 }
413
414 pub fn pg_error_text(error: pg4::QueryError) -> String {
415 match error {
416 pg4::QueryError::Text(text) => text,
417 pg4::QueryError::DbError(e) => e.as_text,
418 }
419 }
420}
421
422mod postgres {
423 use super::*;
424 use spin::postgres3_0_0::postgres as pg3;
425 use spin::postgres4_0_0::postgres as pg4;
426
427 impl From<pg4::RowSet> for v1::postgres::RowSet {
428 fn from(value: pg4::RowSet) -> v1::postgres::RowSet {
429 v1::mysql::RowSet {
430 columns: value.columns.into_iter().map(Into::into).collect(),
431 rows: value
432 .rows
433 .into_iter()
434 .map(|r| r.into_iter().map(Into::into).collect())
435 .collect(),
436 }
437 }
438 }
439
440 impl From<pg4::RowSet> for v2::rdbms_types::RowSet {
441 fn from(value: pg4::RowSet) -> v2::rdbms_types::RowSet {
442 v2::rdbms_types::RowSet {
443 columns: value.columns.into_iter().map(Into::into).collect(),
444 rows: value
445 .rows
446 .into_iter()
447 .map(|r| r.into_iter().map(Into::into).collect())
448 .collect(),
449 }
450 }
451 }
452
453 impl From<pg4::RowSet> for pg3::RowSet {
454 fn from(value: pg4::RowSet) -> pg3::RowSet {
455 pg3::RowSet {
456 columns: value.columns.into_iter().map(Into::into).collect(),
457 rows: value
458 .rows
459 .into_iter()
460 .map(|r| r.into_iter().map(Into::into).collect())
461 .collect(),
462 }
463 }
464 }
465}
466
467mod mysql {
468 use super::*;
469 impl From<v2::mysql::RowSet> for v1::mysql::RowSet {
470 fn from(value: v2::mysql::RowSet) -> v1::mysql::RowSet {
471 v1::mysql::RowSet {
472 columns: value.columns.into_iter().map(Into::into).collect(),
473 rows: value
474 .rows
475 .into_iter()
476 .map(|r| r.into_iter().map(Into::into).collect())
477 .collect(),
478 }
479 }
480 }
481}
482
483mod redis {
484 use super::*;
485
486 impl From<v1::redis::RedisParameter> for v2::redis::RedisParameter {
487 fn from(value: v1::redis::RedisParameter) -> Self {
488 match value {
489 v1::redis::RedisParameter::Int64(i) => v2::redis::RedisParameter::Int64(i),
490 v1::redis::RedisParameter::Binary(b) => v2::redis::RedisParameter::Binary(b),
491 }
492 }
493 }
494
495 impl From<v2::redis::RedisResult> for v1::redis::RedisResult {
496 fn from(value: v2::redis::RedisResult) -> Self {
497 match value {
498 v2::redis::RedisResult::Nil => v1::redis::RedisResult::Nil,
499 v2::redis::RedisResult::Status(s) => v1::redis::RedisResult::Status(s),
500 v2::redis::RedisResult::Int64(i) => v1::redis::RedisResult::Int64(i),
501 v2::redis::RedisResult::Binary(b) => v1::redis::RedisResult::Binary(b),
502 }
503 }
504 }
505}
506
507mod llm {
508 use super::*;
509
510 impl From<v1::llm::InferencingParams> for v2::llm::InferencingParams {
511 fn from(value: v1::llm::InferencingParams) -> Self {
512 Self {
513 max_tokens: value.max_tokens,
514 repeat_penalty: value.repeat_penalty,
515 repeat_penalty_last_n_token_count: value.repeat_penalty_last_n_token_count,
516 temperature: value.temperature,
517 top_k: value.top_k,
518 top_p: value.top_p,
519 }
520 }
521 }
522
523 impl From<v2::llm::InferencingResult> for v1::llm::InferencingResult {
524 fn from(value: v2::llm::InferencingResult) -> Self {
525 Self {
526 text: value.text,
527 usage: v1::llm::InferencingUsage {
528 prompt_token_count: value.usage.prompt_token_count,
529 generated_token_count: value.usage.generated_token_count,
530 },
531 }
532 }
533 }
534
535 impl From<v2::llm::EmbeddingsResult> for v1::llm::EmbeddingsResult {
536 fn from(value: v2::llm::EmbeddingsResult) -> Self {
537 Self {
538 embeddings: value.embeddings,
539 usage: v1::llm::EmbeddingsUsage {
540 prompt_token_count: value.usage.prompt_token_count,
541 },
542 }
543 }
544 }
545
546 impl From<v2::llm::Error> for v1::llm::Error {
547 fn from(value: v2::llm::Error) -> Self {
548 match value {
549 v2::llm::Error::ModelNotSupported => Self::ModelNotSupported,
550 v2::llm::Error::RuntimeError(s) => Self::RuntimeError(s),
551 v2::llm::Error::InvalidInput(s) => Self::InvalidInput(s),
552 }
553 }
554 }
555}