-- | Provides all the values out of -- the environment variables of the system module Aws.Lambda.Runtime.Environment ( functionMemory, apiEndpoint, handlerName, taskRoot, functionName, functionVersion, logStreamName, logGroupName, setXRayTrace, ) where import qualified Aws.Lambda.Runtime.Error as Error import Control.Exception.Safe.Checked (Throws, throw) import Data.Text (Text, pack, unpack) import qualified System.Environment as Environment import qualified Text.Read as Read logGroupName :: Throws Error.EnvironmentVariableNotSet => IO Text logGroupName = readEnvironmentVariable "AWS_LAMBDA_LOG_GROUP_NAME" logStreamName :: Throws Error.EnvironmentVariableNotSet => IO Text logStreamName = readEnvironmentVariable "AWS_LAMBDA_LOG_STREAM_NAME" functionVersion :: Throws Error.EnvironmentVariableNotSet => IO Text functionVersion = readEnvironmentVariable "AWS_LAMBDA_FUNCTION_VERSION" functionName :: Throws Error.EnvironmentVariableNotSet => IO Text functionName = readEnvironmentVariable "AWS_LAMBDA_FUNCTION_NAME" setXRayTrace :: Text -> IO () setXRayTrace = Environment.setEnv "_X_AMZN_TRACE_ID" . unpack taskRoot :: Throws Error.EnvironmentVariableNotSet => IO Text taskRoot = readEnvironmentVariable "LAMBDA_TASK_ROOT" handlerName :: Throws Error.EnvironmentVariableNotSet => IO Text handlerName = readEnvironmentVariable "_HANDLER" apiEndpoint :: Throws Error.EnvironmentVariableNotSet => IO Text apiEndpoint = readEnvironmentVariable "AWS_LAMBDA_RUNTIME_API" functionMemory :: Throws Error.Parsing => Throws Error.EnvironmentVariableNotSet => IO Int functionMemory = do let envVar = "AWS_LAMBDA_FUNCTION_MEMORY_SIZE" memoryValue <- readEnvironmentVariable envVar case Read.readMaybe (unpack memoryValue) of Just value -> pure value Nothing -> throw (Error.Parsing envVar memoryValue envVar) readEnvironmentVariable :: Throws Error.EnvironmentVariableNotSet => Text -> IO Text readEnvironmentVariable envVar = do v <- Environment.lookupEnv (unpack envVar) case v of Just value -> pure . pack $ value Nothing -> throw (Error.EnvironmentVariableNotSet envVar)