// Copyright 2019 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.accessibility.tts;

/// An interface to manage TTS for assistive technology.
///
/// The TTS Manager offers assistive technology a way to open a TTS engine to
/// start producing speech output.
@discoverable
closed protocol TtsManager {
    /// A speaker is an assistive technology that wants to produce speech
    /// output. Only one speaker is allowed to have an open connection to the
    /// engine at a time. If already in use, BUSY error is returned.
    strict OpenEngine(resource struct {
        engine_request server_end:Engine;
    }) -> () error Error;
};
