graphrecords_query/capabilities/
kind.rs1use crate::{AttributeName, IndexValue, Scalar, ValueDomain};
2use graphrecords_core::graphrecord::{GraphRecordAttribute, GraphRecordValue, NodeIndex};
3
4#[derive(Clone, Copy, PartialEq, Eq)]
5pub enum PayloadKind {
6 Bool,
7 Int,
8 Float,
9 String,
10 DateTime,
11 Duration,
12 Null,
13}
14
15pub trait ValueKindTest: ValueDomain {
16 fn kind(value: &Self::Value<'_>) -> PayloadKind;
17}
18
19pub trait ValueScalarKindTest: ValueKindTest {}
20
21const fn graphrecord_value_kind(value: &GraphRecordValue) -> PayloadKind {
22 match value {
23 GraphRecordValue::String(_) => PayloadKind::String,
24 GraphRecordValue::Int(_) => PayloadKind::Int,
25 GraphRecordValue::Float(_) => PayloadKind::Float,
26 GraphRecordValue::Bool(_) => PayloadKind::Bool,
27 GraphRecordValue::DateTime(_) => PayloadKind::DateTime,
28 GraphRecordValue::Duration(_) => PayloadKind::Duration,
29 GraphRecordValue::Null => PayloadKind::Null,
30 }
31}
32
33const fn graphrecord_attribute_kind(attribute: &GraphRecordAttribute) -> PayloadKind {
34 match attribute {
35 GraphRecordAttribute::Int(_) => PayloadKind::Int,
36 GraphRecordAttribute::String(_) => PayloadKind::String,
37 }
38}
39
40impl ValueKindTest for Scalar {
41 fn kind(value: &Self::Value<'_>) -> PayloadKind {
42 graphrecord_value_kind(value)
43 }
44}
45
46impl ValueScalarKindTest for Scalar {}
47
48impl ValueKindTest for AttributeName {
49 fn kind(value: &Self::Value<'_>) -> PayloadKind {
50 graphrecord_attribute_kind(value)
51 }
52}
53
54impl ValueKindTest for IndexValue<GraphRecordValue> {
55 fn kind(value: &Self::Value<'_>) -> PayloadKind {
56 graphrecord_value_kind(value)
57 }
58}
59
60impl ValueScalarKindTest for IndexValue<GraphRecordValue> {}
61
62impl ValueKindTest for IndexValue<NodeIndex> {
63 fn kind(value: &Self::Value<'_>) -> PayloadKind {
64 graphrecord_attribute_kind(value)
65 }
66}
67
68impl ValueKindTest for IndexValue<AttributeName> {
69 fn kind(value: &Self::Value<'_>) -> PayloadKind {
70 graphrecord_attribute_kind(value)
71 }
72}