summaryrefslogtreecommitdiffstats
path: root/third_party/rust/fuchsia-zircon/src/event.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/fuchsia-zircon/src/event.rs')
-rw-r--r--third_party/rust/fuchsia-zircon/src/event.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/third_party/rust/fuchsia-zircon/src/event.rs b/third_party/rust/fuchsia-zircon/src/event.rs
new file mode 100644
index 0000000000..533a8aafcc
--- /dev/null
+++ b/third_party/rust/fuchsia-zircon/src/event.rs
@@ -0,0 +1,32 @@
+// Copyright 2017 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.
+
+//! Type-safe bindings for Zircon event objects.
+
+use {AsHandleRef, Cookied, HandleBased, Handle, HandleRef, Status};
+use {sys, ok};
+
+/// An object representing a Zircon
+/// [event object](https://fuchsia.googlesource.com/zircon/+/master/docs/objects/event.md).
+///
+/// As essentially a subtype of `Handle`, it can be freely interconverted.
+#[derive(Debug, Eq, PartialEq)]
+pub struct Event(Handle);
+impl_handle_based!(Event);
+impl Cookied for Event {}
+
+impl Event {
+ /// Create an event object, an object which is signalable but nothing else. Wraps the
+ /// [zx_event_create](https://fuchsia.googlesource.com/zircon/+/master/docs/syscalls/event_create.md)
+ /// syscall.
+ pub fn create() -> Result<Event, Status> {
+ let mut out = 0;
+ let opts = 0;
+ let status = unsafe { sys::zx_event_create(opts, &mut out) };
+ ok(status)?;
+ unsafe {
+ Ok(Self::from(Handle::from_raw(out)))
+ }
+ }
+}