rustium/datastore/
take_x_impl.rs1use std::time::Duration;
4use surrealdb::sql::{Object, Uuid};
5
6use crate::{
7 datastore::{idb_dal::IdThing, object::TakeXImpl},
8 prelude::*,
9};
10impl 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