serde-pgrow 0.3.6

Deserialize a serde-type from a PgRow
Documentation
use super::*;

#[derive(Debug)]
pub struct DeRowMap<'a> {
    pub(super) de_row: &'a DeRow<'a>,
    pub(super) keys: std::vec::IntoIter<String>,
    pub(super) values: std::vec::IntoIter<&'a str>,
}

impl<'a> DeRowMap<'a> {
    pub(super) fn new(de_row: &'a DeRow<'a>) -> Self {
        let mut prefix = de_row.prefix.join("_");
        if !prefix.is_empty() {
            prefix.push('_');
        }

        let keys = de_row
            .cols
            .iter()
            .map(|c| c.name())
            .filter(|c| c.starts_with(&prefix))
            .map(|c| c[prefix.len()..].to_owned())
            .collect::<Vec<_>>()
            .into_iter();
        let values = de_row
            .cols
            .iter()
            .map(|c| c.name())
            .filter(|c| c.starts_with(&prefix))
            .collect::<Vec<_>>()
            .into_iter();
        Self {
            de_row,
            keys,
            values,
        }
    }
}