1
+ # -----------------------------------------------------------------------
2
+ # This file is part of MoonScript
3
+ #
4
+ # MoonSript is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # MoonSript is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with MoonSript. If not, see <https://www.gnu.org/licenses/>.
16
+ #
17
+ # Copyright (C) 2025 Krisna Pranav, MoonScript Developers
18
+ # -----------------------------------------------------------------------
19
+
20
+ module MoonScript
21
+ class TypeChecker
22
+ def check (node : Ast ::Encode ) : Checkable
23
+ expression =
24
+ case item = node.expression
25
+ when Ast ::Record
26
+ resolve item, true
27
+ else
28
+ resolve item
29
+ end
30
+
31
+ error! :encode_complex_type do
32
+ snippet " This type cannot be automatically encoded:" , expression
33
+
34
+ block do
35
+ text " Only these types and records containing them can"
36
+ text " be automatically decoded:"
37
+ end
38
+
39
+ snippet <<-MOON
40
+ Map(String, a)
41
+ Array(a)
42
+ Maybe(a)
43
+ String
44
+ Number
45
+ Object
46
+ Time
47
+ Bool
48
+ MOON
49
+
50
+ snippet " The encode in question is here:" , node
51
+ end unless check_decode(expression)
52
+
53
+ OBJECT
54
+ end
55
+ end
56
+ end
0 commit comments