aboutsummaryrefslogtreecommitdiffstats
path: root/common/src/Collection.hs
blob: a23fd31ee7066118d441fd1e1a89dae0c2c32361 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}
module Collection where

import Data.Text qualified as T
import Text.ParserCombinators.ReadP qualified as R
import Text.ParserCombinators.ReadPrec qualified as R
import Text.Read (Read (..))

newtype Collection = Collection {name :: T.Text}
  deriving (Read, Eq, Show)

data CollectionItem = CollectionItem
  { collection :: Collection,
    itemFileName :: FilePath
  } deriving (Eq)

instance Read CollectionItem where
  readPrec = R.lift $ do
    (Collection . T.pack -> collection) <- R.munch (/= '/')
    _ <- R.string "/"
    itemFileName <- do
      itemFileName <- R.munch (liftA2 (&&) (/= '.') (/= '/'))
      fileExt <- R.string ".json"
      pure (itemFileName <> fileExt)
    pure CollectionItem {..}

instance Show CollectionItem where
  show (CollectionItem {collection = Collection cn, itemFileName}) =
    show (cn <> "/" <> T.pack itemFileName)