packages feed

cabal-gild-0.3.0.0: source/library/CabalGild/Type/Line.hs

module CabalGild.Type.Line where

import qualified CabalGild.Type.Chunk as Chunk
import qualified Data.ByteString as ByteString
import qualified Distribution.Compat.Lens as Lens

data Line = Line
  { indent :: Int,
    chunk :: Chunk.Chunk
  }
  deriving (Eq, Show)

chunkLens :: Lens.Lens' Line Chunk.Chunk
chunkLens f s = fmap (\a -> s {chunk = a}) . f $ chunk s

empty :: Line
empty =
  Line
    { indent = 0,
      chunk = mempty
    }

isEmpty :: Line -> Bool
isEmpty = Chunk.isEmpty . chunk

toByteString :: Line -> ByteString.ByteString
toByteString l =
  if isEmpty l
    then ByteString.empty
    else
      mappend (ByteString.replicate (2 * indent l) 0x20)
        . Chunk.value
        $ chunk l