on master help sign in
Add versionToText, make it the default conversion
commit4a37ac7966d65e800d8fc49533235128c4a80550 authorEvan Czaplicki <evancz@users.noreply.github.com> dateMon 6 Feb 2017, 23:11 (10 years ago) parent5a82332
1 file changed+45−26
src/Elm/Package.hs+45−26
src/Elm/Package.hs+45−26
@@ -10,11 +10,11 @@ module Elm.Package
1010 , initialVersion, dummyVersion
1111 , bumpPatch, bumpMinor, bumpMajor
1212 , filterLatest, majorAndMinor
13− , versionToString, versionFromText
13+ , versionToString, versionToText, versionFromText
1414 )
1515 where
1616
17−import Data.Aeson
17+import qualified Data.Aeson as Json
1818import Data.Binary
1919import qualified Data.Char as Char
2020import Data.Function (on)
@@ -22,6 +22,9 @@ import qualified Data.List as List
2222import Data.Monoid ((<>))
2323import qualified Data.Text as Text
2424import 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)
2528import Data.Text (Text)
2629import System.FilePath ((</>))
2730
@@ -116,28 +119,30 @@ instance Binary Name where
116119 put project
117120
118121
119−instance FromJSON Name where
120− parseJSON (String text) =
121− case fromText text of
122− Left msg ->
123− fail $
124− "Ran into an invalid package name: "
125− ++ Text.unpack text ++ "\n\n" ++ msg
122+instance Json.FromJSON Name where
123+ parseJSON (Json.String text) =
124+ case fromText text of
125+ Left msg ->
126+ fail $
127+ "Ran into an invalid package name: "
128+ ++ Text.unpack text ++ "\n\n" ++ msg
126129
127− Right name ->
128− return name
130+ Right name ->
131+ return name
132+
133+ parseJSON _ =
134+ fail "Project name must be a string."
129135
130− parseJSON _ =
131− fail "Project name must be a string."
132136
137+instance Json.ToJSON Name where
138+ toJSON name =
139+ Json.String (toText name)
133140
134−instance ToJSON Name where
135− toJSON name =
136− toJSON (toString name)
137141
138142
139143-- PACKAGE VERSIONS
140144
145+
141146data Version =
142147 Version
143148 { _major :: Int
@@ -169,8 +174,10 @@ bumpMajor (Version major _minor _patch) =
169174 Version (major + 1) 0 0
170175
171176
177+
172178-- FILTERING
173179
180+
174181filterLatest :: (Ord a) => (Version -> a) -> [Version] -> [Version]
175182filterLatest characteristic versions =
176183 map last (List.groupBy ((==) `on` characteristic) (List.sort versions))
@@ -181,11 +188,23 @@ majorAndMinor (Version major minor _patch) =
181188 (major, minor)
182189
183190
191+
184192-- CONVERSIONS
185193
194+
186195versionToString :: Version -> String
187−versionToString (Version major minor patch) =
188− show major ++ "." ++ show minor ++ "." ++ show patch
196+versionToString version =
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
189208
190209
191210versionFromText :: Text -> Either String Version
@@ -215,13 +234,13 @@ instance Binary Version where
215234 Version <$> get <*> get <*> get
216235
217236 put (Version major minor patch) =
218− do put major
219− put minor
220− put patch
237+ do put major
238+ put minor
239+ put patch
221240
222241
223−instance FromJSON Version where
224− parseJSON (String text) =
242+instance Json.FromJSON Version where
243+ parseJSON (Json.String text) =
225244 case versionFromText text of
226245 Right version ->
227246 return version
@@ -236,7 +255,7 @@ instance FromJSON Version where
236255 fail "Version number must be stored as a string."
237256
238257
239−instance ToJSON Version where
240− toJSON version =
241− toJSON (versionToString version)
258+instance Json.ToJSON Version where
259+ toJSON version =
260+ Json.String (versionToText version)
242261