use super::admission::IngressAttemptSeq;
use super::IngressKey;
use crate::EventType;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EventSubmission {
pub event_type: EventType,
pub data: serde_json::Value,
#[serde(default)]
pub metadata: Option<serde_json::Value>,
#[serde(skip)]
pub ingress_handoff: Option<SubmissionIngressContext>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchSubmission {
pub events: Vec<EventSubmission>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubmissionResponse {
pub accepted: usize,
pub rejected: usize,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub errors: Vec<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SubmissionPayloadKind {
External,
TypedOutput,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SubmissionIngressContext {
pub accepted_at_ns: u64,
pub ingress_key: IngressKey,
pub batch_index: Option<usize>,
pub attempt_seq: IngressAttemptSeq,
pub payload_kind: SubmissionPayloadKind,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct IngressContext {
pub accepted_at_ns: u64,
pub ingress_key: IngressKey,
#[serde(skip_serializing_if = "Option::is_none")]
pub batch_index: Option<usize>,
pub attempt_seq: IngressAttemptSeq,
}