use crate::{letter::Letter, State};
use std::fmt;
#[derive(Clone, Debug)]
pub struct Transition {
pub name: String,
pub source_state: String,
pub output_state: State,
pub input_letter: Letter,
pub output_letter: Letter,
}
impl Transition {
pub fn new(
name: String,
output_state: State,
input_letter: Letter,
output_letter: Letter,
) -> Self {
Transition {
name,
source_state: String::new(),
output_state,
input_letter,
output_letter,
}
}
pub fn new_with_source(
name: String,
source_state: String,
output_state: State,
input_letter: Letter,
output_letter: Letter,
) -> Self {
Transition {
name,
source_state,
output_state,
input_letter,
output_letter,
}
}
pub fn label(&self) -> String {
format!(
"{} / {}",
self.input_letter.symbols(),
self.output_letter.symbols()
)
}
}
impl fmt::Display for Transition {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{} / {}", self.input_letter, self.output_letter)
}
}