Change-Id: Ib1714abce2815873eb50dbeac088e812fa9098ab Reviewed-on: https://cl.tvl.fyi/c/depot/+/8686 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de> Autosubmit: Profpatsch <mail@profpatsch.de>
		
			
				
	
	
		
			22 lines
		
	
	
	
		
			864 B
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
	
		
			864 B
		
	
	
	
		
			Haskell
		
	
	
	
	
	
{-# LANGUAGE QuasiQuotes #-}
 | 
						|
 | 
						|
module ArglibNetencode where
 | 
						|
 | 
						|
import Data.Attoparsec.ByteString qualified as Atto
 | 
						|
import ExecHelpers
 | 
						|
import Label
 | 
						|
import Netencode qualified
 | 
						|
import PossehlAnalyticsPrelude
 | 
						|
import System.Posix.Env.ByteString qualified as ByteEnv
 | 
						|
 | 
						|
arglibNetencode :: CurrentProgramName -> Maybe (Label "arglibEnvvar" Text) -> IO Netencode.T
 | 
						|
arglibNetencode progName mEnvvar = do
 | 
						|
  let envvar = mEnvvar <&> (.arglibEnvvar) & fromMaybe "ARGLIB_NETENCODE" & textToBytesUtf8
 | 
						|
  ByteEnv.getEnv envvar >>= \case
 | 
						|
    Nothing -> dieUserError progName [fmt|could not read args, envvar {envvar} not set|]
 | 
						|
    Just bytes ->
 | 
						|
      case Atto.parseOnly (Netencode.netencodeParser <* Atto.endOfInput) bytes of
 | 
						|
        Left err -> dieEnvironmentProblem progName [fmt|arglib parsing error: {err}|]
 | 
						|
        Right t -> do
 | 
						|
          ByteEnv.unsetEnv envvar
 | 
						|
          pure t
 |