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

/// Objective information about a filesystem node.
/// See [`Node.GetAttributes`] and [`Node.UpdateAttributes`].
///
/// The attributes of a node should be stable, independent of the
/// specific protocol used to access it.
///
/// If a particular attribute is not applicable or not supported,
/// filesystems should leave the corresponding field absent.
table NodeAttributes {
    /// Describes the kinds of representations supported by the node.
    /// Note: This is not the result of the connection-time negotiation,
    /// which is conveyed via `representation`.
    ///
    /// This attribute is read-only.
    1: NodeProtocolSet protocols;

    /// Describes the kinds of operations supported by the node.
    /// Note: This is distinct from the rights used at connection time.
    ///
    /// This attribute is read-only.
    2: Abilities abilities;

    /// Node size, in bytes.
    ///
    /// This attribute is read-only.
    3: uint64 content_size;

    /// Space needed to store the node (possibly larger than size), in bytes.
    ///
    /// This attribute is read-only.
    4: uint64 storage_size;

    /// Number of hard links to the node. It must be at least one.
    ///
    /// This attribute is read-only.
    5: uint64 link_count;

    /// Time of creation in nanoseconds since the Unix epoch, UTC.
    /// It may be updated manually after creation.
    6: uint64 creation_time;

    /// Time of last modification in nanoseconds since the Unix epoch, UTC.
    7: uint64 modification_time;

    /// An ID for the node. See [`fuchsia.io2/Id`].
    /// This `id` should be unique among all entries of a directory.
    ///
    /// This attribute is read-only.
    8: Id id;
};

/// When calling [`Node.GetAttributes`], set the corresponding bit to one
/// to query that particular attribute.
/// The elements here correspond one-to-one with [`NodeAttributes`].
bits NodeAttributesQuery : uint64 {
    /// Requests [`NodeAttributes.protocols`].
    PROTOCOLS = 0x1;

    /// Requests [`NodeAttributes.abilities`].
    ABILITIES = 0x2;

    /// Requests [`NodeAttributes.content_size`].
    CONTENT_SIZE = 0x4;

    /// Requests [`NodeAttributes.storage_size`].
    STORAGE_SIZE = 0x8;

    /// Requests [`NodeAttributes.link_count`].
    LINK_COUNT = 0x10;

    /// Requests [`NodeAttributes.creation_time`].
    CREATION_TIME = 0x20;

    /// Requests [`NodeAttributes.modification_time`].
    MODIFICATION_TIME = 0x40;

    /// Requests [`NodeAttributes.id`].
    ID = 0x80;
};
