use serde::Deserialize;
use std::error::Error;
#[derive(Debug, Deserialize)]
pub struct Book {
#[serde(rename = "Book Id")]
pub book_id: String,
#[serde(rename = "Title")]
pub title: String,
#[serde(rename = "Author")]
pub author: String,
#[serde(rename = "Author l-f")]
pub author_l_f: String,
#[serde(rename = "Additional Authors")]
pub additional_authors: String,
#[serde(rename = "ISBN")]
pub isbn: String,
#[serde(rename = "ISBN13")]
pub isbn13: String,
#[serde(rename = "My Rating")]
pub my_rating: String,
#[serde(rename = "Average Rating")]
pub average_rating: String,
#[serde(rename = "Publisher")]
pub publisher: String,
#[serde(rename = "Binding")]
pub binding: String,
#[serde(rename = "Number of Pages")]
pub number_of_pages: String,
#[serde(rename = "Year Published")]
pub year_published: String,
#[serde(rename = "Original Publication Year")]
pub original_publication_year: String,
#[serde(rename = "Date Read")]
pub date_read: String,
#[serde(rename = "Date Added")]
pub date_added: String,
#[serde(rename = "Bookshelves")]
pub bookshelves: String,
#[serde(rename = "Bookshelves with positions")]
pub bookshelves_with_positions: String,
#[serde(rename = "Exclusive Shelf")]
pub exclusive_shelf: String,
#[serde(rename = "My Review")]
pub my_review: String,
#[serde(rename = "Spoiler")]
pub spoiler: String,
#[serde(rename = "Private Notes")]
pub private_notes: String,
#[serde(rename = "Read Count")]
pub read_count: i8,
#[serde(rename = "Owned Copies")]
pub owned_copies: i8,
}
pub fn books_from_csv(csv_path: String) -> Result<Vec<Book>, Box<dyn Error>> {
let mut books = Vec::new();
let mut rdr = csv::Reader::from_path(csv_path)?;
for result in rdr.deserialize() {
let record: Book = result?;
books.push(record);
}
println!("{:?}", books);
Ok(books)
}