// Common Protocol Buffers for Saturnin services and microservices
// Copyright 2019 Firebird Project.  All rights reserved.
// https://www.firebirdsql.org/
// https://saturnin.rtfd.io
//
// License: The MIT License
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom
// the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

syntax = "proto3";

package saturnin.protobuf;

import "google/protobuf/struct.proto";

// Enums

// Service start mode

enum ExecutionModeEnum {
  EXEC_MODE_ANY     = 0 ;
  EXEC_MODE_THREAD  = 1 ;
  EXEC_MODE_PROCESS = 2 ;
}

// Service type

enum ServiceTypeEnum {
  SVC_TYPE_UNKNOWN       = 0 ; // Not a valid option, defined only to handle undefined values
  SVC_TYPE_DATA_PROVIDER = 1 ; // Data Pipe Service that collects and pass on data.
  SVC_TYPE_DATA_FILTER   = 2 ; // Data Pipe Service that process data from input and sends results to output
  SVC_TYPE_DATA_CONSUMER = 3 ; // Data Pipe Servuce that consumes input data
  SVC_TYPE_PROCESSING    = 4 ; // Service for REQEST/REPLY data processing
  SVC_TYPE_EXECUTOR      = 5 ; // Service that does things on request
  SVC_TYPE_CONTROL       = 6 ; // Service that manages other services
}

// Service Facilities

enum ServiceFacilitiesEnum {
  SVC_FACILITY_NONE          = 0 ;
  SVC_FACILITY_FBSP_SOCKET   = 1 ; // Standard Butler Service with one socket for FBSP communication
  SVC_FACILITY_INPUT_SERVER  = 2 ; // Service has/can have standard data pipe INPUT in SERVER mode
  SVC_FACILITY_INPUT_CLIENT  = 3 ; // Service has/can have standard data pipe INPUT in CLIENT mode
  SVC_FACILITY_OUTPUT_SERVER = 4 ; // Service has/can have standard data pipe OUTPUT in SERVER mode
  SVC_FACILITY_OUTPUT_CLIENT = 5 ; // Service has/can have standard data pipe OUTPUT in CLIENT mode
}

// Message severity level

enum SeverityLevel {
  SEVERITY_UNKNOWN  = 0 ;
  SEVERITY_INFO     = 1 ;
  SEVERITY_WARNING  = 2 ;
  SEVERITY_ERROR    = 3 ;
  SEVERITY_CRITICAL = 4 ;
}

// Generic data record

message GenDataRecord {
  uint64                    sequence  = 1 ; // Record sequence number (zero when sequence is not used)
  google.protobuf.Struct    data      = 2 ; // Data payload
}

// Generic Data package

message GenDataPackage {
  repeated GenDataRecord records = 1 ;
}
