// 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.migration;
using fuchsia.io;

enum MigrationStatus {
    UNKNOWN = 1;
    IN_PROGRESS = 2;
    COMPLETE = 3;
    ENCOUNTERED_ERROR = 4;
};

/// Table for state of migration operations.
table MigrationState {
    1: MigrationStatus status;
    2: uint8 progress_percentage;
};

protocol Provider {
    Get(request<fuchsia.io.Directory> dir);
    Processed();
};

[Discoverable]
protocol CastProvider {
    compose Provider;
};

[Discoverable]
protocol KronkProvider {
    compose Provider;
};

[Discoverable]
protocol DisplayProvider {
    compose Provider;
};

[Discoverable]
protocol UltrasoundProvider {
    compose Provider;
};

/// Protocol to watch for changes when a migration of system data is started.
[Discoverable]
protocol State {
    /// Hanging get. Will return immediatedly on first call per connection
    /// and then on change after that.
    Watch() -> (MigrationState state);
};
