1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use ffi;
use super::{ChannelRef, ChannelMut};

/// The definition for a WS281X channel.
#[derive(Debug)]
pub struct Channel(ffi::ws2811_channel_t);

impl Channel {
	#[doc(hidden)]
	pub unsafe fn new(value: ffi::ws2811_channel_t) -> Result<Self, ()> {
		Ok(Channel(value))
	}

	#[doc(hidden)]
	pub unsafe fn into_inner(self) -> ffi::ws2811_channel_t {
		self.0
	}

	/// Get an immutable reference to the channel.
	pub fn as_ref(&self) -> ChannelRef {
		unsafe {
			ChannelRef::wrap(&self.0)
		}
	}

	/// Get a mutable reference to the channel.
	pub fn as_mut(&mut self) -> ChannelMut {
		unsafe {
			ChannelMut::wrap(&mut self.0)
		}
	}
}