ntdsextract2 1.2.0

Display contents of Active Directory database files (ntds.dit)
use serde::Deserialize;

use crate::{SerializationType, RdnSet, win32_types::Rdn};

pub struct CsvSerialization;

impl SerializationType for CsvSerialization {
    fn serialize<S>(
        items: impl Iterator<Item = String>,
        serializer: S,
    ) -> Result<S::Ok, S::Error>
    where
        S: serde::Serializer,
    {
        let v = Vec::from_iter(items).join(",");
        serializer.serialize_str(&v)
    }

    fn deserialize<'de, D>(deserializer: D) -> Result<RdnSet<Self>, D::Error>
    where
        D: serde::Deserializer<'de>,
    {
        let s = String::deserialize(deserializer)?;
        let mut parts = Vec::new();
        for s in s.split(',') {
            parts.push(Rdn::try_from(s).unwrap())
        }
        Ok(parts.into())
    }
}