qubit_value/
strict_value_read.rs1use crate::{
13 MultiValues,
14 Value,
15 ValueError,
16 ValueResult,
17};
18
19mod sealed {
20 use super::{
21 MultiValues,
22 Value,
23 ValueError,
24 };
25
26 pub trait Sealed {}
27
28 impl<T> Sealed for T
29 where
30 for<'a> T: TryFrom<&'a Value, Error = ValueError>
31 + TryFrom<&'a MultiValues, Error = ValueError>,
32 for<'a> Vec<T>: TryFrom<&'a MultiValues, Error = ValueError>,
33 {
34 }
35}
36
37pub trait StrictValueRead: Sized + sealed::Sealed {
43 #[doc(hidden)]
45 fn read_scalar(value: &Value) -> ValueResult<Self>;
46
47 #[doc(hidden)]
49 fn read_collection_first(values: &MultiValues) -> ValueResult<Self>;
50
51 #[doc(hidden)]
53 fn read_collection_list(values: &MultiValues) -> ValueResult<Vec<Self>>;
54}
55
56impl<T> StrictValueRead for T
57where
58 for<'a> T: TryFrom<&'a Value, Error = ValueError>
59 + TryFrom<&'a MultiValues, Error = ValueError>,
60 for<'a> Vec<T>: TryFrom<&'a MultiValues, Error = ValueError>,
61{
62 #[inline(always)]
63 fn read_scalar(value: &Value) -> ValueResult<Self> {
64 value.get()
65 }
66
67 #[inline(always)]
68 fn read_collection_first(values: &MultiValues) -> ValueResult<Self> {
69 values.get_first()
70 }
71
72 #[inline(always)]
73 fn read_collection_list(values: &MultiValues) -> ValueResult<Vec<Self>> {
74 values.get()
75 }
76}