aboutsummaryrefslogtreecommitdiffstats
path: root/app/Field.hs
blob: 68baec7a37e8bc6e21a8d1894b0ead65a3a71511 (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
32
module Field
  ( Field (..),
    toString,
    prefix,
  )
where

import Data.Aeson qualified as J
import Data.Aeson.Key qualified as JK
import Data.Aeson.KeyMap qualified as JM
import Data.List (intercalate)
import Data.List.NonEmpty qualified as N
import Data.Text qualified as T

data Field
  = Qualified Collection (N.NonEmpty T.Text)
  | Unqualified (N.NonEmpty T.Text)
  deriving (Show)

toString :: Field -> String
toString (Qualified c ks) = intercalate "." (c : map T.unpack (N.toList ks))
toString (Unqualified ks) = intercalate "." (map T.unpack (N.toList ks))

type Collection = FilePath

prefix :: Field -> J.Value -> J.Value
prefix (Qualified c ks) = prefix' (T.pack c : N.toList ks)
prefix (Unqualified ks) = prefix' (N.toList ks)

prefix' :: [T.Text] -> J.Value -> J.Value
prefix' ks v =
  foldr ((J.Object .) . JM.singleton) v (map JK.fromText ks)