Skip to main content

gproxy_protocol/transform/
mod.rs

1//! Direct vendor-wire conversions and the identity rules they share.
2//!
3//! A conversion only reads declared source fields and builds declared target
4//! fields. Unknown `rest` members are neither conversion input nor output.
5//! Conversion state and diagnostics are separate from vendor wire payloads.
6
7pub mod compact;
8pub mod count_tokens;
9pub mod embeddings;
10mod error;
11pub mod files;
12pub mod generate;
13pub mod guardian;
14pub mod identity;
15pub mod images;
16mod instructions;
17pub mod memory;
18pub mod models;
19pub mod video;
20pub mod web_search;
21
22pub use error::{Diagnostic, DiagnosticKind, Report, TransformError, TransformErrorKind};
23
24/// An unrepresentable field or item is omitted at its mapping boundary.
25/// Parsing, host and state errors still propagate to the caller.
26pub(crate) fn optional<T>(value: Result<T, TransformError>) -> Result<Option<T>, TransformError> {
27    match value {
28        Ok(value) => Ok(Some(value)),
29        Err(error)
30            if matches!(
31                error.kind(),
32                TransformErrorKind::Unsupported | TransformErrorKind::MissingMetadata
33            ) =>
34        {
35            Ok(None)
36        }
37        Err(error) => Err(error),
38    }
39}
40
41/// A typed target value and out-of-band field diagnostics. This wrapper never
42/// changes or normalizes the payload type into a common content model.
43#[derive(Debug, Clone, PartialEq, Eq)]
44pub struct Converted<T> {
45    pub value: T,
46    pub report: Report,
47}