// 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: NodeProtocols 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;
};
