syntax="proto3";

package eos.console;

import "Access.proto";
import "Acl.proto";
import "Archive.proto";
import "Attr.proto";
import "Authentication.proto";
import "Backup.proto";
import "ChangeMode.proto";
import "Chown.proto";
import "Config.proto";
import "Convert.proto";
import "Cp.proto";
import "Debug.proto";
import "Devices.proto";
import "Df.proto";
import "Evict.proto";
import "File.proto";
import "Fileinfo.proto";
import "Find.proto";
import "Fs.proto";
import "Fsck.proto";
import "Geosched.proto";
import "Group.proto";
import "Health.proto";
import "Io.proto";
import "Ls.proto";
import "MakeDirectory.proto";
import "Map.proto";
import "Member.proto";
import "Move.proto";
import "Node.proto";
import "Ns.proto";
import "QoS.proto";
import "Quota.proto";
import "Recycle.proto";
import "Rm.proto";
import "Rmdir.proto";
import "Route.proto";
import "Sched.proto";
import "Space.proto";
import "StagerRm.proto";
import "Status.proto";
import "StatWnc.proto";
import "Token.proto";
import "Touch.proto";
import "Version.proto";
import "Vid.proto";
import "Who.proto";
import "Whoami.proto";

//------------------------------------------------------------------------------
// Request message sent to the server
//------------------------------------------------------------------------------
message RequestProto {
  // Types of output format supported
  enum FormatType {
    DEFAULT = 0;
    JSON    = 1;
    HTTP    = 2;
    FUSE    = 3;
  }

  FormatType format = 1;

  // Actual request data object
  oneof command {
    AclProto acl           = 2;
    NsProto  ns            = 3;
    //    DrainProto drain       = 4; @note not used, can be reused later on
    FindProto find         = 5;
    FsProto fs             = 6;
    RmProto rm             = 7;
    StagerRmProto stagerRm = 8;
    RouteProto route       = 9;
    RecycleProto recycle   = 10;
    IoProto io             = 11;
    GroupProto group       = 12;
    DebugProto debug       = 13;    
    NodeProto node         = 14;
    QuotaProto quota       = 15;
    SpaceProto space       = 16;
    ConfigProto config     = 17;
    AccessProto access     = 18;
    FsckProto fsck         = 19;
    TokenProto token       = 20;
    QoSProto qos           = 21;
    ConvertProto convert   = 22;
    ArchiveProto archive   = 23;
    MoveProto mv           = 24;
    RmdirProto rmdir       = 25;
    TouchProto touch       = 26;
    FileinfoProto fileinfo = 27;
    AttrProto attr         = 28;
    FileProto file         = 29;
    WhoamiProto whoami     = 33;
    WhoProto who           = 34;
    MkdirProto mkdir       = 35;
    StatProto stat         = 36;
    VidProto vid           = 37;
    // TransferProto transfer = 38; @note not used, can be reused later on
    VersionProto version   = 39;
    ChmodProto chmod       = 40;
    ChownProto chown       = 41;
    LsProto ls             = 42;
    CpProto cp             = 43;
    GeoschedProto geosched = 44;
    HealthProto health     = 45;
    BackupProto backup     = 46;
    MapProto map           = 47;
    MemberProto member     = 48;
    StatusProto status     = 49;
    FileRegisterProto record = 50;
    DfProto df             = 51;
    SchedProto sched       = 52;
    EvictProto evict       = 53;
    DevicesProto devices   = 54;
  }

  string Comment = 30;
  bool DontColor = 31; // True if the output fd is not a tty.
  AuthProto auth = 32;
}
