// Copyright 2021 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.io;

/// The common members definition behind [`Rights`] and [`Abilities`].
/// Note that Directory operations are distinct from File operations, with the
/// exception of some common operations (e.g. `GET_ATTRIBUTES`) defined on the
/// underlying [`Node`].
type Operations = strict bits : uint64 {
    /// Connecting to a service.
    CONNECT = 0x01;

    /// Reading from the byte contents of a node.
    READ_BYTES = 0x02;

    /// Writing to the byte contents of a node.
    WRITE_BYTES = 0x04;

    /// Execute the byte contents of a node.
    EXECUTE = 0x08;

    /// Reading the attributes of a node.
    GET_ATTRIBUTES = 0x10;

    /// Updating the attributes of a node.
    UPDATE_ATTRIBUTES = 0x20;

    /// Reading the list of entries in a directory.
    ENUMERATE = 0x40;

    /// Opening a node from a directory.
    ///
    /// When used in `ConnectionOptions.rights`, it must be specified together
    /// with [`Rights.ENUMERATE`], since one can always probe the directory
    /// contents by opening children.
    TRAVERSE = 0x80;

    /// Modifying the list of entries in a directory.
    /// For example: node creation, renaming, linking, unlinking, etc.
    ///
    /// When used in `ConnectionOptions.rights`, it must be specified together
    /// with [`Rights.ENUMERATE`], since one can always probe the directory
    /// contents by triggering name conflicts during node creation.
    MODIFY_DIRECTORY = 0x100;
};

/// Alias for directory permission alias r*
const R_STAR_DIR Operations
        = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.READ_BYTES | Operations.GET_ATTRIBUTES;

/// Alias for directory permission alias rw*
const RW_STAR_DIR Operations
        = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.READ_BYTES | Operations.WRITE_BYTES | Operations.MODIFY_DIRECTORY | Operations.GET_ATTRIBUTES | Operations.UPDATE_ATTRIBUTES;

/// Alias for directory permission alias rx*
const RX_STAR_DIR Operations
        = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.READ_BYTES | Operations.GET_ATTRIBUTES | Operations.EXECUTE;

/// Alias for directory permission alias w*
const W_STAR_DIR Operations
        = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.WRITE_BYTES | Operations.MODIFY_DIRECTORY | Operations.UPDATE_ATTRIBUTES;

/// Alias for directory permission alias x*
const X_STAR_DIR Operations
        = Operations.CONNECT | Operations.ENUMERATE | Operations.TRAVERSE | Operations.EXECUTE;

/// Rights are properties specific to a connection. They limit which operations
/// are allowed on a connection.
///
/// Invoking an operation without the corresponding right results in a
/// `ZX_ERR_ACCESS_DENIED` error.
alias Rights = Operations;

/// Abilities are properties intrinsic to a node. They specify which operations
/// are supported by it.
///
/// Invoking an operation without corresponding support in the node results in a
/// `ZX_ERR_NOT_SUPPORTED` error.
/// Note that if both the access denied and the not supported error conditions
/// apply, the access denied case takes precedence.
alias Abilities = Operations;
