evix 1.0.1

Library-first async Nix evaluation engine
@0xa74c8d9fb2f2f947;

struct ClientMessage {
  union {
    setup @0 :Setup;
    work @1 :Work;
    shutdown @2 :Void;
  }
}

struct Setup {
  config @0 :WorkerConfig;
}

struct Work {
  attrPath @0 :List(Text);
}

struct ServerMessage {
  union {
    ready @0 :Void;
    event @1 :Event;
    status @2 :WorkerStatus;
    error @3 :Text;
  }
}

enum WorkerStatus {
  ready @0;
  restart @1;
}

struct WorkerConfig {
  input @0 :Input;
  autoArgs @1 :List(AutoArg);
  forceRecurse @2 :Bool;
  gcRootsDir @3 :TextOpt;
  maxMemorySize @4 :UInt64;
  meta @5 :Bool;
  showInputDrvs @6 :Bool;
  overrideInputs @7 :List(StringPair);
  nixOptions @8 :List(StringPair);
}

struct Input {
  union {
    flake @0 :Text;
    expr @1 :Text;
    file @2 :Text;
  }
}

struct AutoArg {
  name @0 :Text;
  union {
    expr @1 :Text;
    str @2 :Text;
  }
}

struct StringPair {
  key @0 :Text;
  value @1 :Text;
}

struct TextOpt {
  union {
    none @0 :Void;
    some @1 :Text;
  }
}

struct Event {
  union {
    derivation @0 :Derivation;
    attrSet @1 :AttrSet;
    error @2 :EvalError;
  }
}

struct AttrSet {
  attr @0 :Text;
  attrPath @1 :List(Text);
  attrs @2 :List(Text);
}

struct Derivation {
  attr @0 :Text;
  attrPath @1 :List(Text);
  name @2 :Text;
  system @3 :Text;
  drvPath @4 :Text;
  outputs @5 :List(Output);
  metaJson @6 :TextOpt;
  inputDrvs @7 :List(InputDrv);
  constituents @8 :TextListOpt;
  gcRootError @9 :TextOpt;
}

struct Output {
  name @0 :Text;
  union {
    absent @1 :Void;
    path @2 :Text;
  }
}

struct InputDrv {
  drvPath @0 :Text;
  valueJson @1 :Text;
}

struct TextListOpt {
  union {
    none @0 :Void;
    some @1 :List(Text);
  }
}

struct EvalError {
  attr @0 :Text;
  attrPath @1 :List(Text);
  error @2 :Text;
  fatal @3 :Bool;
}