semdiff-differ-audio 0.3.0

Audio diff calculator and reporters for semdiff.
Documentation
use crate::{AudioDiff, AudioDiffReporter, audio_extension};
use semdiff_core::fs::FileLeaf;
use semdiff_core::{DetailReporter, MayUnsupported};
use semdiff_output::summary::SummaryReport;
use std::convert;

impl<W> DetailReporter<AudioDiff, FileLeaf, SummaryReport<W>> for AudioDiffReporter {
    type Error = convert::Infallible;

    fn report_unchanged(
        &self,
        _name: &str,
        _diff: &AudioDiff,
        reporter: &SummaryReport<W>,
    ) -> Result<MayUnsupported<()>, Self::Error> {
        reporter.increment_unchanged();
        Ok(MayUnsupported::Ok(()))
    }

    fn report_modified(
        &self,
        _name: &str,
        _diff: &AudioDiff,
        reporter: &SummaryReport<W>,
    ) -> Result<MayUnsupported<()>, Self::Error> {
        reporter.increment_modified();
        Ok(MayUnsupported::Ok(()))
    }

    fn report_added(
        &self,
        _name: &str,
        data: &FileLeaf,
        reporter: &SummaryReport<W>,
    ) -> Result<MayUnsupported<()>, Self::Error> {
        if audio_extension(&data.kind).is_none()
            || self
                .spectrogram_analyzer
                .decode_audio(&data.kind, &data.content)
                .is_err()
        {
            return Ok(MayUnsupported::Unsupported);
        }
        reporter.increment_added();
        Ok(MayUnsupported::Ok(()))
    }

    fn report_deleted(
        &self,
        _name: &str,
        data: &FileLeaf,
        reporter: &SummaryReport<W>,
    ) -> Result<MayUnsupported<()>, Self::Error> {
        if audio_extension(&data.kind).is_none()
            || self
                .spectrogram_analyzer
                .decode_audio(&data.kind, &data.content)
                .is_err()
        {
            return Ok(MayUnsupported::Unsupported);
        }
        reporter.increment_deleted();
        Ok(MayUnsupported::Ok(()))
    }
}