use crate::error::Result;
#[cfg(not(feature = "std"))]
use alloc::string::String;
use core::iter::repeat;
#[derive(Copy, Clone, Debug)]
pub struct ASCII {
pub height: usize,
pub xdim: usize,
}
const CHARS: [char; 2] = [' ', '#'];
impl Default for ASCII {
fn default() -> Self {
Self::new()
}
}
impl ASCII {
pub fn new() -> ASCII {
ASCII {
height: 10,
xdim: 1,
}
}
fn generate_row(&self, barcode: &[u8]) -> String {
barcode
.iter()
.flat_map(|&d| repeat(CHARS[d as usize]).take(self.xdim))
.collect()
}
pub fn generate<T: AsRef<[u8]>>(&self, barcode: T) -> Result<String> {
let mut output = String::new();
let row = self.generate_row(barcode.as_ref());
for (i, _l) in (0..self.height).enumerate() {
output.push_str(&row[..]);
if i < self.height - 1 {
output.push('\n');
}
}
Ok(output)
}
}
#[cfg(test)]
mod tests {
use crate::generators::ascii::*;
use crate::sym::codabar::*;
use crate::sym::code11::*;
use crate::sym::code128::*;
use crate::sym::code39::*;
use crate::sym::code93::*;
use crate::sym::ean13::*;
use crate::sym::ean8::*;
use crate::sym::ean_supp::*;
use crate::sym::tf::*;
#[test]
fn ean_13_as_ascii() {
let ean13 = EAN13::new("750103131130").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&ean13.encode()[..]).unwrap();
assert_eq!(
generated,
"
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
# # ## # # ### ## # # ### #### # ## ## # # # # ## ## ## ## # # ### # ### # # #
"
.trim()
);
}
#[test]
fn ean_13_as_ascii_small_height_double_width() {
let ean13 = EAN13::new("750103131130").unwrap();
let ascii = ASCII { height: 6, xdim: 2 };
let generated = ascii.generate(&ean13.encode()[..]).unwrap();
assert_eq!(generated,
"
## ## #### ## ## ###### #### ## ## ###### ######## ## #### #### ## ## ## ## #### #### #### #### ## ## ###### ## ###### ## ## ##
## ## #### ## ## ###### #### ## ## ###### ######## ## #### #### ## ## ## ## #### #### #### #### ## ## ###### ## ###### ## ## ##
## ## #### ## ## ###### #### ## ## ###### ######## ## #### #### ## ## ## ## #### #### #### #### ## ## ###### ## ###### ## ## ##
## ## #### ## ## ###### #### ## ## ###### ######## ## #### #### ## ## ## ## #### #### #### #### ## ## ###### ## ###### ## ## ##
## ## #### ## ## ###### #### ## ## ###### ######## ## #### #### ## ## ## ## #### #### #### #### ## ## ###### ## ###### ## ## ##
## ## #### ## ## ###### #### ## ## ###### ######## ## #### #### ## ## ## ## #### #### #### #### ## ## ###### ## ###### ## ## ##
".trim());
}
#[test]
fn ean_8_as_ascii() {
let ean8 = EAN8::new("1234567").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&ean8.encode()[..]).unwrap();
assert_eq!(
generated,
"
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
# # ## # # ## #### # # ## # # # ### # # # # ### # # #
"
.trim()
);
}
#[test]
fn ean_8_as_ascii_small_height_double_width() {
let ean8 = EAN8::new("1234567").unwrap();
let ascii = ASCII { height: 5, xdim: 2 };
let generated = ascii.generate(&ean8.encode()[..]).unwrap();
assert_eq!(generated,
"
## ## #### ## ## #### ######## ## ## #### ## ## ## ###### ## ## ## ## ###### ## ## ##
## ## #### ## ## #### ######## ## ## #### ## ## ## ###### ## ## ## ## ###### ## ## ##
## ## #### ## ## #### ######## ## ## #### ## ## ## ###### ## ## ## ## ###### ## ## ##
## ## #### ## ## #### ######## ## ## #### ## ## ## ###### ## ## ## ## ###### ## ## ##
## ## #### ## ## #### ######## ## ## #### ## ## ## ###### ## ## ## ## ###### ## ## ##
".trim());
}
#[test]
fn code_39_as_ascii() {
let code39 = Code39::new("TEST8052").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&code39.encode()[..]).unwrap();
assert_eq!(generated,
"
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
# # ## ## # # # ## ## # ## # ## # # # ## # ## # # # ## ## # ## # # ## # # # ## ## # ## # ## # # # ## # # ## # # ## ## #
".trim());
}
#[test]
fn code_39_as_ascii_small_height_double_weight() {
let code39 = Code39::new("1234").unwrap();
let ascii = ASCII { height: 7, xdim: 2 };
let generated = ascii.generate(&code39.encode()[..]).unwrap();
assert_eq!(generated,
"
## ## #### #### ## #### ## ## ## #### ## #### ## ## #### #### #### ## ## ## ## ## #### ## #### ## ## #### #### ##
## ## #### #### ## #### ## ## ## #### ## #### ## ## #### #### #### ## ## ## ## ## #### ## #### ## ## #### #### ##
## ## #### #### ## #### ## ## ## #### ## #### ## ## #### #### #### ## ## ## ## ## #### ## #### ## ## #### #### ##
## ## #### #### ## #### ## ## ## #### ## #### ## ## #### #### #### ## ## ## ## ## #### ## #### ## ## #### #### ##
## ## #### #### ## #### ## ## ## #### ## #### ## ## #### #### #### ## ## ## ## ## #### ## #### ## ## #### #### ##
## ## #### #### ## #### ## ## ## #### ## #### ## ## #### #### #### ## ## ## ## ## #### ## #### ## ## #### #### ##
## ## #### #### ## #### ## ## ## #### ## #### ## ## #### #### #### ## ## ## ## ## #### ## #### ## ## #### #### ##
".trim());
}
#[test]
fn codabar_as_ascii() {
let codabar = Codabar::new("A98B").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&codabar.encode()[..]).unwrap();
assert_eq!(
generated,
"
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
# ## # # ## # # # # ## # # # # # ##
"
.trim()
);
}
#[test]
fn codabar_as_ascii_small_height_double_weight() {
let codabar = Codabar::new("A40156B").unwrap();
let ascii = ASCII { height: 7, xdim: 2 };
let generated = ascii.generate(&codabar.encode()[..]).unwrap();
assert_eq!(generated,
"
## #### ## ## ## #### ## ## ## ## ## #### ## ## #### ## #### ## ## ## ## ## ## #### ## ## ## ####
## #### ## ## ## #### ## ## ## ## ## #### ## ## #### ## #### ## ## ## ## ## ## #### ## ## ## ####
## #### ## ## ## #### ## ## ## ## ## #### ## ## #### ## #### ## ## ## ## ## ## #### ## ## ## ####
## #### ## ## ## #### ## ## ## ## ## #### ## ## #### ## #### ## ## ## ## ## ## #### ## ## ## ####
## #### ## ## ## #### ## ## ## ## ## #### ## ## #### ## #### ## ## ## ## ## ## #### ## ## ## ####
## #### ## ## ## #### ## ## ## ## ## #### ## ## #### ## #### ## ## ## ## ## ## #### ## ## ## ####
## #### ## ## ## #### ## ## ## ## ## #### ## ## #### ## #### ## ## ## ## ## ## #### ## ## ## ####
".trim());
}
#[test]
fn code_128_as_ascii() {
let code128 = Code128::new("ÀHELLO").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&code128.encode()[..]).unwrap();
assert_eq!(
generated,
"
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
## # # ## # # # ## # # ## ### # ## ### # ### ## ## # # ## ### # ##
"
.trim()
);
}
#[test]
fn code_128_as_ascii_small_height_double_weight() {
let code128 = Code128::new("ÀHELLO").unwrap();
let ascii = ASCII { height: 7, xdim: 2 };
let generated = ascii.generate(&code128.encode()[..]).unwrap();
assert_eq!(generated,
"
#### ## ## #### ## ## ## #### ## ## #### ###### ## #### ###### ## ###### #### #### ## ## #### ###### ## ####
#### ## ## #### ## ## ## #### ## ## #### ###### ## #### ###### ## ###### #### #### ## ## #### ###### ## ####
#### ## ## #### ## ## ## #### ## ## #### ###### ## #### ###### ## ###### #### #### ## ## #### ###### ## ####
#### ## ## #### ## ## ## #### ## ## #### ###### ## #### ###### ## ###### #### #### ## ## #### ###### ## ####
#### ## ## #### ## ## ## #### ## ## #### ###### ## #### ###### ## ###### #### #### ## ## #### ###### ## ####
#### ## ## #### ## ## ## #### ## ## #### ###### ## #### ###### ## ###### #### #### ## ## #### ###### ## ####
#### ## ## #### ## ## ## #### ## ## #### ###### ## #### ###### ## ###### #### #### ## ## #### ###### ## ####
".trim());
}
#[test]
fn ean2_as_ascii() {
let ean2 = EANSUPP::new("34").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&ean2.encode()[..]).unwrap();
assert_eq!(
generated,
"
# ## # # # # ##
# ## # # # # ##
# ## # # # # ##
# ## # # # # ##
# ## # # # # ##
# ## # # # # ##
# ## # # # # ##
# ## # # # # ##
# ## # # # # ##
# ## # # # # ##
"
.trim()
);
}
#[test]
fn ean5_as_ascii() {
let ean5 = EANSUPP::new("50799").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&ean5.encode()[..]).unwrap();
assert_eq!(
generated,
"
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
# ## ## # # # ### # # # # # ## # # ##
"
.trim()
);
}
#[test]
fn itf_as_ascii() {
let itf = TF::interleaved("12345").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&itf.encode()[..]).unwrap();
assert_eq!(
generated,
"
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
# # ### # # # ### ### ### # # # ### # ### # # ## #
"
.trim()
);
}
#[test]
fn code_93_as_ascii() {
let code93 = Code93::new("TEST93").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&code93.encode()[..]).unwrap();
assert_eq!(
generated,
"
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
# # #### ## # ## ## # # ## # ## ## # ## # # # # # # # ### ## # # # # # #### #
"
.trim()
);
}
#[test]
fn code_93_as_ascii_small_height_double_weight() {
let code93 = Code93::new("TEST93").unwrap();
let ascii = ASCII { height: 7, xdim: 2 };
let generated = ascii.generate(&code93.encode()[..]).unwrap();
assert_eq!(generated,
"
## ## ######## #### ## #### #### ## ## #### ## #### #### ## #### ## ## ## ## ## ## ## ###### #### ## ## ## ## ## ######## ##
## ## ######## #### ## #### #### ## ## #### ## #### #### ## #### ## ## ## ## ## ## ## ###### #### ## ## ## ## ## ######## ##
## ## ######## #### ## #### #### ## ## #### ## #### #### ## #### ## ## ## ## ## ## ## ###### #### ## ## ## ## ## ######## ##
## ## ######## #### ## #### #### ## ## #### ## #### #### ## #### ## ## ## ## ## ## ## ###### #### ## ## ## ## ## ######## ##
## ## ######## #### ## #### #### ## ## #### ## #### #### ## #### ## ## ## ## ## ## ## ###### #### ## ## ## ## ## ######## ##
## ## ######## #### ## #### #### ## ## #### ## #### #### ## #### ## ## ## ## ## ## ## ###### #### ## ## ## ## ## ######## ##
## ## ######## #### ## #### #### ## ## #### ## #### #### ## #### ## ## ## ## ## ## ## ###### #### ## ## ## ## ## ######## ##
".trim());
}
#[test]
fn code_11_as_ascii() {
let code11 = Code11::new("12-9").unwrap();
let ascii = ASCII::new();
let generated = ascii.generate(&code11.encode()[..]).unwrap();
assert_eq!(
generated,
"
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
# ## # ## # ## # # ## # ## # ## # # # ## # # ## #
"
.trim()
);
}
}