| Index: mojo/public/rust/src/system/mojo_types.rs
|
| diff --git a/mojo/public/rust/src/system/mojo_types.rs b/mojo/public/rust/src/system/mojo_types.rs
|
| deleted file mode 100644
|
| index 5ac481e8b2225549bb45eefd9bac209cc8425589..0000000000000000000000000000000000000000
|
| --- a/mojo/public/rust/src/system/mojo_types.rs
|
| +++ /dev/null
|
| @@ -1,278 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -//! This module contains a variety of types which are used
|
| -//! for representing representing flag arguments a little bit
|
| -//! better than just as u32 and some other basic Mojo types that
|
| -//! we need to expose.
|
| -//!
|
| -//! This module also provides MojoResult which is the canonical
|
| -//! result coding system used by Mojo.
|
| -//!
|
| -//! Many places in the system code directly import this module as
|
| -//! a whole because it is intended to be used that way. It contains
|
| -//! all of the basic types needed by all system-level Mojo bindings.
|
| -
|
| -use std::fmt;
|
| -use std::u64;
|
| -use system::ffi::types::*;
|
| -
|
| -/// A MojoHandle is represented as a plain 32-bit unsigned int.
|
| -pub type MojoHandle = u32;
|
| -
|
| -/// Represents time ticks as specified by Mojo. A time tick value
|
| -/// is meaningless when not used relative to another time tick.
|
| -pub type MojoTimeTicks = i64;
|
| -
|
| -/// Represents a deadline for wait() calls.
|
| -pub type MojoDeadline = u64;
|
| -pub static MOJO_INDEFINITE: MojoDeadline = u64::MAX;
|
| -
|
| -pub type CreateFlags = u32;
|
| -pub type DuplicateFlags = u32;
|
| -pub type InfoFlags = u32;
|
| -pub type MapFlags = u32;
|
| -pub type WriteFlags = u32;
|
| -pub type ReadFlags = u32;
|
| -pub type AddFlags = u32;
|
| -
|
| -/// MojoResult represents anything that can happen
|
| -/// as a result of performing some operation in Mojo.
|
| -///
|
| -/// It's implementation matches exactly that found in
|
| -/// the Mojo C API so this enum can be used across the
|
| -/// FFI boundary simply by using "as u32".
|
| -#[derive(Copy, Clone, Debug, PartialEq)]
|
| -#[repr(u32)]
|
| -pub enum MojoResult {
|
| - Okay = 0x0,
|
| - Cancelled = 0x1,
|
| - Unknown = 0x2,
|
| - InvalidArgument = 0x3,
|
| - DeadlineExceeded = 0x4,
|
| - NotFound = 0x5,
|
| - AlreadyExists = 0x6,
|
| - PermissionDenied = 0x7,
|
| - ResourceExhausted = 0x8,
|
| - FailedPrecondition = 0x9,
|
| - Aborted = 0xa,
|
| - OutOfRange = 0xb,
|
| - Unimplemented = 0xc,
|
| - Internal = 0xd,
|
| - Unavailable = 0xe,
|
| - DataLoss = 0xf,
|
| - Busy = 0x0019,
|
| - ShouldWait = 0x001e,
|
| - InvalidResult,
|
| -}
|
| -
|
| -impl MojoResult {
|
| - /// Convert a raw u32 code given by the C Mojo functions
|
| - /// into a MojoResult.
|
| - pub fn from_code(code: MojoResultCode) -> MojoResult {
|
| - match code as u32 {
|
| - 0x0 => MojoResult::Okay,
|
| - 0x1 => MojoResult::Cancelled,
|
| - 0x2 => MojoResult::Unknown,
|
| - 0x3 => MojoResult::InvalidArgument,
|
| - 0x4 => MojoResult::DeadlineExceeded,
|
| - 0x5 => MojoResult::NotFound,
|
| - 0x6 => MojoResult::AlreadyExists,
|
| - 0x7 => MojoResult::PermissionDenied,
|
| - 0x8 => MojoResult::ResourceExhausted,
|
| - 0x9 => MojoResult::FailedPrecondition,
|
| - 0xa => MojoResult::Aborted,
|
| - 0xb => MojoResult::OutOfRange,
|
| - 0xc => MojoResult::Unimplemented,
|
| - 0xd => MojoResult::Internal,
|
| - 0xe => MojoResult::Unavailable,
|
| - 0xf => MojoResult::DataLoss,
|
| - 0x0019 => MojoResult::Busy,
|
| - 0x001e => MojoResult::ShouldWait,
|
| - _ => MojoResult::InvalidResult,
|
| - }
|
| - }
|
| -
|
| - pub fn to_str(&self) -> &'static str {
|
| - match *self {
|
| - MojoResult::Okay => "OK",
|
| - MojoResult::Cancelled => "Cancelled",
|
| - MojoResult::Unknown => "Unknown",
|
| - MojoResult::InvalidArgument => "Invalid Argument",
|
| - MojoResult::DeadlineExceeded => "Deadline Exceeded",
|
| - MojoResult::NotFound => "Not Found",
|
| - MojoResult::AlreadyExists => "Already Exists",
|
| - MojoResult::PermissionDenied => "Permission Denied",
|
| - MojoResult::ResourceExhausted => "Resource Exhausted",
|
| - MojoResult::FailedPrecondition => "Failed Precondition",
|
| - MojoResult::Aborted => "Aborted",
|
| - MojoResult::OutOfRange => "Out Of Range",
|
| - MojoResult::Unimplemented => "Unimplemented",
|
| - MojoResult::Internal => "Internal",
|
| - MojoResult::Unavailable => "Unavailable",
|
| - MojoResult::DataLoss => "Data Loss",
|
| - MojoResult::Busy => "Busy",
|
| - MojoResult::ShouldWait => "Should Wait",
|
| - MojoResult::InvalidResult => "Something went very wrong",
|
| - }
|
| - }
|
| -}
|
| -
|
| -impl fmt::Display for MojoResult {
|
| - /// Allow a MojoResult to be displayed in a sane manner.
|
| - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
| - write!(f, "{}", self.to_str())
|
| - }
|
| -}
|
| -
|
| -/// This tuple struct represents a bit vector configuration of possible
|
| -/// Mojo signals. Used in wait() and wait_many() primarily as a convenience.
|
| -///
|
| -/// One invariant must be true for this data structure and it is that:
|
| -/// sizeof(HandleSignals) == sizeof(MojoHandleSignals)
|
| -/// If this is ever not the case or there is a way in Rust to ensure that,
|
| -/// this data structure must be updated to reflect that.
|
| -#[repr(C)]
|
| -#[derive(Clone, Copy, Default, PartialEq)]
|
| -pub struct HandleSignals(MojoHandleSignals);
|
| -
|
| -impl HandleSignals {
|
| - /// Create a new HandleSignals given the raw MojoHandleSignals
|
| - pub fn new(s: MojoHandleSignals) -> HandleSignals {
|
| - HandleSignals(s)
|
| - }
|
| -
|
| - /// Check if the readable flag is set
|
| - pub fn is_readable(&self) -> bool {
|
| - (self.0 & (Signals::Readable as u32)) != 0
|
| - }
|
| -
|
| - /// Check if the writable flag is set
|
| - pub fn is_writable(&self) -> bool {
|
| - (self.0 & (Signals::Writable as u32)) != 0
|
| - }
|
| -
|
| - /// Check if the peer-closed flag is set
|
| - pub fn is_peer_closed(&self) -> bool {
|
| - (self.0 & (Signals::PeerClosed as u32)) != 0
|
| - }
|
| -
|
| - /// Check if the read threshold flag is set
|
| - pub fn is_read_threshold(&self) -> bool {
|
| - (self.0 & (Signals::ReadThreshold as u32)) != 0
|
| - }
|
| -
|
| - /// Check if the write threshold flag is set
|
| - pub fn is_write_threshold(&self) -> bool {
|
| - (self.0 & (Signals::WriteThreshold as u32)) != 0
|
| - }
|
| -
|
| - /// Pull the raw MojoHandleSignals out of the data structure
|
| - pub fn get_bits(&self) -> MojoHandleSignals {
|
| - self.0
|
| - }
|
| -}
|
| -
|
| -/// Represents the signals state of a handle: which signals are satisfied,
|
| -/// and which are satisfiable.
|
| -///
|
| -/// One invariant must be true for this data structure and it is that:
|
| -/// sizeof(SignalsState) == sizeof(MojoSignalsState) (defined in handle.h)
|
| -/// If this is ever not the case or there is a way in Rust to ensure that,
|
| -/// this data structure must be updated to reflect that.
|
| -#[repr(C)]
|
| -#[derive(Default)]
|
| -pub struct SignalsState {
|
| - satisfied: HandleSignals,
|
| - satisfiable: HandleSignals,
|
| - _align: [u32; 0], // Hack to align to a 4-byte boundary
|
| -}
|
| -
|
| -impl SignalsState {
|
| - /// Generates a new SignalsState
|
| - pub fn new(satisfied: HandleSignals, satisfiable: HandleSignals) -> SignalsState {
|
| - SignalsState {
|
| - satisfied: satisfied,
|
| - satisfiable: satisfiable,
|
| - _align: [],
|
| - }
|
| - }
|
| - /// Gets a reference to the satisfied signals
|
| - pub fn satisfied(&self) -> &HandleSignals {
|
| - &self.satisfied
|
| - }
|
| - /// Gets a reference to the satisfiable signals
|
| - pub fn satisfiable(&self) -> &HandleSignals {
|
| - &self.satisfiable
|
| - }
|
| - /// Consume the SignalsState and release its tender interior
|
| - ///
|
| - /// Returns (satisfied, satisfiable)
|
| - pub fn unwrap(self) -> (HandleSignals, HandleSignals) {
|
| - (self.satisfied, self.satisfiable)
|
| - }
|
| -}
|
| -
|
| -/// The different signals options that can be
|
| -/// used by wait() and wait_many(). You may use
|
| -/// these directly to build a bit-vector, but
|
| -/// the signals! macro will already do it for you.
|
| -/// See the root of the library for more information.
|
| -#[repr(u32)]
|
| -pub enum Signals {
|
| - None = 0,
|
| - /// Wait for the handle to be readable
|
| - Readable = 1 << 0,
|
| -
|
| - /// Wait for the handle to be writable
|
| - Writable = 1 << 1,
|
| -
|
| - /// Wait for the handle to be closed by the peer
|
| - /// (for message pipes and data pipes, this is
|
| - /// the counterpart handle to the pipe)
|
| - PeerClosed = 1 << 2,
|
| -
|
| - /// Wait for the handle to have at least some
|
| - /// readable data
|
| - ReadThreshold = 1 << 3,
|
| -
|
| - /// Wait for the handle to allow for at least
|
| - /// some data to be writable
|
| - WriteThreshold = 1 << 4,
|
| -}
|
| -
|
| -/// The result struct used by the wait_set module
|
| -/// to return wait result information. Should remain
|
| -/// semantically identical to the implementation of
|
| -/// this struct in wait_set.h in the C bindings.
|
| -///
|
| -/// This struct should never be constructed by anything
|
| -/// but the Mojo system in MojoWaitSetWait.
|
| -#[repr(C)]
|
| -pub struct WaitSetResult {
|
| - cookie: u64,
|
| - result: MojoResultCode,
|
| - reserved: u32,
|
| - signals_state: SignalsState,
|
| - _align: [u64; 0], // Hack to align struct to 8 byte boundary
|
| -}
|
| -
|
| -impl WaitSetResult {
|
| - /// Getter for the cookie corresponding to the handle
|
| - /// which just finished waiting.
|
| - pub fn cookie(&self) -> u64 {
|
| - self.cookie
|
| - }
|
| -
|
| - /// Getter for the wait result.
|
| - pub fn result(&self) -> MojoResult {
|
| - MojoResult::from_code(self.result)
|
| - }
|
| -
|
| - /// Getter for the signals state that comes with any
|
| - /// wait result.
|
| - pub fn state(&self) -> &SignalsState {
|
| - &self.signals_state
|
| - }
|
| -}
|
|
|