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)
|