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

using zx;

/// Describes contiguous run of allocated blocks.
[ForDeprecatedCBindings]
struct BlockRegion {
    uint64 offset;
    uint64 length;
};

[ForDeprecatedCBindings]
protocol Blobfs {
    /// Retrieve information about allocated regions on the filesystem.
    GetAllocatedRegions() -> (zx.status status, zx.handle:VMO? regions, uint64 count);

    /// Assign the handler for blob corruption callbacks. Only one handler will receive callbacks at
    /// any given time.
    SetCorruptBlobHandler(CorruptBlobHandler handler) -> (zx.status status);
};

[ForDeprecatedCBindings]
protocol CorruptBlobHandler {
    /// Notify that a particular blob is corrupted to the CorruptBlobHandler service.
    CorruptBlob(vector<uint8>:64 merkleroot);
};
