// Copyright 2026 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.

mod error;
pub mod server;
pub mod types;

pub use crate::error::Error;
pub use crate::server::{
    ControlPointWriteResponder, McsServer, McsServerBuilder, McsServerEvent,
    SetPlaybackSpeedResponder, SetPlayingOrderResponder, SetTrackPositionResponder,
    SetValueResponder,
};
pub use crate::types::{
    ControlPointResultCode, MediaControlOpcode, MediaState, PlaybackSpeed, PlayingOrder,
    SeekingSpeed, SupportedOpcodes, SupportedPlayingOrders, TrackDuration, TrackPosition,
};
