module Store.Query.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)