@@ -11,11 +11,15 @@ module Elm.Package
11 , bumpPatch, bumpMinor, bumpMajor
11 , bumpPatch, bumpMinor, bumpMajor
12 , filterLatest, majorAndMinor
12 , filterLatest, majorAndMinor
13 , versionToString, versionToText, versionFromText
13 , versionToString, versionToText, versionFromText
17−import qualified Data.Aeson as Json
21+
18−import Data.Binary
22+import Data.Binary (Binary, get, getWord8, put, putWord8)
19import qualified Data.Char as Char
23import qualified Data.Char as Char
20import Data.Function (on)
24import Data.Function (on)
21import qualified Data.List as List
25import qualified Data.List as List
@@ -26,7 +30,10 @@ import qualified Data.Text.Lazy as B (toStrict)
26import qualified Data.Text.Lazy.Builder as B (singleton, toLazyText)
30import qualified Data.Text.Lazy.Builder as B (singleton, toLazyText)
27import qualified Data.Text.Lazy.Builder.Int as B (decimal)
31import qualified Data.Text.Lazy.Builder.Int as B (decimal)
28import Data.Text (Text)
32import Data.Text (Text)
33+import Data.Word (Word16)
29import System.FilePath ((</>))
34import System.FilePath ((</>))
35+import qualified Json.Decode as Decode
36+import qualified Json.Encode as Encode
@@ -117,44 +124,6 @@ validateProjectName text =
117 Right text
124 Right text
120−instance Binary Name where
122− Name <$> get <*> get
124− put (Name user project) =
129−instance Binary Package where
131− Package <$> get <*> get
133− put (Package name version) =
138−instance Json.FromJSON Name where
139− parseJSON (Json.String text) =
140− case fromText text of
143− "Ran into an invalid package name: "
144− ++ Text.unpack text ++ "\n\n" ++ msg
150− fail "Project name must be a string."
153−instance Json.ToJSON Name where
155− Json.String (toText name)
159-- PACKAGE VERSIONS
128-- PACKAGE VERSIONS
@@ -248,6 +217,28 @@ toNumber txt =
248 Left "Must have format MAJOR.MINOR.PATCH (e.g. 1.0.2)"
217 Left "Must have format MAJOR.MINOR.PATCH (e.g. 1.0.2)"
224+instance Binary Name where
226+ Name <$> get <*> get
228+ put (Name user project) =
233+instance Binary Package where
235+ Package <$> get <*> get
237+ put (Package name version) =
251instance Binary Version where
242instance Binary Version where
253 do word <- getWord8
244 do word <- getWord8
@@ -270,23 +261,38 @@ instance Binary Version where
270 put patch
261 put patch
273−instance Json.FromJSON Version where
274− parseJSON (Json.String text) =
275− case versionFromText text of
268+decoder :: Decode.Decoder Name
270+ do txt <- Decode.text
271+ case fromText txt of
279− Left problem ->
272+ Left _ ->
280− fail $ unlines $
273+ Decode.fail "a valid project name, like \"elm-lang/core\""
281− [ "Ran into an invalid version number: " ++ Text.unpack text
274+
282− , problem
275+ Right name ->
283− ]
276+ Decode.succeed name
279+encode :: Name -> Encode.Value
281+ Encode.text (toText name)
285− parseJSON _ =
285+versionDecoder :: Decode.Decoder Version
286− fail "Version number must be stored as a string."
286+versionDecoder =
287+ do txt <- Decode.text
288+ case versionFromText txt of
290+ Decode.succeed version
293+ Decode.fail "a version number, like 1.0.0"
289−instance Json.ToJSON Version where
291− Json.String (versionToText version)
296+encodeVersion :: Version -> Encode.Value
297+encodeVersion version =
298+ Encode.text (versionToText version)