control_code/csi/
copy.rs

1//            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2//                    Version 2, December 2004
3//
4// Copyleft (ↄ) meh. <meh@schizofreni.co> | http://meh.schizofreni.co
5//
6// Everyone is permitted to copy and distribute verbatim or modified
7// copies of this license document, and changing it is allowed as long
8// as the name is changed.
9//
10//            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11//   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12//
13//  0. You just DO WHAT THE FUCK YOU WANT TO.
14
15use nom;
16
17#[derive(Eq, PartialEq, Copy, Clone, Debug)]
18pub enum Copy {
19	ToPrimary,
20	FromPrimary,
21	ToSecondary,
22	FromSecondary,
23	StopPrimary,
24	StartPrimary,
25	StopSecondary,
26	StartSecondary,
27}
28
29impl Copy {
30	#[inline]
31	pub fn parse<'a>(value: u32) -> Result<Self, nom::ErrorKind> {
32		match value {
33			0 => Ok(Copy::ToPrimary),
34			1 => Ok(Copy::FromPrimary),
35			2 => Ok(Copy::ToSecondary),
36			3 => Ok(Copy::FromSecondary),
37			4 => Ok(Copy::StopPrimary),
38			5 => Ok(Copy::StartPrimary),
39			6 => Ok(Copy::StopSecondary),
40			7 => Ok(Copy::StartSecondary),
41			_ => Err(nom::ErrorKind::Custom(9005)),
42		}
43	}
44}
45
46impl Into<u32> for Copy {
47	#[inline]
48	fn into(self) -> u32 {
49		match self {
50			Copy::ToPrimary      => 0,
51			Copy::FromPrimary    => 1,
52			Copy::ToSecondary    => 2,
53			Copy::FromSecondary  => 3,
54			Copy::StopPrimary    => 4,
55			Copy::StartPrimary   => 5,
56			Copy::StopSecondary  => 6,
57			Copy::StartSecondary => 7,
58		}
59	}
60}