mod constants {
pub const SYMBOL_FOR_NULL: char = '␀';
pub const SYMBOL_FOR_START_OF_HEADING: char = '␁';
pub const SYMBOL_FOR_START_OF_TEXT: char = '␂';
pub const SYMBOL_FOR_END_OF_TEXT: char = '␃';
pub const SYMBOL_FOR_END_OF_TRANSMISSION: char = '␄';
pub const SYMBOL_FOR_ENQUIRY: char = '␅';
pub const SYMBOL_FOR_ACKNOWLEDGE: char = '␆';
pub const SYMBOL_FOR_BELL: char = '␇';
pub const SYMBOL_FOR_BACKSPACE: char = '␈';
pub const SYMBOL_FOR_HORIZONTAL_TABULATION: char = '␉';
pub const SYMBOL_FOR_LINE_FEED: char = '␊';
pub const SYMBOL_FOR_VERTICAL_TABULATION: char = '␋';
pub const SYMBOL_FOR_FORM_FEED: char = '␌';
pub const SYMBOL_FOR_CARRIAGE_RETURN: char = '␍';
pub const SYMBOL_FOR_SHIFT_OUT: char = '␎';
pub const SYMBOL_FOR_SHIFT_IN: char = '␏';
pub const SYMBOL_FOR_DATA_LINK_ESCAPE: char = '␐';
pub const SYMBOL_FOR_DEVICE_CONTROL_ONE: char = '␑';
pub const SYMBOL_FOR_DEVICE_CONTROL_TWO: char = '␒';
pub const SYMBOL_FOR_DEVICE_CONTROL_THREE: char = '␓';
pub const SYMBOL_FOR_DEVICE_CONTROL_FOUR: char = '␔';
pub const SYMBOL_FOR_NEGATIVE_ACKNOWLEDGE: char = '␕';
pub const SYMBOL_FOR_SYNCHRONOUS_IDLE: char = '␖';
pub const SYMBOL_FOR_END_OF_TRANSMISSION_BLOCK: char = '␗';
pub const SYMBOL_FOR_CANCEL: char = '␘';
pub const SYMBOL_FOR_END_OF_MEDIUM: char = '␙';
pub const SYMBOL_FOR_SUBSTITUTE: char = '␚';
pub const SYMBOL_FOR_ESCAPE: char = '␛';
pub const SYMBOL_FOR_FILE_SEPARATOR: char = '␜';
pub const SYMBOL_FOR_GROUP_SEPARATOR: char = '␝';
pub const SYMBOL_FOR_RECORD_SEPARATOR: char = '␞';
pub const SYMBOL_FOR_UNIT_SEPARATOR: char = '␟';
pub const SYMBOL_FOR_SPACE: char = '␠';
pub const SYMBOL_FOR_DELETE: char = '␡';
pub const BLANK_SYMBOL: char = '␢';
pub const OPEN_BOX: char = '␣';
pub const SYMBOL_FOR_NEWLINE: char = '';
pub const SYMBOL_FOR_DELETE_FORM_TWO: char = '␥';
pub const SYMBOL_FOR_SUBSTITUTE_FORM_TWO: char = '␦';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum ControlPictures {
SymbolForNull,
SymbolForStartOfHeading,
SymbolForStartOfText,
SymbolForEndOfText,
SymbolForEndOfTransmission,
SymbolForEnquiry,
SymbolForAcknowledge,
SymbolForBell,
SymbolForBackspace,
SymbolForHorizontalTabulation,
SymbolForLineFeed,
SymbolForVerticalTabulation,
SymbolForFormFeed,
SymbolForCarriageReturn,
SymbolForShiftOut,
SymbolForShiftIn,
SymbolForDataLinkEscape,
SymbolForDeviceControlOne,
SymbolForDeviceControlTwo,
SymbolForDeviceControlThree,
SymbolForDeviceControlFour,
SymbolForNegativeAcknowledge,
SymbolForSynchronousIdle,
SymbolForEndOfTransmissionBlock,
SymbolForCancel,
SymbolForEndOfMedium,
SymbolForSubstitute,
SymbolForEscape,
SymbolForFileSeparator,
SymbolForGroupSeparator,
SymbolForRecordSeparator,
SymbolForUnitSeparator,
SymbolForSpace,
SymbolForDelete,
BlankSymbol,
OpenBox,
SymbolForNewline,
SymbolForDeleteFormTwo,
SymbolForSubstituteFormTwo,
}
impl Into<char> for ControlPictures {
fn into(self) -> char {
use constants::*;
match self {
ControlPictures::SymbolForNull => SYMBOL_FOR_NULL,
ControlPictures::SymbolForStartOfHeading => SYMBOL_FOR_START_OF_HEADING,
ControlPictures::SymbolForStartOfText => SYMBOL_FOR_START_OF_TEXT,
ControlPictures::SymbolForEndOfText => SYMBOL_FOR_END_OF_TEXT,
ControlPictures::SymbolForEndOfTransmission => SYMBOL_FOR_END_OF_TRANSMISSION,
ControlPictures::SymbolForEnquiry => SYMBOL_FOR_ENQUIRY,
ControlPictures::SymbolForAcknowledge => SYMBOL_FOR_ACKNOWLEDGE,
ControlPictures::SymbolForBell => SYMBOL_FOR_BELL,
ControlPictures::SymbolForBackspace => SYMBOL_FOR_BACKSPACE,
ControlPictures::SymbolForHorizontalTabulation => SYMBOL_FOR_HORIZONTAL_TABULATION,
ControlPictures::SymbolForLineFeed => SYMBOL_FOR_LINE_FEED,
ControlPictures::SymbolForVerticalTabulation => SYMBOL_FOR_VERTICAL_TABULATION,
ControlPictures::SymbolForFormFeed => SYMBOL_FOR_FORM_FEED,
ControlPictures::SymbolForCarriageReturn => SYMBOL_FOR_CARRIAGE_RETURN,
ControlPictures::SymbolForShiftOut => SYMBOL_FOR_SHIFT_OUT,
ControlPictures::SymbolForShiftIn => SYMBOL_FOR_SHIFT_IN,
ControlPictures::SymbolForDataLinkEscape => SYMBOL_FOR_DATA_LINK_ESCAPE,
ControlPictures::SymbolForDeviceControlOne => SYMBOL_FOR_DEVICE_CONTROL_ONE,
ControlPictures::SymbolForDeviceControlTwo => SYMBOL_FOR_DEVICE_CONTROL_TWO,
ControlPictures::SymbolForDeviceControlThree => SYMBOL_FOR_DEVICE_CONTROL_THREE,
ControlPictures::SymbolForDeviceControlFour => SYMBOL_FOR_DEVICE_CONTROL_FOUR,
ControlPictures::SymbolForNegativeAcknowledge => SYMBOL_FOR_NEGATIVE_ACKNOWLEDGE,
ControlPictures::SymbolForSynchronousIdle => SYMBOL_FOR_SYNCHRONOUS_IDLE,
ControlPictures::SymbolForEndOfTransmissionBlock => SYMBOL_FOR_END_OF_TRANSMISSION_BLOCK,
ControlPictures::SymbolForCancel => SYMBOL_FOR_CANCEL,
ControlPictures::SymbolForEndOfMedium => SYMBOL_FOR_END_OF_MEDIUM,
ControlPictures::SymbolForSubstitute => SYMBOL_FOR_SUBSTITUTE,
ControlPictures::SymbolForEscape => SYMBOL_FOR_ESCAPE,
ControlPictures::SymbolForFileSeparator => SYMBOL_FOR_FILE_SEPARATOR,
ControlPictures::SymbolForGroupSeparator => SYMBOL_FOR_GROUP_SEPARATOR,
ControlPictures::SymbolForRecordSeparator => SYMBOL_FOR_RECORD_SEPARATOR,
ControlPictures::SymbolForUnitSeparator => SYMBOL_FOR_UNIT_SEPARATOR,
ControlPictures::SymbolForSpace => SYMBOL_FOR_SPACE,
ControlPictures::SymbolForDelete => SYMBOL_FOR_DELETE,
ControlPictures::BlankSymbol => BLANK_SYMBOL,
ControlPictures::OpenBox => OPEN_BOX,
ControlPictures::SymbolForNewline => SYMBOL_FOR_NEWLINE,
ControlPictures::SymbolForDeleteFormTwo => SYMBOL_FOR_DELETE_FORM_TWO,
ControlPictures::SymbolForSubstituteFormTwo => SYMBOL_FOR_SUBSTITUTE_FORM_TWO,
}
}
}
impl std::convert::TryFrom<char> for ControlPictures {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
SYMBOL_FOR_NULL => Ok(ControlPictures::SymbolForNull),
SYMBOL_FOR_START_OF_HEADING => Ok(ControlPictures::SymbolForStartOfHeading),
SYMBOL_FOR_START_OF_TEXT => Ok(ControlPictures::SymbolForStartOfText),
SYMBOL_FOR_END_OF_TEXT => Ok(ControlPictures::SymbolForEndOfText),
SYMBOL_FOR_END_OF_TRANSMISSION => Ok(ControlPictures::SymbolForEndOfTransmission),
SYMBOL_FOR_ENQUIRY => Ok(ControlPictures::SymbolForEnquiry),
SYMBOL_FOR_ACKNOWLEDGE => Ok(ControlPictures::SymbolForAcknowledge),
SYMBOL_FOR_BELL => Ok(ControlPictures::SymbolForBell),
SYMBOL_FOR_BACKSPACE => Ok(ControlPictures::SymbolForBackspace),
SYMBOL_FOR_HORIZONTAL_TABULATION => Ok(ControlPictures::SymbolForHorizontalTabulation),
SYMBOL_FOR_LINE_FEED => Ok(ControlPictures::SymbolForLineFeed),
SYMBOL_FOR_VERTICAL_TABULATION => Ok(ControlPictures::SymbolForVerticalTabulation),
SYMBOL_FOR_FORM_FEED => Ok(ControlPictures::SymbolForFormFeed),
SYMBOL_FOR_CARRIAGE_RETURN => Ok(ControlPictures::SymbolForCarriageReturn),
SYMBOL_FOR_SHIFT_OUT => Ok(ControlPictures::SymbolForShiftOut),
SYMBOL_FOR_SHIFT_IN => Ok(ControlPictures::SymbolForShiftIn),
SYMBOL_FOR_DATA_LINK_ESCAPE => Ok(ControlPictures::SymbolForDataLinkEscape),
SYMBOL_FOR_DEVICE_CONTROL_ONE => Ok(ControlPictures::SymbolForDeviceControlOne),
SYMBOL_FOR_DEVICE_CONTROL_TWO => Ok(ControlPictures::SymbolForDeviceControlTwo),
SYMBOL_FOR_DEVICE_CONTROL_THREE => Ok(ControlPictures::SymbolForDeviceControlThree),
SYMBOL_FOR_DEVICE_CONTROL_FOUR => Ok(ControlPictures::SymbolForDeviceControlFour),
SYMBOL_FOR_NEGATIVE_ACKNOWLEDGE => Ok(ControlPictures::SymbolForNegativeAcknowledge),
SYMBOL_FOR_SYNCHRONOUS_IDLE => Ok(ControlPictures::SymbolForSynchronousIdle),
SYMBOL_FOR_END_OF_TRANSMISSION_BLOCK => Ok(ControlPictures::SymbolForEndOfTransmissionBlock),
SYMBOL_FOR_CANCEL => Ok(ControlPictures::SymbolForCancel),
SYMBOL_FOR_END_OF_MEDIUM => Ok(ControlPictures::SymbolForEndOfMedium),
SYMBOL_FOR_SUBSTITUTE => Ok(ControlPictures::SymbolForSubstitute),
SYMBOL_FOR_ESCAPE => Ok(ControlPictures::SymbolForEscape),
SYMBOL_FOR_FILE_SEPARATOR => Ok(ControlPictures::SymbolForFileSeparator),
SYMBOL_FOR_GROUP_SEPARATOR => Ok(ControlPictures::SymbolForGroupSeparator),
SYMBOL_FOR_RECORD_SEPARATOR => Ok(ControlPictures::SymbolForRecordSeparator),
SYMBOL_FOR_UNIT_SEPARATOR => Ok(ControlPictures::SymbolForUnitSeparator),
SYMBOL_FOR_SPACE => Ok(ControlPictures::SymbolForSpace),
SYMBOL_FOR_DELETE => Ok(ControlPictures::SymbolForDelete),
BLANK_SYMBOL => Ok(ControlPictures::BlankSymbol),
OPEN_BOX => Ok(ControlPictures::OpenBox),
SYMBOL_FOR_NEWLINE => Ok(ControlPictures::SymbolForNewline),
SYMBOL_FOR_DELETE_FORM_TWO => Ok(ControlPictures::SymbolForDeleteFormTwo),
SYMBOL_FOR_SUBSTITUTE_FORM_TWO => Ok(ControlPictures::SymbolForSubstituteFormTwo),
_ => Err(()),
}
}
}
impl Into<u32> for ControlPictures {
fn into(self) -> u32 {
let c: char = self.into();
let hex = c
.escape_unicode()
.to_string()
.replace("\\u{", "")
.replace("}", "");
u32::from_str_radix(&hex, 16).unwrap()
}
}
impl std::convert::TryFrom<u32> for ControlPictures {
type Error = ();
fn try_from(u: u32) -> Result<Self, Self::Error> {
if let Ok(c) = char::try_from(u) {
Self::try_from(c)
} else {
Err(())
}
}
}
impl Iterator for ControlPictures {
type Item = Self;
fn next(&mut self) -> Option<Self> {
let index: u32 = (*self).into();
use std::convert::TryFrom;
Self::try_from(index + 1).ok()
}
}
impl ControlPictures {
pub fn new() -> Self {
ControlPictures::SymbolForNull
}
pub fn name(&self) -> &str {
match self {
ControlPictures::SymbolForNull => "symbol for null",
ControlPictures::SymbolForStartOfHeading => "symbol for start of heading",
ControlPictures::SymbolForStartOfText => "symbol for start of text",
ControlPictures::SymbolForEndOfText => "symbol for end of text",
ControlPictures::SymbolForEndOfTransmission => "symbol for end of transmission",
ControlPictures::SymbolForEnquiry => "symbol for enquiry",
ControlPictures::SymbolForAcknowledge => "symbol for acknowledge",
ControlPictures::SymbolForBell => "symbol for bell",
ControlPictures::SymbolForBackspace => "symbol for backspace",
ControlPictures::SymbolForHorizontalTabulation => "symbol for horizontal tabulation",
ControlPictures::SymbolForLineFeed => "symbol for line feed",
ControlPictures::SymbolForVerticalTabulation => "symbol for vertical tabulation",
ControlPictures::SymbolForFormFeed => "symbol for form feed",
ControlPictures::SymbolForCarriageReturn => "symbol for carriage return",
ControlPictures::SymbolForShiftOut => "symbol for shift out",
ControlPictures::SymbolForShiftIn => "symbol for shift in",
ControlPictures::SymbolForDataLinkEscape => "symbol for data link escape",
ControlPictures::SymbolForDeviceControlOne => "symbol for device control one",
ControlPictures::SymbolForDeviceControlTwo => "symbol for device control two",
ControlPictures::SymbolForDeviceControlThree => "symbol for device control three",
ControlPictures::SymbolForDeviceControlFour => "symbol for device control four",
ControlPictures::SymbolForNegativeAcknowledge => "symbol for negative acknowledge",
ControlPictures::SymbolForSynchronousIdle => "symbol for synchronous idle",
ControlPictures::SymbolForEndOfTransmissionBlock => "symbol for end of transmission block",
ControlPictures::SymbolForCancel => "symbol for cancel",
ControlPictures::SymbolForEndOfMedium => "symbol for end of medium",
ControlPictures::SymbolForSubstitute => "symbol for substitute",
ControlPictures::SymbolForEscape => "symbol for escape",
ControlPictures::SymbolForFileSeparator => "symbol for file separator",
ControlPictures::SymbolForGroupSeparator => "symbol for group separator",
ControlPictures::SymbolForRecordSeparator => "symbol for record separator",
ControlPictures::SymbolForUnitSeparator => "symbol for unit separator",
ControlPictures::SymbolForSpace => "symbol for space",
ControlPictures::SymbolForDelete => "symbol for delete",
ControlPictures::BlankSymbol => "blank symbol",
ControlPictures::OpenBox => "open box",
ControlPictures::SymbolForNewline => "symbol for newline",
ControlPictures::SymbolForDeleteFormTwo => "symbol for delete form two",
ControlPictures::SymbolForSubstituteFormTwo => "symbol for substitute form two",
}
}
}