zx/
info.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 object information.
6
7use crate::sys;
8use std::ops::Deref;
9use zerocopy::{FromBytes, Immutable};
10
11#[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
12#[repr(transparent)]
13pub struct Topic(sys::zx_object_info_topic_t);
14
15impl Deref for Topic {
16    type Target = sys::zx_object_info_topic_t;
17
18    fn deref(&self) -> &Self::Target {
19        &self.0
20    }
21}
22
23/// A query to get info about a zircon object.
24///
25/// # Safety
26///
27/// `InfoTy` must be the same size as what the kernel expects to return for the provided topic.
28pub(crate) unsafe trait ObjectQuery {
29    /// A `Topic` identifying this query.
30    const TOPIC: Topic;
31    /// The datatype returned by querying for Self::TOPIC.
32    type InfoTy: FromBytes + Immutable;
33}
34
35assoc_values!(Topic, [
36    NONE = sys::ZX_INFO_NONE;
37    HANDLE_VALID = sys::ZX_INFO_HANDLE_VALID;
38    HANDLE_BASIC = sys::ZX_INFO_HANDLE_BASIC;
39    PROCESS = sys::ZX_INFO_PROCESS;
40    PROCESS_THREADS = sys::ZX_INFO_PROCESS_THREADS;
41    VMAR = sys::ZX_INFO_VMAR;
42    VMAR_MAPS = sys::ZX_INFO_VMAR_MAPS;
43    JOB_CHILDREN = sys::ZX_INFO_JOB_CHILDREN;
44    JOB_PROCESSES = sys::ZX_INFO_JOB_PROCESSES;
45    THREAD = sys::ZX_INFO_THREAD;
46    THREAD_EXCEPTION_REPORT = sys::ZX_INFO_THREAD_EXCEPTION_REPORT;
47    TASK_STATS = sys::ZX_INFO_TASK_STATS;
48    TASK_RUNTIME = sys::ZX_INFO_TASK_RUNTIME;
49    PROCESS_MAPS = sys::ZX_INFO_PROCESS_MAPS;
50    PROCESS_VMOS = sys::ZX_INFO_PROCESS_VMOS;
51    THREAD_STATS = sys::ZX_INFO_THREAD_STATS;
52    CPU_STATS = sys::ZX_INFO_CPU_STATS;
53    KMEM_STATS = sys::ZX_INFO_KMEM_STATS;
54    KMEM_STATS_EXTENDED = sys::ZX_INFO_KMEM_STATS_EXTENDED;
55    KMEM_STATS_COMPRESSION = sys::ZX_INFO_KMEM_STATS_COMPRESSION;
56    RESOURCE = sys::ZX_INFO_RESOURCE;
57    HANDLE_COUNT = sys::ZX_INFO_HANDLE_COUNT;
58    BTI = sys::ZX_INFO_BTI;
59    PROCESS_HANDLE_STATS = sys::ZX_INFO_PROCESS_HANDLE_STATS;
60    SOCKET = sys::ZX_INFO_SOCKET;
61    TIMER = sys::ZX_INFO_TIMER;
62    VMO = sys::ZX_INFO_VMO;
63    JOB = sys::ZX_INFO_JOB;
64    IOB = sys::ZX_INFO_IOB;
65    IOB_REGIONS = sys::ZX_INFO_IOB_REGIONS;
66    MEMORY_STALL = sys::ZX_INFO_MEMORY_STALL;
67    CLOCK_MAPPED_SIZE = sys::ZX_INFO_CLOCK_MAPPED_SIZE;
68]);