Nix  2.93.0-dev
Lix: A modern, delicious implementation of the Nix package manager; unstable internal interfaces
Loading...
Searching...
No Matches
serve-protocol.hh File Reference
Include dependency graph for serve-protocol.hh:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  nix::ServeProto
 
struct  nix::ServeProto::ReadConn
 
struct  nix::ServeProto::WriteConn
 
struct  nix::ServeProto::Serialise< BuildResult >
 
struct  nix::ServeProto::Serialise< UnkeyedValidPathInfo >
 
struct  nix::ServeProto::Serialise< std::vector< T > >
 
struct  nix::ServeProto::Serialise< std::set< T > >
 
struct  nix::ServeProto::Serialise< std::tuple< Ts... > >
 
struct  nix::ServeProto::Serialise< std::map< K COMMA_ V > >
 

Macros

#define SERVE_MAGIC_1   0x390c9deb
 
#define SERVE_MAGIC_2   0x5452eecb
 
#define SERVE_PROTOCOL_VERSION   (2 << 8 | 7)
 
#define GET_PROTOCOL_MAJOR(x)   ((x) & 0xff00)
 
#define GET_PROTOCOL_MINOR(x)   ((x) & 0x00ff)
 
#define DECLARE_SERVE_SERIALISER(T)
 
#define COMMA_   ,
 

Functions

Sinknix::operator<< (Sink &sink, ServeProto::Command op)
 
std::ostream & nix::operator<< (std::ostream &s, ServeProto::Command op)
 

Macro Definition Documentation

◆ DECLARE_SERVE_SERIALISER

#define DECLARE_SERVE_SERIALISER ( T)
Value:
struct ServeProto::Serialise< T > \
{ \
static T read(const Store & store, ServeProto::ReadConn conn); \
[[nodiscard]] static WireFormatGenerator write(const Store & store, ServeProto::WriteConn conn, const T & t); \
};

Declare a canonical serialiser pair for the worker protocol.

We specialise the struct merely to indicate that we are implementing the function for the given type.

Some sort of template<...> must be used with the caller for this to be legal specialization syntax. See below for what that looks like in practice.

Function Documentation

◆ operator<<() [1/2]

Sink & nix::operator<< ( Sink & sink,
ServeProto::Command op )
inline

Convenience for sending operation codes.

Todo
Switch to using ServeProto::Serialize instead probably. But this was not done at this time so there would be less churn.

◆ operator<<() [2/2]

std::ostream & nix::operator<< ( std::ostream & s,
ServeProto::Command op )
inline

Convenience for debugging.

Todo
Perhaps render known opcodes more nicely.