#pragma once ///@file #include "types.hh" #include "hash.hh" #include #include #include namespace nix::fetchers { typedef std::variant> Attr; /** * An `Attrs` can be thought of a JSON object restricted or simplified * to be "flat", not containing any subcontainers (arrays or objects) * and also not containing any `null`s. */ typedef std::map Attrs; Attrs jsonToAttrs(const nlohmann::json & json); nlohmann::json attrsToJSON(const Attrs & attrs); std::optional maybeGetStrAttr(const Attrs & attrs, const std::string & name); std::string getStrAttr(const Attrs & attrs, const std::string & name); std::optional maybeGetIntAttr(const Attrs & attrs, const std::string & name); uint64_t getIntAttr(const Attrs & attrs, const std::string & name); std::optional maybeGetBoolAttr(const Attrs & attrs, const std::string & name); bool getBoolAttr(const Attrs & attrs, const std::string & name); std::map attrsToQuery(const Attrs & attrs); }