1use std::fs;
2use barcoders::generators::image::Image;
3use barcoders::generators::svg::{SVG};
4use barcoders::sym::code128::Code128;
5use barcoders::sym::code39::Code39;
6use barcoders::sym::code93::Code93;
7use barcoders::sym::ean13::*;
8use barcoders::sym::ean8::EAN8;
9use ril::{Image as ril_Image, ImageFormat as ril_ImageFormat, Rgb as ril_Rgb};
10
11pub fn barcode_create_ean13(code: &str, mode: &str, filename: &str) -> bool {
13 match EAN13::new(code) {
14 Ok(ean13) => {
15 let mut encoded: Vec<u8> = ean13.encode();
16 match mode {
17 "svg" => {
18 let svg = SVG::new(80);
19 let data: String = svg.generate(&encoded).unwrap();
20 fs::write(filename, data).is_ok()
21 }
22 "png" => {
23 let mut list = vec![];
24 let index = 5;
25 for _ in 0..5 {
26 encoded.insert(0, 0);
27 encoded.push(0);
28 }
29 let mut top = encoded.clone();
30 top.fill(0);
31 for _ in 0..5 {
32 list.push(top.clone());
33 }
34 for _ in 0..50 {
35 list.push(encoded.clone())
36 }
37 for _ in 0..5 {
38 let mut tt = top.clone();
39 tt[index] = 1;
40 tt[index + 2] = 1;
41 let len = tt.len() / 2 - 10;
42 tt[index + len] = 1;
43 tt[index + len + 2] = 1;
44
45 let ind = tt.len() - index - 1;
46 tt[ind] = 1;
47 tt[ind - 2] = 1;
48 list.push(tt.clone())
49 }
50 for _ in 0..5 {
51 list.push(top.clone());
52 }
53
54 let image = ril_Image::from_fn(encoded.len() as u32, list.len() as u32, |w, h| {
55 if list[h as usize][w as usize] == 0 {
56 ril_Rgb::new(255, 255, 255)
57 } else {
58 ril_Rgb::new(0, 0, 0)
59 }
60 });
61 image.save(ril_ImageFormat::Png, filename).is_ok()
62 }
63 _ => {
64 let svg = SVG::new(80);
65 let data: String = svg.generate(&encoded).unwrap();
66 fs::write(filename, data).is_ok()
67 }
68 }
69 }
70 Err(e) => {
71 println!("{}", e);
72 false
73 }
74 }
75}
76
77pub fn barcode_create_ean8(code: &str, mode: &str, filename: &str) -> bool {
79 match EAN8::new(code) {
80 Ok(ean8) => {
81 let encoded: Vec<u8> = ean8.encode();
82 match mode {
83 "svg" => {
84 let svg = SVG::new(80);
85 let data: String = svg.generate(&encoded).unwrap();
86 fs::write(filename, data).is_ok()
87 }
88 "png" => {
89 let png = Image::png(20);
90 let bytes = png.generate(&encoded[..]).unwrap();
91 fs::write(filename, bytes).is_ok()
92 }
93 _ => {
94 let svg = SVG::new(80);
95 let data: String = svg.generate(&encoded).unwrap();
96 fs::write(filename, data).is_ok()
97 }
98 }
99 }
100 Err(e) => {
101 println!("{}", e);
102 false
103 }
104 }
105}
106
107pub fn barcode_create_code39(code: &str, mode: &str, filename: &str) -> bool {
109 match Code39::new(code) {
110 Ok(barcode) => {
111 let encoded = barcode.encode();
112 match mode {
113 "svg" => {
114 let svg = SVG::new(80);
115 let data: String = svg.generate(&encoded).unwrap();
116 fs::write(filename, data).is_ok()
117 }
118 "png" => {
119 let png = Image::png(80); let bytes = png.generate(&encoded[..]).unwrap();
121 fs::write(filename, bytes).is_ok()
122 }
123 _ => {
124 let svg = SVG::new(80);
125 let data: String = svg.generate(&encoded).unwrap();
126 fs::write(filename, data).is_ok()
127 }
128 }
129 }
130 Err(e) => {
131 println!("{}", e);
132 false
133 }
134 }
135}
136
137pub fn barcode_create_code93(code: &str, mode: &str, filename: &str) -> bool {
139 match Code93::new(code) {
140 Ok(barcode) => {
141 let encoded = barcode.encode();
142 match mode {
143 "svg" => {
144 let svg = SVG::new(80);
145 let data: String = svg.generate(&encoded).unwrap();
146 fs::write(filename, data).is_ok()
147 }
148 "png" => {
149 let png = Image::png(80); let bytes = png.generate(&encoded[..]).unwrap();
151 fs::write(filename, bytes).is_ok()
152 }
153 _ => {
154 let svg = SVG::new(80);
155 let data: String = svg.generate(&encoded).unwrap();
156 fs::write(filename, data).is_ok()
157 }
158 }
159 }
160 Err(e) => {
161 println!("{}", e);
162 false
163 }
164 }
165}
166
167pub fn barcode_create_code128(code: &str, unit: &str, mode: &str, filename: &str) -> bool {
169 let code = match unit {
170 "a" => {
171 code.to_string()
172 }
173 "b" => {
174 code.to_string()
175 }
176 "c" => {
177 code.to_string()
178 }
179 _ => {
180 code.to_string()
181 }
182 };
183
184 match Code128::new(code) {
185 Ok(barcode) => {
186 let encoded = barcode.encode();
187 match mode {
188 "svg" => {
189 let svg = SVG::new(80);
190 let data: String = svg.generate(&encoded).unwrap();
191 fs::write(filename, data).is_ok()
192 }
193 "png" => {
194 let png = Image::png(80);
195 let bytes = png.generate(&encoded[..]).unwrap();
196 fs::write(filename, bytes).is_ok()
197 }
198 _ => {
199 let svg = SVG::new(80);
200 let data: String = svg.generate(&encoded).unwrap();
201 fs::write(filename, data).is_ok()
202 }
203 }
204 }
205 Err(e) => {
206 println!("{}", e);
207 false
208 }
209 }
210}
211
212pub fn create_barcode(code: &str) -> String {
213 let len = code.len();
214 match len {
215 8 => {
216 match EAN8::new(code) {
217 Ok(ean8) => {
218 let encoded: Vec<u8> = ean8.encode();
219 let svg = SVG::new(80);
220 let data: String = svg.generate(&encoded).unwrap();
221 data
222 }
223 Err(_) => {
224 "".to_string()
225 }
226 }
227 }
228 13 => {
229 match EAN13::new(code) {
230 Ok(ean13) => {
231 let encoded: Vec<u8> = ean13.encode();
232 let svg = SVG::new(80);
233 let data: String = svg.generate(&encoded).unwrap();
234 data
235 }
236 Err(_) => {
237 "".to_string()
238 }
239 }
240 }
241 _ => {
242 match Code93::new(code) {
243 Ok(barcode) => {
244 let encoded = barcode.encode();
245 let svg = SVG::new(80);
246 let data: String = svg.generate(&encoded).unwrap();
247 data
248 }
249 Err(_) => {
250 "".to_string()
251 }
252 }
253 }
254 }
255}