feat(users/Profpatsch): init haskell exec-helpers
Mirrors the rust exec-helpers Change-Id: I8fba49525949a8f38ca8c215e2ec7ba9d97d3bf9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6116 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
240edcd289
commit
0fc1634255
3 changed files with 80 additions and 0 deletions
48
users/Profpatsch/execline/ExecHelpers.hs
Normal file
48
users/Profpatsch/execline/ExecHelpers.hs
Normal file
|
@ -0,0 +1,48 @@
|
|||
{-# LANGUAGE DerivingStrategies #-}
|
||||
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE QuasiQuotes #-}
|
||||
{-# LANGUAGE TypeApplications #-}
|
||||
|
||||
module ExecHelpers where
|
||||
|
||||
import Data.String (IsString)
|
||||
import MyPrelude
|
||||
import qualified System.Exit as Sys
|
||||
|
||||
newtype CurrentProgramName = CurrentProgramName { unCurrentProgramName :: Text }
|
||||
deriving newtype (Show, Eq, Ord, IsString)
|
||||
|
||||
-- | Exit 1 to signify a generic expected error
|
||||
-- (e.g. something that sometimes just goes wrong, like a nix build).
|
||||
dieExpectedError :: CurrentProgramName -> Text -> IO a
|
||||
dieExpectedError = dieWith 1
|
||||
|
||||
-- | Exit 100 to signify a user error (“the user is holding it wrong”).
|
||||
-- This is a permanent error, if the program is executed the same way
|
||||
-- it should crash with 100 again.
|
||||
dieUserError :: CurrentProgramName -> Text -> IO a
|
||||
dieUserError = dieWith 100
|
||||
|
||||
-- | Exit 101 to signify an unexpected crash (failing assertion or panic).
|
||||
diePanic :: CurrentProgramName -> Text -> IO a
|
||||
diePanic = dieWith 101
|
||||
|
||||
-- | Exit 111 to signify a temporary error (such as resource exhaustion)
|
||||
dieTemporary :: CurrentProgramName -> Text -> IO a
|
||||
dieTemporary = dieWith 111
|
||||
|
||||
-- | Exit 126 to signify an environment problem
|
||||
-- (the user has set up stuff incorrectly so the program cannot work)
|
||||
dieEnvironmentProblem :: CurrentProgramName -> Text -> IO a
|
||||
dieEnvironmentProblem = dieWith 126
|
||||
|
||||
-- | Exit 127 to signify a missing executable.
|
||||
dieMissingExecutable :: CurrentProgramName -> Text -> IO a
|
||||
dieMissingExecutable = dieWith 127
|
||||
|
||||
dieWith :: Natural -> CurrentProgramName -> Text -> IO a
|
||||
dieWith status currentProgramName msg = do
|
||||
putStderrLn [fmt|{currentProgramName & unCurrentProgramName}: {msg}|]
|
||||
Sys.exitWith
|
||||
(Sys.ExitFailure (status & fromIntegral @Natural @Int))
|
|
@ -7,6 +7,23 @@ let
|
|||
}
|
||||
(builtins.readFile ./exec_helpers.rs);
|
||||
|
||||
exec-helpers-hs = pkgs.haskellPackages.mkDerivation {
|
||||
pname = "exec-helpers";
|
||||
version = "0.1.0";
|
||||
|
||||
src = depot.users.Profpatsch.exactSource ./. [
|
||||
./exec-helpers.cabal
|
||||
./ExecHelpers.hs
|
||||
];
|
||||
|
||||
libraryHaskellDepends = [
|
||||
depot.users.Profpatsch.my-prelude
|
||||
];
|
||||
|
||||
isLibrary = true;
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
|
||||
print-one-env = depot.nix.writers.rustSimple
|
||||
{
|
||||
name = "print-one-env";
|
||||
|
@ -32,6 +49,7 @@ in
|
|||
depot.nix.readTree.drvTargets {
|
||||
inherit
|
||||
exec-helpers
|
||||
exec-helpers-hs
|
||||
print-one-env
|
||||
;
|
||||
}
|
||||
|
|
14
users/Profpatsch/execline/exec-helpers.cabal
Normal file
14
users/Profpatsch/execline/exec-helpers.cabal
Normal file
|
@ -0,0 +1,14 @@
|
|||
cabal-version: 2.4
|
||||
name: exec-helpers
|
||||
version: 0.1.0.0
|
||||
author: Profpatsch
|
||||
maintainer: mail@profpatsch.de
|
||||
|
||||
library
|
||||
exposed-modules: ExecHelpers
|
||||
|
||||
build-depends:
|
||||
base ^>=4.15.1.0,
|
||||
my-prelude
|
||||
|
||||
default-language: Haskell2010
|
Loading…
Reference in a new issue