// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.developer.remotecontrol;

using fuchsia.diagnostics as diagnostics;

const uint16 MAX_COMPONENT_SUBDIR_LEN = 10;
const uint16 MAX_SERVICE_NAME_LEN = 150;
const uint16 MAX_MONIKER_SEGMENT_LENGTH = 100;

enum ConnectError : uint32 {
    // Selector did not match any services.
    NO_MATCHING_SERVICES = 1;
    // Selector matched multiple services.
    MULTIPLE_MATCHING_SERVICES = 2;
    // There was an error when trying to find matching services.
    SERVICE_DISCOVERY_FAILED = 3;
    // A single service was matched, but connecting to it failed.
    SERVICE_CONNECT_FAILED = 4;
};

enum SelectError : uint32 {
    // There was an error when trying to find matching services.
    SERVICE_DISCOVERY_FAILED = 1;
};

struct ServiceMatch {
    vector<string:diagnostics.MAX_STRING_SELECTOR_LENGTH>:diagnostics.MAX_MONIKER_SEGMENTS moniker;
    string:MAX_COMPONENT_SUBDIR_LEN subdir;
    string:MAX_SERVICE_NAME_LEN service;
};
