use std::collections::HashMap;
pub struct StandardPalette;
impl StandardPalette {
pub fn get() -> HashMap<char, String> {
let mut palette = HashMap::new();
palette.insert(
'╋',
"minecraft:redstone_wire[power=0,east=side,west=side,north=side,south=side]"
.to_string(),
);
palette.insert(
'┼',
"minecraft:redstone_wire[power=0,east=side,west=side,north=side,south=side]"
.to_string(),
);
palette.insert(
'─',
"minecraft:redstone_wire[power=0,east=side,west=side,north=none,south=none]"
.to_string(),
);
palette.insert(
'═',
"minecraft:redstone_wire[power=0,east=side,west=side,north=none,south=none]"
.to_string(),
);
palette.insert(
'│',
"minecraft:redstone_wire[power=0,east=none,west=none,north=side,south=side]"
.to_string(),
);
palette.insert(
'║',
"minecraft:redstone_wire[power=0,east=none,west=none,north=side,south=side]"
.to_string(),
);
palette.insert(
'┌',
"minecraft:redstone_wire[power=0,east=side,west=none,north=none,south=side]"
.to_string(),
);
palette.insert(
'┐',
"minecraft:redstone_wire[power=0,east=none,west=side,north=none,south=side]"
.to_string(),
);
palette.insert(
'└',
"minecraft:redstone_wire[power=0,east=side,west=none,north=side,south=none]"
.to_string(),
);
palette.insert(
'┘',
"minecraft:redstone_wire[power=0,east=none,west=side,north=side,south=none]"
.to_string(),
);
palette.insert(
'├',
"minecraft:redstone_wire[power=0,east=side,west=none,north=side,south=side]"
.to_string(),
);
palette.insert(
'┤',
"minecraft:redstone_wire[power=0,east=none,west=side,north=side,south=side]"
.to_string(),
);
palette.insert(
'┬',
"minecraft:redstone_wire[power=0,east=side,west=side,north=none,south=side]"
.to_string(),
);
palette.insert(
'┴',
"minecraft:redstone_wire[power=0,east=side,west=side,north=side,south=none]"
.to_string(),
);
palette.insert(
'→',
"minecraft:repeater[facing=west,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'←',
"minecraft:repeater[facing=east,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'↑',
"minecraft:repeater[facing=south,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'↓',
"minecraft:repeater[facing=north,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'⇒',
"minecraft:repeater[facing=west,delay=2,locked=false,powered=false]".to_string(),
);
palette.insert(
'⇐',
"minecraft:repeater[facing=east,delay=2,locked=false,powered=false]".to_string(),
);
palette.insert(
'⇑',
"minecraft:repeater[facing=south,delay=2,locked=false,powered=false]".to_string(),
);
palette.insert(
'⇓',
"minecraft:repeater[facing=north,delay=2,locked=false,powered=false]".to_string(),
);
palette.insert(
'➡',
"minecraft:repeater[facing=west,delay=3,locked=false,powered=false]".to_string(),
);
palette.insert(
'⬅',
"minecraft:repeater[facing=east,delay=3,locked=false,powered=false]".to_string(),
);
palette.insert(
'⬆',
"minecraft:repeater[facing=south,delay=3,locked=false,powered=false]".to_string(),
);
palette.insert(
'⬇',
"minecraft:repeater[facing=north,delay=3,locked=false,powered=false]".to_string(),
);
palette.insert(
'⇨',
"minecraft:repeater[facing=west,delay=4,locked=false,powered=false]".to_string(),
);
palette.insert(
'⇦',
"minecraft:repeater[facing=east,delay=4,locked=false,powered=false]".to_string(),
);
palette.insert(
'⇧',
"minecraft:repeater[facing=south,delay=4,locked=false,powered=false]".to_string(),
);
palette.insert(
'⇩',
"minecraft:repeater[facing=north,delay=4,locked=false,powered=false]".to_string(),
);
palette.insert(
'▷',
"minecraft:comparator[facing=west,mode=compare,powered=false]".to_string(),
);
palette.insert(
'◁',
"minecraft:comparator[facing=east,mode=compare,powered=false]".to_string(),
);
palette.insert(
'△',
"minecraft:comparator[facing=south,mode=compare,powered=false]".to_string(),
);
palette.insert(
'▽',
"minecraft:comparator[facing=north,mode=compare,powered=false]".to_string(),
);
palette.insert(
'▶',
"minecraft:comparator[facing=west,mode=subtract,powered=false]".to_string(),
);
palette.insert(
'◀',
"minecraft:comparator[facing=east,mode=subtract,powered=false]".to_string(),
);
palette.insert(
'▲',
"minecraft:comparator[facing=south,mode=subtract,powered=false]".to_string(),
);
palette.insert(
'▼',
"minecraft:comparator[facing=north,mode=subtract,powered=false]".to_string(),
);
palette.insert('🔥', "minecraft:redstone_torch[lit=true]".to_string());
palette.insert('⚡', "minecraft:redstone_torch[lit=true]".to_string());
palette.insert('*', "minecraft:redstone_torch[lit=true]".to_string());
palette.insert('○', "minecraft:redstone_torch[lit=false]".to_string());
palette.insert(
'🡆',
"minecraft:redstone_wall_torch[facing=east,lit=true]".to_string(),
);
palette.insert(
'🡄',
"minecraft:redstone_wall_torch[facing=west,lit=true]".to_string(),
);
palette.insert(
'🡅',
"minecraft:redstone_wall_torch[facing=north,lit=true]".to_string(),
);
palette.insert(
'🡇',
"minecraft:redstone_wall_torch[facing=south,lit=true]".to_string(),
);
palette.insert('█', "minecraft:gray_concrete".to_string());
palette.insert('▓', "minecraft:stone".to_string());
palette.insert('▒', "minecraft:cobblestone".to_string());
palette.insert('░', "minecraft:glass".to_string());
palette.insert('■', "minecraft:black_concrete".to_string());
palette.insert('□', "minecraft:white_concrete".to_string());
palette.insert('▪', "minecraft:gray_concrete".to_string());
palette.insert('▫', "minecraft:light_gray_concrete".to_string());
palette.insert('c', "minecraft:gray_concrete".to_string());
palette.insert('_', "minecraft:air".to_string());
palette.insert(' ', "minecraft:air".to_string());
palette.insert('·', "minecraft:air".to_string());
palette.insert('⬛', "minecraft:redstone_block".to_string());
palette.insert('R', "minecraft:redstone_block".to_string());
palette.insert(
'⎓',
"minecraft:lever[face=floor,facing=north,powered=false]".to_string(),
);
palette.insert(
'●',
"minecraft:stone_button[face=floor,facing=north,powered=false]".to_string(),
);
palette
}
pub fn minimal() -> HashMap<char, String> {
let mut palette = HashMap::new();
palette.insert(
'─',
"minecraft:redstone_wire[power=0,east=side,west=side,north=none,south=none]"
.to_string(),
);
palette.insert(
'│',
"minecraft:redstone_wire[power=0,east=none,west=none,north=side,south=side]"
.to_string(),
);
palette.insert(
'╋',
"minecraft:redstone_wire[power=0,east=side,west=side,north=side,south=side]"
.to_string(),
);
palette.insert(
'→',
"minecraft:repeater[facing=west,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'←',
"minecraft:repeater[facing=east,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'↑',
"minecraft:repeater[facing=south,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'↓',
"minecraft:repeater[facing=north,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'▷',
"minecraft:comparator[facing=west,mode=compare,powered=false]".to_string(),
);
palette.insert(
'◁',
"minecraft:comparator[facing=east,mode=compare,powered=false]".to_string(),
);
palette.insert(
'△',
"minecraft:comparator[facing=south,mode=compare,powered=false]".to_string(),
);
palette.insert(
'▽',
"minecraft:comparator[facing=north,mode=compare,powered=false]".to_string(),
);
palette.insert('*', "minecraft:redstone_torch[lit=true]".to_string());
palette.insert('█', "minecraft:gray_concrete".to_string());
palette.insert('_', "minecraft:air".to_string());
palette
}
pub fn compact() -> HashMap<char, String> {
let mut palette = HashMap::new();
palette.insert(
'-',
"minecraft:redstone_wire[power=0,east=side,west=side,north=none,south=none]"
.to_string(),
);
palette.insert(
'|',
"minecraft:redstone_wire[power=0,east=none,west=none,north=side,south=side]"
.to_string(),
);
palette.insert(
'+',
"minecraft:redstone_wire[power=0,east=side,west=side,north=side,south=side]"
.to_string(),
);
palette.insert(
'>',
"minecraft:repeater[facing=west,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'<',
"minecraft:repeater[facing=east,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'^',
"minecraft:repeater[facing=south,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert(
'v',
"minecraft:repeater[facing=north,delay=1,locked=false,powered=false]".to_string(),
);
palette.insert('*', "minecraft:redstone_torch[lit=true]".to_string());
palette.insert('#', "minecraft:gray_concrete".to_string());
palette.insert('_', "minecraft:air".to_string());
palette
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_standard_palette() {
let palette = StandardPalette::get();
assert!(palette.contains_key(&'╋'));
assert!(palette.contains_key(&'─'));
assert!(palette.contains_key(&'│'));
assert!(palette.contains_key(&'→'));
assert!(palette.contains_key(&'←'));
assert!(palette.contains_key(&'↑'));
assert!(palette.contains_key(&'↓'));
assert!(palette.contains_key(&'▷'));
assert!(palette.contains_key(&'◁'));
assert!(palette.contains_key(&'△'));
assert!(palette.contains_key(&'▽'));
assert!(palette.get(&'╋').unwrap().contains("redstone_wire"));
assert!(palette.get(&'→').unwrap().contains("repeater"));
assert!(palette.get(&'▷').unwrap().contains("comparator"));
}
#[test]
fn test_minimal_palette() {
let palette = StandardPalette::minimal();
assert!(palette.len() < 20);
assert!(palette.contains_key(&'─'));
assert!(palette.contains_key(&'→'));
}
#[test]
fn test_compact_palette() {
let palette = StandardPalette::compact();
for ch in palette.keys() {
assert!(ch.is_ascii(), "Character '{}' is not ASCII", ch);
}
}
}