mirror of
https://github.com/NixOS/nix.git
synced 2025-11-28 21:21:00 +01:00
All OS and IO operations should be moved out, leaving only some misc portable pure functions. This is useful to avoid copious CPP when doing things like Windows and Emscripten ports. Newly exposed functions to break cycles: - `restoreSignals` - `updateWindowSize`
85 lines
1.9 KiB
C++
85 lines
1.9 KiB
C++
#pragma once
|
||
///@file
|
||
|
||
#include "comparator.hh"
|
||
#include "derived-path.hh"
|
||
#include "variant-wrapper.hh"
|
||
|
||
#include <nlohmann/json_fwd.hpp>
|
||
|
||
namespace nix {
|
||
|
||
class BadNixStringContextElem : public Error
|
||
{
|
||
public:
|
||
std::string_view raw;
|
||
|
||
template<typename... Args>
|
||
BadNixStringContextElem(std::string_view raw_, const Args & ... args)
|
||
: Error("")
|
||
{
|
||
raw = raw_;
|
||
auto hf = hintfmt(args...);
|
||
err.msg = hintfmt("Bad String Context element: %1%: %2%", normaltxt(hf.str()), raw);
|
||
}
|
||
};
|
||
|
||
struct NixStringContextElem {
|
||
/**
|
||
* Plain opaque path to some store object.
|
||
*
|
||
* Encoded as just the path: ‘<path>’.
|
||
*/
|
||
using Opaque = SingleDerivedPath::Opaque;
|
||
|
||
/**
|
||
* Path to a derivation and its entire build closure.
|
||
*
|
||
* The path doesn't just refer to derivation itself and its closure, but
|
||
* also all outputs of all derivations in that closure (including the
|
||
* root derivation).
|
||
*
|
||
* Encoded in the form ‘=<drvPath>’.
|
||
*/
|
||
struct DrvDeep {
|
||
StorePath drvPath;
|
||
|
||
GENERATE_CMP(DrvDeep, me->drvPath);
|
||
};
|
||
|
||
/**
|
||
* Derivation output.
|
||
*
|
||
* Encoded in the form ‘!<output>!<drvPath>’.
|
||
*/
|
||
using Built = SingleDerivedPath::Built;
|
||
|
||
using Raw = std::variant<
|
||
Opaque,
|
||
DrvDeep,
|
||
Built
|
||
>;
|
||
|
||
Raw raw;
|
||
|
||
GENERATE_CMP(NixStringContextElem, me->raw);
|
||
|
||
MAKE_WRAPPER_CONSTRUCTOR(NixStringContextElem);
|
||
|
||
/**
|
||
* Decode a context string, one of:
|
||
* - ‘<path>’
|
||
* - ‘=<path>’
|
||
* - ‘!<name>!<path>’
|
||
*
|
||
* @param xpSettings Stop-gap to avoid globals during unit tests.
|
||
*/
|
||
static NixStringContextElem parse(
|
||
std::string_view s,
|
||
const ExperimentalFeatureSettings & xpSettings = experimentalFeatureSettings);
|
||
std::string to_string() const;
|
||
};
|
||
|
||
typedef std::set<NixStringContextElem> NixStringContext;
|
||
|
||
}
|