use Object::Pad;
# ABSTRACT: The abstract interface for OpenTelemetry processors

package OpenTelemetry::Processor;

our $VERSION = '0.029';

# NOTE: Moving this here creates a nice symmetry where we have
# OpenTelemetry::{Propagator,Processor,Exporter} at the top-level
# and allow for specific implementations to live under them.
# We should decide where we expect implementations that are
# specific to Traces / Logs / Metrics should live, though.
# For now, this ends up giving us
# * OpenTelemetry::Trace::Span::Processor
# * OpenTelemetry::Logs::LogRecord::Processor
# * OpenTelemetry::Metrics::Instrument::Processor (hypothetical)
# and the SDK implementations with `::SDK` in there somewhere.
role OpenTelemetry::Processor {
    method process;
    method shutdown;
    method force_flush;
}