Previously, MixEvalArgs (a generic data type used to handle --arg, --argstr, and -I arguments to `nix-build`, `nix eval`, etc.) was storing the difference between --arg and --argstr by prepending a single character (either 'E' or 'S') to the value of the arg. This is messy and un-type-safe, so this commit refactors that to use a proper enum and a std::pair, which allows us to add a switch and get totality checking. yay, types! Change-Id: I883f8db3136d05dda190fac0a1b494386c2ff87b Reviewed-on: https://cl.tvl.fyi/c/depot/+/1862 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
26 lines
448 B
C++
26 lines
448 B
C++
#pragma once
|
|
|
|
#include "libutil/args.hh"
|
|
|
|
namespace nix {
|
|
|
|
class Store;
|
|
class EvalState;
|
|
class Bindings;
|
|
|
|
enum ArgType { kArgTypeString, kArgTypeExpr };
|
|
|
|
struct MixEvalArgs : virtual Args {
|
|
MixEvalArgs();
|
|
|
|
std::unique_ptr<Bindings> getAutoArgs(EvalState& state);
|
|
|
|
Strings searchPath;
|
|
|
|
private:
|
|
std::map<std::string, std::pair<ArgType, std::string>> auto_args_;
|
|
};
|
|
|
|
Path lookupFileArg(EvalState& state, std::string s);
|
|
|
|
} // namespace nix
|