@@ -129,9 +129,12 @@ serve token memory =
129129 ]
130130
131131
132- version :: Route (Pkg. Version -> a ) a
132+ version :: Route (Maybe Pkg. Version -> a ) a
133133version =
134- Router. custom Pkg. versionFromText
134+ Router. oneOf
135+ [ s " latest" ==> Nothing
136+ , Router. custom Pkg. versionFromText ==> Just
137+ ]
135138
136139
137140data Info
@@ -176,24 +179,26 @@ serveReleases author project =
176179 serveFile (Path. releases (Pkg. Name author project))
177180
178181
179- serveVersion :: Memory. Memory -> Text -> Text -> Pkg. Version -> Info -> S. Snap ()
180- serveVersion memory author project version info =
182+ serveVersion :: Memory. Memory -> Text -> Text -> Maybe Pkg. Version -> Info -> S. Snap ()
183+ serveVersion memory author project maybeVersion info =
181184 do let name = Pkg. Name author project
182185 pkgs <- Memory. getPackages memory
183186 case Map. lookup name pkgs of
184187 Nothing ->
185188 S. pass
186189
187190 Just (Memory. Summary versions _ _) ->
188- if notElem version versions
189- then S. pass
190- else
191- case info of
192- Readme ->
193- ServeFile. version name version Nothing
191+ case verifyVersion maybeVersion versions of
192+ Nothing ->
193+ S. pass
194194
195- Module asset ->
196- serveVersionHelp name version asset
195+ Just version ->
196+ case info of
197+ Readme ->
198+ ServeFile. version name version Nothing
199+
200+ Module asset ->
201+ serveVersionHelp name version asset
197202
198203
199204
@@ -219,3 +224,20 @@ serveVersionHelp name version asset =
219224
220225 Nothing ->
221226 S. pass
227+
228+
229+ verifyVersion :: Maybe Pkg. Version -> [Pkg. Version ] -> Maybe Pkg. Version
230+ verifyVersion maybeVersion versions =
231+ case versions of
232+ [] ->
233+ Nothing
234+
235+ _: _ ->
236+ case maybeVersion of
237+ Nothing ->
238+ Just (maximum versions)
239+
240+ Just version ->
241+ if elem version versions
242+ then Just version
243+ else Nothing
0 commit comments