use std::fmt::Write;
use datamatrix::{
placement::{Bitmap, PathSegment},
DataMatrix, SymbolList,
};
fn bitmap_to_svg(bitmap: Bitmap<bool>) -> String {
let mut svg: String = concat!(
"<?xml version=\"1.0\"?><svg xmlns=\"http://www.w3.org/2000/svg\">",
"<path fill-rule=\"evenodd\" d=\"M1,1",
)
.to_owned();
for part in bitmap.path() {
match part {
PathSegment::Horizontal(n) => write!(svg, "h{}", n),
PathSegment::Vertical(n) => write!(svg, "v{}", n),
PathSegment::Move(dx, dy) => write!(svg, "m{},{}", dx, dy),
PathSegment::Close => write!(svg, "z"),
}
.unwrap();
}
svg.push_str("\"/></svg>");
svg
}
fn main() {
let bitmap = DataMatrix::encode(b"Hello, SVG!", SymbolList::default().enforce_rectangular())
.unwrap()
.bitmap();
println!("{}", bitmap_to_svg(bitmap));
}