on master help sign in
Add versionToText, make it the default conversion
4a37ac7Evan Czaplicki
src/Elm/Package.hs+45−26
@@ -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
14 )
14 )
15 where
15 where
16
16
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 ((</>))
27
30
@@ -116,28 +119,30 @@ instance Binary Name where
116 put project
119 put project
117
120
118
121
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 ->
123− fail $
126+ fail $
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
126
129
127− Right name ->
130+ Right name ->
128− return name
131+ return name
132+
133+ parseJSON _ =
134+ fail "Project name must be a string."
129
135
130− parseJSON _ =
131− fail "Project name must be a string."
132
136
137+instance Json.ToJSON Name where
138+ toJSON name =
139+ Json.String (toText name)
133
140
134−instance ToJSON Name where
135− toJSON name =
136− toJSON (toString name)
137
141
138
142
139-- PACKAGE VERSIONS
143-- PACKAGE VERSIONS
140
144
145+
141data Version =
146data Version =
142 Version
147 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
170
175
171
176
177+
172-- FILTERING
178-- FILTERING
173
179
180+
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)
182
189
183
190
191+
184-- CONVERSIONS
192-- CONVERSIONS
185
193
194+
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)
198+
199+
200+versionToText :: Version -> Text
201+versionToText (Version major minor patch) =
202+ B.toStrict $ B.toLazyText $
203+ B.decimal major
204+ <> B.singleton '.'
205+ <> B.decimal minor
206+ <> B.singleton '.'
207+ <> B.decimal patch
189
208
190
209
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
216
235
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
221
240
222
241
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."
237
256
238
257
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)
242
261