/
enums.cr
61 lines (55 loc) · 1.53 KB
/
enums.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
module Onyx::SQL::Model
macro included
macro finished
{% verbatim do %}
{%
getters = @type.methods.select do |_def|
_def.body.is_a?(InstanceVar)
end
fields = getters.select do |g|
if g.return_type.is_a?(Union)
type = g.return_type.types.find { |t| !t.is_a?(Nil) }
if type.resolve < Enumerable
!(type.resolve.type_vars.first < Onyx::SQL::Model)
else
!(type.resolve < Onyx::SQL::Model)
end
end
end
references = getters.select do |g|
if g.return_type.is_a?(Union)
type = g.return_type.types.find { |t| !t.is_a?(Nil) }
if type.resolve < Enumerable
type.resolve.type_vars.first < Onyx::SQL::Model
else
type.resolve < Onyx::SQL::Model
end
end
end
%}
{% if fields.size > 0 %}
enum Field
{% for field in fields %}
{{field.body.name[1..-1].camelcase}}
{% end %}
end
{% else %}
enum Field
Nop
end
{% end %}
{% if references.size > 0 %}
enum Reference
{% for reference in references %}
{{reference.body.name[1..-1].camelcase}}
{% end %}
end
{% else %}
enum Reference
Nop
end
{% end %}
{% end %}
end
end
end