{-# LANGUAGE DataKinds #-}

module Clang.Coformat.Formatter where

import qualified Data.ByteString.Char8 as BS
import qualified Data.Text as T
import Control.Monad.IO.Class

import Clang.Format.Descr

data FormatterInfo = FormatterInfo
  { executableName :: String
  , knownOptions :: [ConfigItemT 'Supported]
  , baseStyles :: [T.Text]
  } deriving (Show)

class Formatter fmt where
  formatterInfo :: proxy fmt -> FormatterInfo
  formatFile :: MonadIO m => proxy fmt -> T.Text -> [ConfigItemT 'Value] -> FilePath -> m BS.ByteString