Skip to main content

cc_lb_plugin_wire/v2/
mod.rs

1//! Filter wire schema version 2.
2//!
3//! V2 extends only the filter request with the requested service tier. Shape,
4//! observe, and response-transform hooks remain on V1.
5
6use alloc::boxed::Box;
7
8use rkyv::{Archive, Deserialize, Serialize, with::InlineAsBox};
9
10pub use crate::v1::{
11    ArchivedCachePricingSummary, ArchivedClaim, ArchivedFilterResponse, ArchivedHeader,
12    ArchivedPerCandidateReason, ArchivedPrincipal, ArchivedQueryRef, ArchivedUpstreamCandidate,
13    CachePricingSummary, CachePricingSummaryRef, Claim, ClaimRef, FilterResponse, Header,
14    HeaderRef, PerCandidateReason, Principal, PrincipalRef, QueryRef, UpstreamCandidate,
15    UpstreamCandidateRef,
16};
17
18/// Filter V2 input received by an owned-mode guest handler.
19#[derive(Archive, Serialize, Deserialize, Clone, Debug)]
20#[rkyv(derive(Debug))]
21pub struct FilterRequest {
22    pub request_id: Box<str>,
23    pub thread_id: Option<Box<str>>,
24    pub service_tier: Option<Box<str>>,
25    pub canonical_model_id: Box<str>,
26    pub cache_pricing: CachePricingSummary,
27    pub method: Box<str>,
28    pub path: Box<str>,
29    pub query: Option<Box<str>>,
30    pub headers: Box<[Header]>,
31    pub body: Box<[u8]>,
32    pub principal: Principal,
33    pub candidates: Box<[UpstreamCandidate]>,
34}
35
36/// Borrowed host-side encoding form for [`FilterRequest`].
37#[derive(Archive, Serialize)]
38pub struct FilterRequestRef<'a> {
39    #[rkyv(with = InlineAsBox)]
40    pub request_id: &'a str,
41    pub thread_id: Option<QueryRef<'a>>,
42    pub service_tier: Option<QueryRef<'a>>,
43    #[rkyv(with = InlineAsBox)]
44    pub canonical_model_id: &'a str,
45    pub cache_pricing: CachePricingSummaryRef<'a>,
46    #[rkyv(with = InlineAsBox)]
47    pub method: &'a str,
48    #[rkyv(with = InlineAsBox)]
49    pub path: &'a str,
50    pub query: Option<QueryRef<'a>>,
51    #[rkyv(with = InlineAsBox)]
52    pub headers: &'a [HeaderRef<'a>],
53    #[rkyv(with = InlineAsBox)]
54    pub body: &'a [u8],
55    pub principal: PrincipalRef<'a>,
56    #[rkyv(with = InlineAsBox)]
57    pub candidates: &'a [UpstreamCandidateRef<'a>],
58}
59
60include!(concat!(env!("OUT_DIR"), "/wire_schema_v2_impls.rs"));