diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2023-07-12 22:22:44 -0400 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2023-07-12 23:01:10 -0400 |
commit | 2c3fb0eb33d205d1937b7ed801bdb36bb301d1a8 (patch) | |
tree | d4840df3fbc1145cd779092d288296f037313eed /src/libcmd/built-path.hh | |
parent | cafb5e8a1751b2c951347d5d9188b2e0bee357be (diff) |
Move `BuiltPath` to its own header/C++ file in libcmd
It is less important, and used less widely, than `DerivedPath`.
Diffstat (limited to 'src/libcmd/built-path.hh')
-rw-r--r-- | src/libcmd/built-path.hh | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/libcmd/built-path.hh b/src/libcmd/built-path.hh new file mode 100644 index 000000000..c563a46e9 --- /dev/null +++ b/src/libcmd/built-path.hh @@ -0,0 +1,47 @@ +#include "derived-path.hh" + +namespace nix { + +/** + * A built derived path with hints in the form of optional concrete output paths. + * + * See 'BuiltPath' for more an explanation. + */ +struct BuiltPathBuilt { + StorePath drvPath; + std::map<std::string, StorePath> outputs; + + nlohmann::json toJSON(ref<Store> store) const; + static BuiltPathBuilt parse(const Store & store, std::string_view); + + GENERATE_CMP(BuiltPathBuilt, me->drvPath, me->outputs); +}; + +using _BuiltPathRaw = std::variant< + DerivedPath::Opaque, + BuiltPathBuilt +>; + +/** + * A built path. Similar to a DerivedPath, but enriched with the corresponding + * output path(s). + */ +struct BuiltPath : _BuiltPathRaw { + using Raw = _BuiltPathRaw; + using Raw::Raw; + + using Opaque = DerivedPathOpaque; + using Built = BuiltPathBuilt; + + inline const Raw & raw() const { + return static_cast<const Raw &>(*this); + } + + StorePathSet outPaths() const; + RealisedPath::Set toRealisedPaths(Store & store) const; + +}; + +typedef std::vector<BuiltPath> BuiltPaths; + +} |