// 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.
@available(added=7)
library fuchsia.migration;
using fuchsia.io;

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

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

protocol Provider {
    Get(resource struct {
        dir server_end:fuchsia.io.Directory;
    });
    Processed();
};

@discoverable
protocol CastProvider {
    compose Provider;
};

@discoverable
protocol DisplayProvider {
    compose Provider;
};

@discoverable
protocol KronkProvider {
    compose Provider;
};

@discoverable
protocol UltrasoundProvider {
    compose Provider;
};

@discoverable
protocol ProductPolicyProvider {
    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() -> (struct {
        state MigrationState;
    });
};
