module Hercules.Agent.NixPath
  ( renderNixPath,
    renderNixPathElement,
    renderSubPath,
  )
where

import qualified Data.Text as T
import qualified Hercules.API.Agent.Evaluate.EvaluateTask as EvaluateTask
import Protolude

renderNixPath ::
  [EvaluateTask.NixPathElement (EvaluateTask.SubPathOf FilePath)] ->
  Text
renderNixPath :: [NixPathElement (SubPathOf FilePath)] -> Text
renderNixPath = Text -> [Text] -> Text
T.intercalate Text
":" forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
map NixPathElement (SubPathOf FilePath) -> Text
renderNixPathElement

renderNixPathElement ::
  EvaluateTask.NixPathElement
    (EvaluateTask.SubPathOf FilePath) ->
  Text
renderNixPathElement :: NixPathElement (SubPathOf FilePath) -> Text
renderNixPathElement NixPathElement (SubPathOf FilePath)
pe =
  forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (forall a. Semigroup a => a -> a -> a
<> Text
"=") (forall a. NixPathElement a -> Maybe Text
EvaluateTask.prefix NixPathElement (SubPathOf FilePath)
pe)
    forall a. Semigroup a => a -> a -> a
<> SubPathOf Text -> Text
renderSubPath (forall a b. ConvertText a b => a -> b
toS forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. NixPathElement a -> a
EvaluateTask.value NixPathElement (SubPathOf FilePath)
pe)

renderSubPath :: EvaluateTask.SubPathOf Text -> Text
renderSubPath :: SubPathOf Text -> Text
renderSubPath SubPathOf Text
sp =
  forall a b. ConvertText a b => a -> b
toS (forall a. SubPathOf a -> a
EvaluateTask.path SubPathOf Text
sp) forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Text
"/" forall a. Semigroup a => a -> a -> a
<>) (forall a. SubPathOf a -> Maybe Text
EvaluateTask.subPath SubPathOf Text
sp)