Idris2/libs/contrib/Language/JSON/Tokens.idr
2020-05-18 14:00:08 +01:00

82 lines
1.5 KiB
Idris

module Language.JSON.Tokens
import Language.JSON.String
import Text.Token
%default total
public export
strTrue : String
strTrue = "true"
public export
strFalse : String
strFalse = "false"
public export
data Bracket = Open | Close
public export
Eq Bracket where
(==) Open Open = True
(==) Close Close = True
(==) _ _ = False
public export
data Punctuation
= Comma
| Colon
| Square Bracket
| Curly Bracket
public export
Eq Punctuation where
(==) Comma Comma = True
(==) Colon Colon = True
(==) (Square b1) (Square b2) = b1 == b2
(==) (Curly b1) (Curly b2) = b1 == b2
(==) _ _ = False
public export
data JSONTokenKind
= JTBoolean
| JTNumber
| JTString
| JTNull
| JTPunct Punctuation
| JTIgnore
public export
JSONToken : Type
JSONToken = Token JSONTokenKind
public export
Eq JSONTokenKind where
(==) JTBoolean JTBoolean = True
(==) JTNumber JTNumber = True
(==) JTString JTString = True
(==) JTNull JTNull = True
(==) (JTPunct p1) (JTPunct p2) = p1 == p2
(==) _ _ = False
public export
TokenKind JSONTokenKind where
TokType JTBoolean = Bool
TokType JTNumber = Double
TokType JTString = Maybe String
TokType JTNull = ()
TokType (JTPunct _) = ()
TokType JTIgnore = ()
tokValue JTBoolean x = x == strTrue
tokValue JTNumber x = cast x
tokValue JTString x = stringValue x
tokValue JTNull _ = ()
tokValue (JTPunct _) _ = ()
tokValue JTIgnore _ = ()
export
ignored : JSONToken -> Bool
ignored (Tok JTIgnore _) = True
ignored _ = False