diff --git a/coordinates/src/bin/default_map.rs b/coordinates/src/bin/default_map.rs new file mode 100644 index 0000000..ec946a4 --- /dev/null +++ b/coordinates/src/bin/default_map.rs @@ -0,0 +1,32 @@ +use coordinates::hex_map; +use std::path::PathBuf; + +#[derive(Clone)] +struct MapVal; + +impl Default for MapVal { + fn default() -> Self { + Self + } +} + +impl From for String { + fn from(_val: MapVal) -> Self { + ".".to_owned() + } +} + +fn main() { + let mut args = std::env::args().skip(1); + + let filename = args + .next() + .map(|p| PathBuf::from(p)) + .expect("A filename is required"); + let size = args + .next() + .and_then(|s| s.parse::().ok()) + .unwrap_or(3); + let map: hex_map::Map = hex_map::Map::new_hexagonal(size); + hex_map::write_file(filename, map); +} diff --git a/coordinates/src/hex_map.rs b/coordinates/src/hex_map.rs index 1291c69..72ff9cc 100644 --- a/coordinates/src/hex_map.rs +++ b/coordinates/src/hex_map.rs @@ -67,7 +67,9 @@ where std::fs::write(path, write_data(map).join("\n")).map_err(Error::from) } -fn parse_data<'a, A: Default + From>(data: impl Iterator + 'a) -> Map { +pub fn parse_data<'a, A: Default + From>( + data: impl Iterator + 'a, +) -> Map { fn parse_line>(input: &str) -> Result<(AxialAddr, A), nom::error::Error<&str>> { fn parse>(input: &str) -> IResult<&str, (AxialAddr, A)> { let (input, addr) = parse_address(input)?;