//Example of topology
syntax = "proto3";
package service;

import "context.proto";

service ServiceService {
  rpc GetServiceList (context.Empty) returns (ServiceList) {}
  rpc CreateService (Service) returns (ServiceId) {}
  rpc UpdateService (Service) returns (ServiceId) {}
  rpc DeleteService (Service) returns (ServiceId) {}
  rpc GetServiceById (ServiceId) returns (Service) {}
  rpc GetConnectionList (context.Empty) returns (ConnectionList) {}
  
}

message ServiceList {
  repeated Service cs = 1;
}

message Service {
  ServiceId cs_id = 1;
  ServiceType serviceType = 2;
  repeated context.EndPointId endpointList = 3;
  repeated context.Constraint constraint = 4;
  ServiceState serviceState = 5;
  ServiceConfig serviceConfig = 6;
}

enum ServiceType {
  UNKNOWN = 0;
  L3NM = 1;
  L2NM = 2;
  TAPI_CONNECTIVITY_SERVICE = 3;
}

message ServiceConfig {
  string serviceConfig = 1;
}

message ServiceId {
  context.ContextId contextId = 1;
  context.Uuid cs_id = 2;
}

message ServiceIdList {
  repeated ServiceId serviceIdList = 1;
}

message ServiceState {
  ServiceStateEnum serviceState = 1;
}

enum ServiceStateEnum {
  PLANNED = 0;
  ACTIVE =  1;
  PENDING_REMOVAL = 2;
}

message ConnectionList {
  repeated Connection connectionList = 1;
}

message Connection {
  ConnectionId con_id = 1;
  ServiceId relatedServiceId = 2;
  repeated context.EndPointId path = 3;
}

message ConnectionId {
  context.Uuid con_id = 1;
}

