-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathtype.cr
132 lines (108 loc) · 2.23 KB
/
type.cr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
module Neo4j
struct Node
@properties : Hash(String, Type)
getter :properties
getter(
id : Int32,
labels : Array(String),
)
def initialize(@id, @labels, @properties)
end
end
struct Relationship
@properties : Hash(String, Type)
getter :properties
getter(
id : Int32,
start : Int32,
end : Int32,
type : String,
)
def initialize(@id, @start, @end, @type, @properties)
end
end
struct UnboundRelationship
getter(
id : Int32,
type : String,
)
@properties : Hash(String, Type)
getter :properties
def initialize(@id, @type, @properties)
end
end
struct Path
include Enumerable(Tuple(Node, UnboundRelationship, Node))
getter(
nodes : Array(Node),
relationships : Array(UnboundRelationship),
sequence : Array(Int8),
)
def initialize(@nodes, @relationships, @sequence)
end
def each
(sequence.size / 2).times do |index|
yield({ nodes[index], relationships[index.abs - 1], nodes[index + 1] })
end
end
end
struct Success
getter attrs : Hash(String, Type)
def initialize(@attrs)
end
def fields : Array(String)
if attrs["fields"]
attrs["fields"]
.as(Array)
.map(&.as(String))
else
[] of String
end
end
end
struct Failure
getter attrs : Hash(String, Type)
def initialize(@attrs)
end
end
struct Ignored
end
struct Point2D
getter x, y, type
def initialize(@x : Float64, @y : Float64, @type : Int16 = 7203_i16)
end
end
struct Point3D
getter x, y, z, type
def initialize(@x : Float64, @y : Float64, @z : Float64, @type : Int16 = 9157_i16)
end
end
struct LatLng
getter latitude : Float64
getter longitude : Float64
getter type : Int16
def initialize(@latitude : Float64, @longitude : Float64, @type = 4326_i16)
end
end
alias Type = Nil |
Bool |
String |
Int8 |
Int16 |
Int32 |
Int64 |
Float64 |
Array(Type) |
Hash(String, Type) |
Time |
Point2D |
Point3D |
LatLng |
Node |
Relationship |
UnboundRelationship |
Path |
Success |
Failure |
Ignored
end