#![warn(missing_docs)]
#[cfg(feature = "axum")]
mod axum;
#[cfg(feature = "sender")]
mod i18n;
#[cfg(feature = "sender")]
mod request;
mod response;
#[cfg(feature = "subscriber")]
pub mod aggregator;
pub mod app;
pub mod config;
pub mod domain;
pub mod errors;
#[cfg(feature = "sender")]
pub mod sender;
#[cfg(feature = "subscriber")]
pub mod subscriber;
pub mod macros {
pub use unis_macros::*;
}
pub use crate::response::UniResponse;
#[doc(hidden)]
#[cfg(any(test, feature = "test-utils"))]
#[cfg(feature = "axum")]
pub use axum::apply;
#[cfg(feature = "axum")]
pub use axum::{AxumCommand, into, key_middleware};
#[doc(hidden)]
#[cfg(any(test, feature = "test-utils"))]
#[cfg(feature = "sender")]
pub use i18n::validate;
#[cfg(feature = "sender")]
pub use request::{JsonFormat, RkyvFormat, UniKey};
use crate::domain::CommandEnum;
use opentelemetry::{Context, SpanId, TraceFlags, TraceId, trace::SpanContext};
use rkyv::{
Archive, Deserialize,
de::Pool,
rancor::{Error, Strategy},
};
use tracing::Span;
use tracing_opentelemetry::OpenTelemetrySpanExt;
use uuid::Uuid;
pub struct Com<C>
where
C: CommandEnum,
<C as Archive>::Archived: Deserialize<C, Strategy<Pool, Error>>,
{
pub agg_id: Uuid,
pub com_id: [u8; 16],
pub span_id: [u8; 8],
pub cx: Context,
pub com: C,
}
pub fn link_context(span: Span, com_id: [u8; 16], span_id: [u8; 8]) -> Span {
let span_context = SpanContext::new(
TraceId::from_bytes(com_id),
SpanId::from_bytes(span_id),
TraceFlags::default(),
false,
Default::default(),
);
span.add_link(span_context);
span
}