// 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.examples;

const uint64 MAX_STRING_LENGTH = 32;

// [START echo]
[Discoverable]
protocol Echo {
    EchoString(string:MAX_STRING_LENGTH value) -> (string:MAX_STRING_LENGTH response);
    SendString(string:MAX_STRING_LENGTH value);
    -> OnString(string:MAX_STRING_LENGTH response);
};
// [END echo]

// [START launcher]
[Discoverable]
protocol EchoLauncher {
    GetEcho(string:MAX_STRING_LENGTH echo_prefix) -> (Echo response);
    GetEchoPipelined(string:MAX_STRING_LENGTH echo_prefix, request<Echo> request);
};
// [END launcher]

service EchoService {
    Echo regular_echo;
    Echo reversed_echo;
};
