use antecedent_core::{Diagnostic, DiagnosticKind, DiagnosticSeverity};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum MaterializationReason {
ExplicitCopy,
LayoutIncompatible,
ForeignBufferIncompatible,
}
#[must_use]
pub fn materialization_diagnostic(reason: MaterializationReason, bytes: u64) -> Diagnostic {
let code = match reason {
MaterializationReason::ExplicitCopy => "exec.materialize.explicit_copy",
MaterializationReason::LayoutIncompatible => "exec.materialize.layout",
MaterializationReason::ForeignBufferIncompatible => "exec.materialize.foreign",
};
let mut d = Diagnostic::new(
code,
DiagnosticKind::Execution,
DiagnosticSeverity::Info,
format!("materialized {bytes} bytes ({reason:?})"),
);
d.fields = std::sync::Arc::from([(
std::sync::Arc::<str>::from("bytes"),
std::sync::Arc::<str>::from(bytes.to_string()),
)]);
d
}