mirror of
https://github.com/NixOS/nix
synced 2025-06-27 16:51:15 +02:00
variadic args for hint format
This commit is contained in:
parent
c6b3fcddb0
commit
7b7801d3f0
3 changed files with 30 additions and 16 deletions
|
@ -7,6 +7,7 @@
|
|||
#include <iostream>
|
||||
#include <iomanip>
|
||||
|
||||
#include "types.hh"
|
||||
#include <boost/format.hpp>
|
||||
|
||||
namespace nix
|
||||
|
@ -234,7 +235,7 @@ protected:
|
|||
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// format for hints. same as boost format, except templated values
|
||||
// format for hints. same as fmt, except templated values
|
||||
// are always in yellow.
|
||||
|
||||
template <class T>
|
||||
|
@ -251,20 +252,25 @@ std::ostream& operator<<(std::ostream &out, const yellowify<T> &y)
|
|||
return out << ANSI_YELLOW << y.value << ANSI_NORMAL;
|
||||
}
|
||||
|
||||
class hintfmt
|
||||
class hintformat
|
||||
{
|
||||
public:
|
||||
hintfmt(string format) :fmt(format)
|
||||
hintformat(string format) :fmt(format)
|
||||
{
|
||||
fmt.exceptions(boost::io::all_error_bits ^ boost::io::too_many_args_bit);
|
||||
}
|
||||
template<class T>
|
||||
hintfmt& operator%(const T &value)
|
||||
hintformat& operator%(const T &value)
|
||||
{
|
||||
fmt % yellowify(value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::string str() const
|
||||
{
|
||||
return fmt.str();
|
||||
}
|
||||
|
||||
template <typename U>
|
||||
friend class AddHint;
|
||||
private:
|
||||
|
@ -272,14 +278,22 @@ private:
|
|||
|
||||
};
|
||||
|
||||
template<typename... Args>
|
||||
inline hintformat hintfmt(const std::string & fs, const Args & ... args)
|
||||
{
|
||||
hintformat f(fs);
|
||||
formatHelper(f, args...);
|
||||
return f;
|
||||
}
|
||||
|
||||
// the template layer for adding a hint.
|
||||
template <class T>
|
||||
class AddHint : private T
|
||||
{
|
||||
public:
|
||||
T& hint(hintfmt &hfmt)
|
||||
T& hint(const hintformat &hf)
|
||||
{
|
||||
GetEI().hint = std::optional(hfmt.fmt.str());
|
||||
GetEI().hint = std::optional(hf.str());
|
||||
return *this;
|
||||
}
|
||||
T& nohint()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue