// ###############################################################
// Copyright(c) Carl Zeiss AG, Germany. All Rights Reserved.
//
// Permission is granted to use and distribute this code,
// as long as this copyright notice remains part of the code.
// ###############################################################

syntax = "proto3";
package zen_api.lm.hardware.v2;
import "zen_api/lm/hardware/v2/reflector_data.proto";

// The ReflectorChangerServiceGetPositionRequest class.
message ReflectorChangerServiceGetPositionRequest {
}
// Position index of the objective.
message ReflectorChangerServiceGetPositionResponse {
   // The position index.
   int32 value = 1;
}
// The ReflectorChangerServiceGetReflectorsRequest class.
message ReflectorChangerServiceGetReflectorsRequest {
}
// A list of available objectives.
message ReflectorChangerServiceGetReflectorsResponse {
   // The objectives.
   repeated ReflectorData reflectors = 1;
}
// The ReflectorChangerServiceMoveToRequest class.
message ReflectorChangerServiceMoveToRequest {
   // New position index.
   int32 position_index = 1;
}
// Describes the result of a ReflectorChanger.MoveTo request.
message ReflectorChangerServiceMoveToResponse {
}
// The IReflectorChangerService interface.
service ReflectorChangerService {
   // Gets the reflector position.
   rpc GetPosition (ReflectorChangerServiceGetPositionRequest) returns (ReflectorChangerServiceGetPositionResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Gets the reflectors.
   rpc GetReflectors (ReflectorChangerServiceGetReflectorsRequest) returns (ReflectorChangerServiceGetReflectorsResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
   // Moves the reflector changer to the given position index.
   rpc MoveTo (ReflectorChangerServiceMoveToRequest) returns (ReflectorChangerServiceMoveToResponse)
   {
      option idempotency_level = NO_SIDE_EFFECTS;
   }
}
