use rust_xlsxwriter::{CustomSerializeField, SerializeFieldOptions, Workbook, XlsxError};
use serde::{Deserialize, Serialize};
fn main() -> Result<(), XlsxError> {
let mut workbook = Workbook::new();
let worksheet = workbook.add_worksheet();
#[derive(Deserialize, Serialize)]
struct Produce {
fruit: &'static str,
cost: f64,
in_stock: bool,
}
let items = [
Produce {
fruit: "Peach",
cost: 1.05,
in_stock: true,
},
Produce {
fruit: "Plum",
cost: 0.15,
in_stock: false,
},
Produce {
fruit: "Pear",
cost: 0.75,
in_stock: true,
},
];
let custom_headers = [
CustomSerializeField::new("fruit").rename("Item"),
CustomSerializeField::new("cost").rename("Price"),
CustomSerializeField::new("in_stock").rename("Foo"),
];
let header_options = SerializeFieldOptions::new().set_custom_headers(&custom_headers);
worksheet.deserialize_headers_with_options::<Produce>(0, 0, &header_options)?;
worksheet.serialize(&items)?;
let custom_headers = [
CustomSerializeField::new("fruit").rename("Item"),
CustomSerializeField::new("cost").rename("Price"),
];
let header_options = SerializeFieldOptions::new()
.set_custom_headers(&custom_headers)
.use_custom_headers_only(true);
worksheet.deserialize_headers_with_options::<Produce>(0, 4, &header_options)?;
worksheet.serialize(&items)?;
let custom_headers = [
CustomSerializeField::new("cost").rename("Price"),
CustomSerializeField::new("fruit").rename("Item"),
];
let header_options = SerializeFieldOptions::new();
let header_options = header_options
.set_custom_headers(&custom_headers)
.use_custom_headers_only(true);
worksheet.deserialize_headers_with_options::<Produce>(0, 7, &header_options)?;
worksheet.serialize(&items)?;
workbook.save("serialize.xlsx")?;
Ok(())
}