#include "serialise.hh" #include "path-with-outputs.hh" #include "store-api.hh" #include "common-protocol.hh" #include "common-protocol-impl.hh" #include "derivations.hh" #include namespace nix { /* protocol-agnostic definitions */ std::string CommonProto::Serialise::read(const Store & store, CommonProto::ReadConn conn) { return readString(conn.from); } void CommonProto::Serialise::write(const Store & store, CommonProto::WriteConn conn, const std::string & str) { conn.to << str; } StorePath CommonProto::Serialise::read(const Store & store, CommonProto::ReadConn conn) { return store.parseStorePath(readString(conn.from)); } void CommonProto::Serialise::write(const Store & store, CommonProto::WriteConn conn, const StorePath & storePath) { conn.to << store.printStorePath(storePath); } ContentAddress CommonProto::Serialise::read(const Store & store, CommonProto::ReadConn conn) { return ContentAddress::parse(readString(conn.from)); } void CommonProto::Serialise::write(const Store & store, CommonProto::WriteConn conn, const ContentAddress & ca) { conn.to << renderContentAddress(ca); } Realisation CommonProto::Serialise::read(const Store & store, CommonProto::ReadConn conn) { std::string rawInput = readString(conn.from); return Realisation::fromJSON( nlohmann::json::parse(rawInput), "remote-protocol" ); } void CommonProto::Serialise::write(const Store & store, CommonProto::WriteConn conn, const Realisation & realisation) { conn.to << realisation.toJSON().dump(); } DrvOutput CommonProto::Serialise::read(const Store & store, CommonProto::ReadConn conn) { return DrvOutput::parse(readString(conn.from)); } void CommonProto::Serialise::write(const Store & store, CommonProto::WriteConn conn, const DrvOutput & drvOutput) { conn.to << drvOutput.to_string(); } std::optional CommonProto::Serialise>::read(const Store & store, CommonProto::ReadConn conn) { auto s = readString(conn.from); return s == "" ? std::optional {} : store.parseStorePath(s); } void CommonProto::Serialise>::write(const Store & store, CommonProto::WriteConn conn, const std::optional & storePathOpt) { conn.to << (storePathOpt ? store.printStorePath(*storePathOpt) : ""); } std::optional CommonProto::Serialise>::read(const Store & store, CommonProto::ReadConn conn) { return ContentAddress::parseOpt(readString(conn.from)); } void CommonProto::Serialise>::write(const Store & store, CommonProto::WriteConn conn, const std::optional & caOpt) { conn.to << (caOpt ? renderContentAddress(*caOpt) : ""); } }