Use upstream json_fwd.hpp to speed up compilation
This commit is contained in:
parent
cb1a79a96a
commit
45b740c18b
|
@ -1,6 +1,8 @@
|
||||||
#include "lockfile.hh"
|
#include "lockfile.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
namespace nix::flake {
|
namespace nix::flake {
|
||||||
|
|
||||||
LockedInput::LockedInput(const nlohmann::json & json)
|
LockedInput::LockedInput(const nlohmann::json & json)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#include "flakeref.hh"
|
#include "flakeref.hh"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json_fwd.hpp>
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
class Store;
|
class Store;
|
||||||
|
|
|
@ -2521,7 +2521,7 @@ static std::regex shVarName("[A-Za-z_][A-Za-z0-9_]*");
|
||||||
|
|
||||||
void DerivationGoal::writeStructuredAttrs()
|
void DerivationGoal::writeStructuredAttrs()
|
||||||
{
|
{
|
||||||
auto & structuredAttrs = parsedDrv->getStructuredAttrs();
|
auto structuredAttrs = parsedDrv->getStructuredAttrs();
|
||||||
if (!structuredAttrs) return;
|
if (!structuredAttrs) return;
|
||||||
|
|
||||||
auto json = *structuredAttrs;
|
auto json = *structuredAttrs;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "parsed-derivations.hh"
|
#include "parsed-derivations.hh"
|
||||||
|
|
||||||
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
ParsedDerivation::ParsedDerivation(const Path & drvPath, BasicDerivation & drv)
|
ParsedDerivation::ParsedDerivation(const Path & drvPath, BasicDerivation & drv)
|
||||||
|
@ -9,13 +11,15 @@ ParsedDerivation::ParsedDerivation(const Path & drvPath, BasicDerivation & drv)
|
||||||
auto jsonAttr = drv.env.find("__json");
|
auto jsonAttr = drv.env.find("__json");
|
||||||
if (jsonAttr != drv.env.end()) {
|
if (jsonAttr != drv.env.end()) {
|
||||||
try {
|
try {
|
||||||
structuredAttrs = nlohmann::json::parse(jsonAttr->second);
|
structuredAttrs = std::make_unique<nlohmann::json>(nlohmann::json::parse(jsonAttr->second));
|
||||||
} catch (std::exception & e) {
|
} catch (std::exception & e) {
|
||||||
throw Error("cannot process __json attribute of '%s': %s", drvPath, e.what());
|
throw Error("cannot process __json attribute of '%s': %s", drvPath, e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ParsedDerivation::~ParsedDerivation() { }
|
||||||
|
|
||||||
std::optional<std::string> ParsedDerivation::getStringAttr(const std::string & name) const
|
std::optional<std::string> ParsedDerivation::getStringAttr(const std::string & name) const
|
||||||
{
|
{
|
||||||
if (structuredAttrs) {
|
if (structuredAttrs) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "derivations.hh"
|
#include "derivations.hh"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json_fwd.hpp>
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
@ -8,15 +8,17 @@ class ParsedDerivation
|
||||||
{
|
{
|
||||||
Path drvPath;
|
Path drvPath;
|
||||||
BasicDerivation & drv;
|
BasicDerivation & drv;
|
||||||
std::optional<nlohmann::json> structuredAttrs;
|
std::unique_ptr<nlohmann::json> structuredAttrs;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ParsedDerivation(const Path & drvPath, BasicDerivation & drv);
|
ParsedDerivation(const Path & drvPath, BasicDerivation & drv);
|
||||||
|
|
||||||
const std::optional<nlohmann::json> & getStructuredAttrs() const
|
~ParsedDerivation();
|
||||||
|
|
||||||
|
const nlohmann::json * getStructuredAttrs() const
|
||||||
{
|
{
|
||||||
return structuredAttrs;
|
return structuredAttrs.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<std::string> getStringAttr(const std::string & name) const;
|
std::optional<std::string> getStringAttr(const std::string & name) const;
|
||||||
|
|
|
@ -1,10 +1,64 @@
|
||||||
#pragma once
|
#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
|
||||||
|
#define INCLUDE_NLOHMANN_JSON_FWD_HPP_
|
||||||
|
|
||||||
namespace nlohmann {
|
#include <cstdint> // int64_t, uint64_t
|
||||||
|
#include <map> // map
|
||||||
|
#include <memory> // allocator
|
||||||
|
#include <string> // string
|
||||||
|
#include <vector> // vector
|
||||||
|
|
||||||
struct json : basic_json<>
|
/*!
|
||||||
|
@brief namespace for Niels Lohmann
|
||||||
|
@see https://github.com/nlohmann
|
||||||
|
@since version 1.0.0
|
||||||
|
*/
|
||||||
|
namespace nlohmann
|
||||||
{
|
{
|
||||||
using basic_json<>::basic_json;
|
/*!
|
||||||
};
|
@brief default JSONSerializer template argument
|
||||||
|
|
||||||
}
|
This serializer ignores the template arguments and uses ADL
|
||||||
|
([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl))
|
||||||
|
for serialization.
|
||||||
|
*/
|
||||||
|
template<typename T = void, typename SFINAE = void>
|
||||||
|
struct adl_serializer;
|
||||||
|
|
||||||
|
template<template<typename U, typename V, typename... Args> class ObjectType =
|
||||||
|
std::map,
|
||||||
|
template<typename U, typename... Args> class ArrayType = std::vector,
|
||||||
|
class StringType = std::string, class BooleanType = bool,
|
||||||
|
class NumberIntegerType = std::int64_t,
|
||||||
|
class NumberUnsignedType = std::uint64_t,
|
||||||
|
class NumberFloatType = double,
|
||||||
|
template<typename U> class AllocatorType = std::allocator,
|
||||||
|
template<typename T, typename SFINAE = void> class JSONSerializer =
|
||||||
|
adl_serializer>
|
||||||
|
class basic_json;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief JSON Pointer
|
||||||
|
|
||||||
|
A JSON pointer defines a string syntax for identifying a specific value
|
||||||
|
within a JSON document. It can be used with functions `at` and
|
||||||
|
`operator[]`. Furthermore, JSON pointers are the base for JSON patches.
|
||||||
|
|
||||||
|
@sa [RFC 6901](https://tools.ietf.org/html/rfc6901)
|
||||||
|
|
||||||
|
@since version 2.0.0
|
||||||
|
*/
|
||||||
|
template<typename BasicJsonType>
|
||||||
|
class json_pointer;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief default JSON class
|
||||||
|
|
||||||
|
This type is the default specialization of the @ref basic_json class which
|
||||||
|
uses the standard template types.
|
||||||
|
|
||||||
|
@since version 1.0.0
|
||||||
|
*/
|
||||||
|
using json = basic_json<>;
|
||||||
|
} // namespace nlohmann
|
||||||
|
|
||||||
|
#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_
|
||||||
|
|
Loading…
Reference in a new issue