rustium/datastore/
take_x_impl.rs

1//! TakeXImpl implementations for the surrealdb Object types.
2
3use std::time::Duration;
4use surrealdb::sql::{Object, Uuid};
5
6use crate::{
7    datastore::{idb_dal::IdThing, object::TakeXImpl},
8    prelude::*,
9};
10// region: Implementations
11
12impl TakeXImpl<String> for Object {
13    fn take_x_impl(&mut self, k: &str) -> RustiumResult<Option<String>> {
14        let v = self.remove(k).map(|v| Wrap(v).try_into());
15        match v {
16            None => Ok(None),
17            Some(Ok(val)) => Ok(Some(val)),
18            Some(Err(ex)) => Err(ex),
19        }
20    }
21}
22
23impl TakeXImpl<f64> for Object {
24    fn take_x_impl(&mut self, k: &str) -> RustiumResult<Option<f64>> {
25        let v = self.remove(k).map(|v| Wrap(v).try_into());
26        match v {
27            None => Ok(None),
28            Some(Ok(val)) => Ok(Some(val)),
29            Some(Err(ex)) => Err(ex),
30        }
31    }
32}
33
34impl TakeXImpl<i64> for Object {
35    fn take_x_impl(&mut self, k: &str) -> RustiumResult<Option<i64>> {
36        let v = self.remove(k).map(|v| Wrap(v).try_into());
37        match v {
38            None => Ok(None),
39            Some(Ok(val)) => Ok(Some(val)),
40            Some(Err(ex)) => Err(ex),
41        }
42    }
43}
44
45impl TakeXImpl<bool> for Object {
46    fn take_x_impl(&mut self, k: &str) -> RustiumResult<Option<bool>> {
47        Ok(self.remove(k).map(|v| v.is_true()))
48    }
49}
50
51impl TakeXImpl<Uuid> for Object {
52    fn take_x_impl(&mut self, k: &str) -> RustiumResult<Option<Uuid>> {
53        let v = self.remove(k).map(|v| Wrap(v).try_into());
54        match v {
55            None => Ok(None),
56            Some(Ok(val)) => Ok(Some(val)),
57            Some(Err(e)) => Err(e),
58        }
59    }
60}
61
62impl TakeXImpl<Duration> for Object {
63    fn take_x_impl(&mut self, k: &str) -> RustiumResult<Option<Duration>> {
64        let v = self.remove(k).map(|v| Wrap(v).try_into());
65        match v {
66            None => Ok(None),
67            Some(Ok(val)) => Ok(Some(val)),
68            Some(Err(e)) => Err(e),
69        }
70    }
71}
72
73impl TakeXImpl<IdThing> for Object {
74    fn take_x_impl(&mut self, k: &str) -> RustiumResult<Option<IdThing>> {
75        let v = self.remove(k).map(|v| Wrap(v).try_into());
76        match v {
77            None => Ok(None),
78            Some(Ok(val)) => Ok(Some(val)),
79            Some(Err(e)) => Err(e),
80        }
81    }
82}
83// endregion: Implementations