spin_world/
conversions.rs

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