spin_world/
conversions.rs

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}