trident-fuzz-metrics 0.12.0

Trident is Rust based fuzzing framework for Solana programs written in Anchor.
Documentation
use std::collections::BTreeMap;

#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, Default)]
pub(crate) struct TransactionCustomErrorMetrics {
    errors: BTreeMap<u32, TransactionCustomErrorMetricsMetadata>,
}

#[derive(Debug, serde::Serialize, serde::Deserialize, Clone, Default)]
pub(crate) struct TransactionCustomErrorMetricsMetadata {
    occurrences: u64,
    logs: Option<Vec<String>>,
}

impl TransactionCustomErrorMetrics {
    pub(crate) fn add_error(&mut self, error: &u32, logs: Option<Vec<String>>) {
        self.errors
            .entry(*error)
            .and_modify(|metadata| metadata.occurrences += 1)
            .or_insert(TransactionCustomErrorMetricsMetadata {
                occurrences: 1,
                logs,
            });
    }

    pub(crate) fn concat(&mut self, other: &TransactionCustomErrorMetrics) {
        for (other_error, other_metadata) in other.errors.iter() {
            self.errors
                .entry(*other_error)
                .and_modify(|metadata| metadata.occurrences += other_metadata.occurrences)
                .or_insert(other_metadata.clone());
        }
    }

    pub(crate) fn to_dashboard_format(&self) -> serde_json::Value {
        serde_json::to_value(&self.errors).unwrap_or_default()
    }
}