/*
Сервис считывателей
*/
syntax = "proto3";
package deviceapis.device.v1;
import "deviceapis/device/v1/deviceapis_device_common_v1.proto";
import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/field_mask.proto";
option cc_enable_arenas = true;
option csharp_namespace = "Deviceapis.Device.V1";
option go_package = "/deviceapis_device_v1";
option java_multiple_files = false;
option java_outer_classname = "DeviceapisDeviceV1Proto";
option java_package = "ru.deviceapis.device.v1";
option java_string_check_utf8 = true;
option objc_class_prefix = "DEVICEAPISDEVICEV1";
option optimize_for = LITE_RUNTIME;
option php_namespace = "Deviceapis\\Device\\V1";
option ruby_package = "Deviceapis::Device::V1";
// Сервис считывателей
service ReaderService {
    // Метод редактирования считывателя
    rpc EditReader ( EditReaderRequest ) returns ( EditReaderResponse ) {
        option (google.api.http) = {
            patch: "/device/api/v1/reader/{data.id}",
            body: "data"
        };
    }
    // Метод получения считывателя
    rpc GetReader ( GetReaderRequest ) returns ( GetReaderResponse ) {
        option (google.api.http) = { get: "/device/api/v1/reader/{id}" };
    }
}
// Запрос редактирования считывателя
message EditReaderRequest {
    // Считыватель
    Reader data = 1 [(google.api.field_behavior) = REQUIRED];
    // Маска полей обновления
    google.protobuf.FieldMask update_mask = 2;
}
// Ответ на запрос редактирования считывателя
message EditReaderResponse {
    // Ошибка запроса
    message Error {
        // Причина ошибки
        oneof reason {
            // Ошибка валидации
            ValidationError validation = 1;
            // Ошибка сохранения
            Reader.SavingError saving = 2;
        }
    }
    // Тип ответа
    oneof type {
        // Ошибка
        Error error = 1;
    }
}
// Запрос получения считывателя
message GetReaderRequest {
    // Идентификатор.
    // id=100 - Считыватель внутренний.
    // id=1 - Считыватель внешний №1.
    // id=2 - Считыватель внешний №2 и тд
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
}
// Ответ на запрос получения считывателя
message GetReaderResponse {
    // Тип ответа
    oneof type {
        // Считыватель
        Reader data = 1;
    }
}
// Считыватель
message Reader {
    // Ошибки сохранения
    message SavingError {
        // Профиль не поддерживается для этого считывателя
        message ProfileIsNotSupported {
            // Список идентификаторов профилей, которые не поддерживаются на считывателе
            repeated int32 profile_ids = 1;
        }
        // Выбранный профиль не найден
        message ProfileNotFound {
        }
        // Считыватель не найден
        message ReaderNotFound {
        }
        // Причина ошибки
        oneof reason {
            // Считыватель не найден
            ReaderNotFound reader_not_found = 1;
            // Профиль не поддерживается для этого считывателя
            ProfileIsNotSupported profile_is_not_supported = 2;
            // Выбранный профиль не найден
            ProfileNotFound profile_not_found = 3;
        }
    }
    // Направление
    enum DirectionType {
        // Значение не указано
        DIRECTION_TYPE_UNKNOWN = 0;
        // Вход
        IN = 1;
        // Выход
        OUT = 2;
    }
    // Идентификатор.
    // id=100 - Считыватель внутренний.
    // id=1 - Считыватель внешний №1.
    // id=2 - Считыватель внешний №2 и тд
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Список идентификаторов профилей шифрования
    repeated int32 encryption_profile_ids = 2 [(google.api.field_behavior) = REQUIRED];
    // Список идентификаторов реле.
    // Диапазон: 1..64
    repeated int32 relay_indexes = 3 [(google.api.field_behavior) = REQUIRED];
    // Считыватель работает не в безопасном режиме (по UID)
    bool is_none_secure_mode = 4 [(google.api.field_behavior) = REQUIRED];
    // Направление
    DirectionType direction_type = 5;
}
