zx/
rights.rs

1// Copyright 2018 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5//! Type-safe bindings for Zircon rights.
6
7// Rights::NONE is not actually a flag but that's not very likely to be confusing
8#![allow(clippy::bad_bit_mask)]
9
10use crate::sys;
11use bitflags::bitflags;
12use zerocopy::{FromBytes, Immutable};
13
14/// Rights associated with a handle.
15///
16/// See [rights](https://fuchsia.dev/fuchsia-src/concepts/kernel/rights) for more information.
17#[repr(transparent)]
18#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, FromBytes, Immutable)]
19pub struct Rights(sys::zx_rights_t);
20
21bitflags! {
22    impl Rights: sys::zx_rights_t {
23        const NONE            = sys::ZX_RIGHT_NONE;
24        const DUPLICATE       = sys::ZX_RIGHT_DUPLICATE;
25        const TRANSFER        = sys::ZX_RIGHT_TRANSFER;
26        const READ            = sys::ZX_RIGHT_READ;
27        const WRITE           = sys::ZX_RIGHT_WRITE;
28        const EXECUTE         = sys::ZX_RIGHT_EXECUTE;
29        const MAP             = sys::ZX_RIGHT_MAP;
30        const GET_PROPERTY    = sys::ZX_RIGHT_GET_PROPERTY;
31        const SET_PROPERTY    = sys::ZX_RIGHT_SET_PROPERTY;
32        const ENUMERATE       = sys::ZX_RIGHT_ENUMERATE;
33        const DESTROY         = sys::ZX_RIGHT_DESTROY;
34        const SET_POLICY      = sys::ZX_RIGHT_SET_POLICY;
35        const GET_POLICY      = sys::ZX_RIGHT_GET_POLICY;
36        const SIGNAL          = sys::ZX_RIGHT_SIGNAL;
37        const SIGNAL_PEER     = sys::ZX_RIGHT_SIGNAL_PEER;
38        const WAIT            = sys::ZX_RIGHT_WAIT;
39        const INSPECT         = sys::ZX_RIGHT_INSPECT;
40        const MANAGE_JOB      = sys::ZX_RIGHT_MANAGE_JOB;
41        const MANAGE_PROCESS  = sys::ZX_RIGHT_MANAGE_PROCESS;
42        const MANAGE_THREAD   = sys::ZX_RIGHT_MANAGE_THREAD;
43        const APPLY_PROFILE   = sys::ZX_RIGHT_APPLY_PROFILE;
44        const MANAGE_SOCKET   = sys::ZX_RIGHT_MANAGE_SOCKET;
45        const OP_CHILDREN     = sys::ZX_RIGHT_OP_CHILDREN;
46        const RESIZE          = sys::ZX_RIGHT_RESIZE;
47        const ATTACH_VMO      = sys::ZX_RIGHT_ATTACH_VMO;
48        const MANAGE_VMO      = sys::ZX_RIGHT_MANAGE_VMO;
49        const SAME_RIGHTS     = sys::ZX_RIGHT_SAME_RIGHTS;
50
51        const BASIC           = sys::ZX_RIGHT_TRANSFER | sys::ZX_RIGHT_DUPLICATE |
52                                sys::ZX_RIGHT_WAIT | sys::ZX_RIGHT_INSPECT;
53        const IO              = sys::ZX_RIGHT_READ | sys::ZX_RIGHT_WRITE;
54        const PROPERTY        = sys::ZX_RIGHT_GET_PROPERTY | sys::ZX_RIGHT_SET_PROPERTY;
55        const POLICY          = sys::ZX_RIGHT_GET_POLICY | sys::ZX_RIGHT_SET_POLICY;
56        const RESOURCE_BASIC  = sys::ZX_RIGHT_TRANSFER | sys::ZX_RIGHT_DUPLICATE |
57                                sys::ZX_RIGHT_WRITE | sys::ZX_RIGHT_INSPECT;
58
59        // Default rights for a newly created object of a particular type.
60        // See zircon/system/public/zircon/rights.h
61        const CHANNEL_DEFAULT = sys::ZX_RIGHT_TRANSFER | sys::ZX_RIGHT_WAIT |
62                                sys::ZX_RIGHT_INSPECT |sys::ZX_RIGHT_READ |
63                                sys::ZX_RIGHT_WRITE | sys::ZX_RIGHT_SIGNAL |
64                                sys::ZX_RIGHT_SIGNAL_PEER;
65        const VMO_DEFAULT     = Self::BASIC.bits() | Self::IO.bits() | Self::PROPERTY.bits() | Self::MAP.bits() | sys::ZX_RIGHT_SIGNAL;
66    }
67}
68
69impl std::fmt::Debug for Rights {
70    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
71        bitflags::parser::to_writer(self, f)
72    }
73}