cargo-aprz-lib 0.14.0

Internal library for cargo-aprz
Documentation
use super::{KeywordId, define_rows, define_table};
#[cfg(all_fields)]
use chrono::{DateTime, Utc};

define_rows! {
    KeywordRow<'a> {
        pub id: KeywordId,
        pub keyword: &'a str,
        #[cfg(all_fields)]
        pub crates_cnt: u64,
        #[cfg(all_fields)]
        pub created_at: DateTime<Utc>,
    }
}

define_table! {
    keywords {
        fn write_row(csv_row: &CsvKeywordRow<'a>, writer: &mut RowWriter<impl Write>) -> Result<()> {
            writer.write_str_as_u64(csv_row.id)?;
            writer.write_str(csv_row.keyword);

            #[cfg(all_fields)]
            {
                writer.write_str_as_u64(csv_row.crates_cnt)?;
                writer.write_str_as_datetime(csv_row.created_at)?;
            }

            Ok(())
        }

        fn read_row<'a>(reader: &mut RowReader<'a>) -> KeywordRow<'a> {
            KeywordRow {
                id: KeywordId(reader.read_u64()),
                keyword: reader.read_str(),

                #[cfg(all_fields)]
                crates_cnt: reader.read_u64(),

                #[cfg(all_fields)]
                created_at: reader.read_datetime(),
            }
        }
    }
}