diff options
Diffstat (limited to 'src/poem/anthology')
-rw-r--r-- | src/poem/anthology/alias.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/poem/anthology/alias.rs b/src/poem/anthology/alias.rs new file mode 100644 index 0000000..6a8e739 --- /dev/null +++ b/src/poem/anthology/alias.rs @@ -0,0 +1,47 @@ +use crate::poem::Verse; +use std::collections::HashMap; + +pub fn incant(verse: &Verse, aliases: &mut HashMap<String, String>) -> i32 { + match verse.clause() { + Some(clause) => { + for stanza in clause { + let (key, val) = match stanza.split_once("=") { + Some((key, val)) => (key, val), + None => continue, + }; + aliases.insert(String::from(key), String::from(val)); + } + } + None => { + for (key, val) in aliases { + if key.contains(' ') && val.contains(' ') { + println!("'{}'='{}'", key, val); + } else if key.contains(' ') { + println!("'{}'={}", key, val); + } else if val.contains(' ') { + println!("{}='{}'", key, val); + } else if val.is_empty() { + println!("{}=''", key); + } else { + println!("{}={}", key, val); + } + } + } + } + 0 +} + +pub fn unincant(verse: &Verse, aliases: &mut HashMap<String, String>) -> i32 { + match verse.clause() { + Some(clause) => { + for stanza in clause { + aliases.remove(&stanza); + } + } + None => { + eprintln!("unalias: not enough arguments"); + return 1; + } + } + 0 +} |