0 | module Idris.Package.ToJson
2 | import Idris.Package.Types
3 | import Libraries.Data.String.Extra
6 | import Core.Name.Namespace
13 | private infixl 0 ~~=
15 | interface ToJson v where
16 | toJson : v -> String
19 | toJson str = "\"\{str}\""
22 | toJson False = "false"
23 | toJson True = "true"
25 | ToJson a => ToJson (List a) where
26 | toJson xs = "[\{join "," $ map toJson xs}]"
28 | (~=) : ToJson v => String -> v -> String
29 | (~=) field value = "\{toJson field}: \{toJson value}"
31 | (~~=) : ToJson v => String -> Maybe v -> Maybe String
32 | (~~=) field = map (field ~=)
34 | ToJson PkgVersion where
35 | toJson v = "\"\{show v}\""
37 | ToJson PkgVersionBounds where
38 | toJson (MkPkgVersionBounds lowerBound lowerInclusive upperBound upperInclusive) =
40 | [ "lowerInclusive" ~= lowerInclusive
41 | , "lowerBound" ~= maybe "*" show lowerBound
42 | , "upperInclusive" ~= upperInclusive
43 | , "upperBound" ~= maybe "*" show upperBound
46 | "{\{join "," fields}}"
48 | ToJson Depends where
49 | toJson (MkDepends pkgname pkgbounds) = "{\{pkgname ~= pkgbounds}}"
51 | ToJson ModuleIdent where
52 | toJson ident = "\"\{show ident}\""
56 | toJson : PkgDesc -> String
83 | let optionalFields = catMaybes $
84 | [ "version" ~~= version
85 | , "langversion" ~~= langversion
86 | , "authors" ~~= authors
87 | , "maintainers" ~~= maintainers
88 | , "license" ~~= license
90 | , "readme" ~~= readme
91 | , "homepage" ~~= homepage
92 | , "sourceloc" ~~= sourceloc
93 | , "bugtracker" ~~= bugtracker
94 | , "main" ~~= fst <$> mainmod
95 | , "executable" ~~= executable
96 | , "opts" ~~= snd <$> options
97 | , "sourcedir" ~~= sourcedir
98 | , "builddir" ~~= builddir
99 | , "outputdir" ~~= outputdir
100 | , "prebuild" ~~= snd <$> prebuild
101 | , "postbuild" ~~= snd <$> postbuild
102 | , "preinstall" ~~= snd <$> preinstall
103 | , "postinstall" ~~= snd <$> postinstall
104 | , "preclean" ~~= snd <$> preclean
105 | , "postclean" ~~= snd <$> postclean
109 | , "depends" ~= depends
110 | , "modules" ~= fst <$> modules
111 | ] ++ optionalFields
113 | "{\{join "," fields}}"