// 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 zx;

// TODO(scottmg): (1 << 4) notation or something else for bits would be nice.
type Rights = strict bits : uint32 {
    // TODO(scottmg): "bits members must be powers of two"
    // NONE =           0x00000000;
    DUPLICATE = 0x00000001;
    TRANSFER = 0x00000002;
    READ = 0x00000004;
    WRITE = 0x00000008;
    EXECUTE = 0x00000010;
    MAP = 0x00000020;
    GET_PROPERTY = 0x00000040;
    SET_PROPERTY = 0x00000080;
    ENUMERATE = 0x00000100;
    DESTROY = 0x00000200;
    SET_POLICY = 0x00000400;
    GET_POLICY = 0x00000800;
    SIGNAL = 0x00001000;
    SIGNAL_PEER = 0x00002000;
    WAIT = 0x00004000;
    INSPECT = 0x00008000;
    MANAGE_JOB = 0x00010000;
    MANAGE_PROCESS = 0x00020000;
    MANAGE_THREAD = 0x00040000;
    APPLY_PROFILE = 0x00080000;
    MANAGE_SOCKET = 0x00100000;
    OP_CHILDREN = 0x00200000;
    RESIZE = 0x00400000;
    ATTACH_VMO = 0x00800000;
    MANAGE_VMO = 0x01000000;
    SAME_RIGHTS = 0x80000000;
};

const RIGHTS_BASIC Rights = Rights.TRANSFER | Rights.DUPLICATE | Rights.WAIT | Rights.INSPECT;
const RIGHTS_IO Rights = Rights.READ | Rights.WRITE;
const RIGHTS_PROPERTY Rights = Rights.GET_PROPERTY | Rights.SET_PROPERTY;
const RIGHTS_POLICY Rights = Rights.GET_POLICY | Rights.SET_POLICY;

const DEFAULT_CHANNEL_RIGHTS Rights
        = Rights.TRANSFER | Rights.WAIT | Rights.INSPECT | RIGHTS_IO | Rights.SIGNAL | Rights.SIGNAL_PEER;
const DEFAULT_EVENT_RIGHTS Rights = RIGHTS_BASIC | Rights.SIGNAL;
