0 | -- SPDX-FileCopyrightText: 2021 The toml-idr developers
 1 | --
 2 | -- SPDX-License-Identifier: MPL-2.0
 3 |
 4 | module Language.TOML.ConcreteSyntax
 5 |
 6 | import Data.String
 7 | import Data.List
 8 | import Data.List1
 9 |
10 | public export
11 | data CKeyAtom = CKBare String
12 |               | CKQuoted String
13 |
14 | public export
15 | data CKey = CKAtom CKeyAtom
16 |           | CKDotted (List1 CKeyAtom)
17 |
18 | public export
19 | data CValue
20 |     = CVString String
21 |     | CVInteger Integer
22 |     | CVFloat Double
23 |     | CVBoolean Bool
24 |     | CVArray (List CValue)
25 |     | CVInlineTable (List (CKey, CValue))
26 |
27 |
28 | public export
29 | data Item : Type where
30 |     IKeyValue : (key : CKey) -> (val : CValue) -> Item
31 |     ITableHeader : (header : CKey) -> Item
32 |     ITableArray : (header : CKey) -> Item
33 |
34 |
35 | public export
36 | Show CKeyAtom where
37 |     show (CKBare x) = x
38 |     show (CKQuoted x) = "\"" ++ x ++ "\""
39 |
40 | public export
41 | Show CKey where
42 |     show (CKAtom x) = show x
43 |     show (CKDotted x) = fastConcat . intersperse "." . forget $ show <$> x
44 |
45 | public export
46 | Show CValue where
47 |     show (CVString x) = show x
48 |     show (CVInteger x) = show x
49 |     show (CVFloat x) = show x
50 |     show (CVBoolean x) = show x
51 |     show (CVArray xs) = "["
52 |         ++ fastConcat (intersperse ", " $ map (assert_total show) xs)
53 |         ++ "]"
54 |     show (CVInlineTable xs) = "{"
55 |         ++ fastConcat (intersperse ", " $ map (\(k, v) => show k ++ " = " ++ assert_total show v) xs)
56 |         ++ "}"
57 |
58 | public export
59 | Show Item where
60 |     show (IKeyValue key val) = "keyval: " ++ show key ++ " = " ++ show val
61 |     show (ITableHeader header) = "table: " ++ show header
62 |     show (ITableArray header) = "tablearr: " ++ show header