@@ -10,11 +10,11 @@ module Elm.Package
10 , initialVersion, dummyVersion
10 , initialVersion, dummyVersion
11 , bumpPatch, bumpMinor, bumpMajor
11 , bumpPatch, bumpMinor, bumpMajor
12 , filterLatest, majorAndMinor
12 , filterLatest, majorAndMinor
13− , versionToString, versionFromText
13+ , versionToString, versionToText, versionFromText
17−import Data.Aeson
17+import qualified Data.Aeson as Json
18import Data.Binary
18import Data.Binary
19import qualified Data.Char as Char
19import qualified Data.Char as Char
20import Data.Function (on)
20import Data.Function (on)
@@ -22,6 +22,9 @@ import qualified Data.List as List
22import Data.Monoid ((<>))
22import Data.Monoid ((<>))
23import qualified Data.Text as Text
23import qualified Data.Text as Text
24import qualified Data.Text.Read as Text
24import qualified Data.Text.Read as Text
25+import qualified Data.Text.Lazy as B (toStrict)
26+import qualified Data.Text.Lazy.Builder as B (singleton, toLazyText)
27+import qualified Data.Text.Lazy.Builder.Int as B (decimal)
25import Data.Text (Text)
28import Data.Text (Text)
26import System.FilePath ((</>))
29import System.FilePath ((</>))
@@ -116,28 +119,30 @@ instance Binary Name where
116 put project
119 put project
119−instance FromJSON Name where
122+instance Json.FromJSON Name where
120− parseJSON (String text) =
123+ parseJSON (Json.String text) =
121− case fromText text of
124+ case fromText text of
122− Left msg ->
125+ Left msg ->
124− "Ran into an invalid package name: "
127+ "Ran into an invalid package name: "
125− ++ Text.unpack text ++ "\n\n" ++ msg
128+ ++ Text.unpack text ++ "\n\n" ++ msg
127− Right name ->
130+ Right name ->
128− return name
131+ return name
134+ fail "Project name must be a string."
131− fail "Project name must be a string."
137+instance Json.ToJSON Name where
139+ Json.String (toText name)
134−instance ToJSON Name where
136− toJSON (toString name)
139-- PACKAGE VERSIONS
143-- PACKAGE VERSIONS
141data Version =
146data Version =
143 { _major :: Int
148 { _major :: Int
@@ -169,8 +174,10 @@ bumpMajor (Version major _minor _patch) =
169 Version (major + 1) 0 0
174 Version (major + 1) 0 0
172-- FILTERING
178-- FILTERING
174filterLatest :: (Ord a) => (Version -> a) -> [Version] -> [Version]
181filterLatest :: (Ord a) => (Version -> a) -> [Version] -> [Version]
175filterLatest characteristic versions =
182filterLatest characteristic versions =
176 map last (List.groupBy ((==) `on` characteristic) (List.sort versions))
183 map last (List.groupBy ((==) `on` characteristic) (List.sort versions))
@@ -181,11 +188,23 @@ majorAndMinor (Version major minor _patch) =
181 (major, minor)
188 (major, minor)
184-- CONVERSIONS
192-- CONVERSIONS
186versionToString :: Version -> String
195versionToString :: Version -> String
187−versionToString (Version major minor patch) =
196+versionToString version =
188− show major ++ "." ++ show minor ++ "." ++ show patch
197+ Text.unpack (versionToText version)
200+versionToText :: Version -> Text
201+versionToText (Version major minor patch) =
202+ B.toStrict $ B.toLazyText $
191versionFromText :: Text -> Either String Version
210versionFromText :: Text -> Either String Version
@@ -215,13 +234,13 @@ instance Binary Version where
215 Version <$> get <*> get <*> get
234 Version <$> get <*> get <*> get
217 put (Version major minor patch) =
236 put (Version major minor patch) =
218− do put major
237+ do put major
219− put minor
238+ put minor
220− put patch
239+ put patch
223−instance FromJSON Version where
242+instance Json.FromJSON Version where
224− parseJSON (String text) =
243+ parseJSON (Json.String text) =
225 case versionFromText text of
244 case versionFromText text of
226 Right version ->
245 Right version ->
227 return version
246 return version
@@ -236,7 +255,7 @@ instance FromJSON Version where
236 fail "Version number must be stored as a string."
255 fail "Version number must be stored as a string."
239−instance ToJSON Version where
258+instance Json.ToJSON Version where
240− toJSON version =
259+ toJSON version =
241− toJSON (versionToString version)
260+ Json.String (versionToText version)