packages feed

cachix-0.3.0: src/Cachix/Client/Store/Context.hs

{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}

module Cachix.Client.Store.Context where

import qualified Data.Map as M
import qualified Language.C.Inline.Context as C
import qualified Language.C.Inline.Cpp as C
import qualified Language.C.Types as C
import Protolude hiding (Set)

-- | A Nix @ref@
data Ref a

-- | A Nix @PathSet@ aka @std::set<Path>@ aka @std::set<std::string>>@
type PathSet = Set CxxString

data NixStore

data ValidPathInfo

-- | An STL @set@
data Set a

-- | An STL @::iterator@
data Iterator a

-- | An @std::string@
data CxxString

context :: C.Context
context =
  C.cppCtx <> C.fptrCtx <> C.bsCtx
    <> mempty
      { C.ctxTypesTable =
          M.singleton (C.TypeName "refStore") [t|Ref NixStore|]
            <> M.singleton (C.TypeName "refValidPathInfo")
                 [t|Ref ValidPathInfo|]
            <> M.singleton (C.TypeName "PathSet") [t|PathSet|]
            <> M.singleton (C.TypeName "PathSetIterator") [t|Iterator PathSet|]
        }