{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE NoFieldSelectors  #-}

module Stack.Types.DockerEntrypoint
  ( DockerEntrypoint (..)
  , DockerUser (..)
  ) where

import           Stack.Prelude
import           System.PosixCompat.Types ( FileMode, GroupID, UserID )

-- | Data passed into Docker container for the Docker entrypoint's use

newtype DockerEntrypoint = DockerEntrypoint
  { DockerEntrypoint -> Maybe DockerUser
user :: Maybe DockerUser
    -- ^ UID/GID/etc of host user, if we wish to perform UID/GID switch in

    -- container

  }
  deriving (ReadPrec [DockerEntrypoint]
ReadPrec DockerEntrypoint
Int -> ReadS DockerEntrypoint
ReadS [DockerEntrypoint]
(Int -> ReadS DockerEntrypoint)
-> ReadS [DockerEntrypoint]
-> ReadPrec DockerEntrypoint
-> ReadPrec [DockerEntrypoint]
-> Read DockerEntrypoint
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS DockerEntrypoint
readsPrec :: Int -> ReadS DockerEntrypoint
$creadList :: ReadS [DockerEntrypoint]
readList :: ReadS [DockerEntrypoint]
$creadPrec :: ReadPrec DockerEntrypoint
readPrec :: ReadPrec DockerEntrypoint
$creadListPrec :: ReadPrec [DockerEntrypoint]
readListPrec :: ReadPrec [DockerEntrypoint]
Read, Int -> DockerEntrypoint -> ShowS
[DockerEntrypoint] -> ShowS
DockerEntrypoint -> String
(Int -> DockerEntrypoint -> ShowS)
-> (DockerEntrypoint -> String)
-> ([DockerEntrypoint] -> ShowS)
-> Show DockerEntrypoint
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DockerEntrypoint -> ShowS
showsPrec :: Int -> DockerEntrypoint -> ShowS
$cshow :: DockerEntrypoint -> String
show :: DockerEntrypoint -> String
$cshowList :: [DockerEntrypoint] -> ShowS
showList :: [DockerEntrypoint] -> ShowS
Show)

-- | Docker host user info

data DockerUser = DockerUser
  { DockerUser -> UserID
uid :: UserID -- ^ uid

  , DockerUser -> GroupID
gid :: GroupID -- ^ gid

  , DockerUser -> [GroupID]
groups :: [GroupID] -- ^ Supplemental groups

  , DockerUser -> FileMode
umask :: FileMode -- ^ File creation mask }

  }
  deriving (ReadPrec [DockerUser]
ReadPrec DockerUser
Int -> ReadS DockerUser
ReadS [DockerUser]
(Int -> ReadS DockerUser)
-> ReadS [DockerUser]
-> ReadPrec DockerUser
-> ReadPrec [DockerUser]
-> Read DockerUser
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS DockerUser
readsPrec :: Int -> ReadS DockerUser
$creadList :: ReadS [DockerUser]
readList :: ReadS [DockerUser]
$creadPrec :: ReadPrec DockerUser
readPrec :: ReadPrec DockerUser
$creadListPrec :: ReadPrec [DockerUser]
readListPrec :: ReadPrec [DockerUser]
Read, Int -> DockerUser -> ShowS
[DockerUser] -> ShowS
DockerUser -> String
(Int -> DockerUser -> ShowS)
-> (DockerUser -> String)
-> ([DockerUser] -> ShowS)
-> Show DockerUser
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DockerUser -> ShowS
showsPrec :: Int -> DockerUser -> ShowS
$cshow :: DockerUser -> String
show :: DockerUser -> String
$cshowList :: [DockerUser] -> ShowS
showList :: [DockerUser] -> ShowS
Show)