va_ai_api_bridge/
adapter.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use crate::{DecodeState, Extensions, Result, UniversalEvent, UniversalItem, WireProtocol};
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct BridgeContext {
9 pub profile_id: String,
10 #[serde(default, skip_serializing_if = "Option::is_none")]
11 pub launch_id: Option<String>,
12 pub source_protocol: WireProtocol,
13 pub target_protocol: WireProtocol,
14 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub provider_settings: Option<Value>,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
17 pub history: Option<BridgeHistory>,
18 #[serde(default, skip_serializing_if = "Extensions::is_empty")]
19 pub extensions: Extensions,
20}
21
22#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct BridgeHistory {
25 #[serde(default, skip_serializing_if = "Vec::is_empty")]
26 pub items: Vec<UniversalItem>,
27 #[serde(default, skip_serializing_if = "Extensions::is_empty")]
28 pub extensions: Extensions,
29}
30
31#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct AdapterStreamState {
34 #[serde(default, skip_serializing_if = "Extensions::is_empty")]
35 pub extensions: Extensions,
36 #[serde(default)]
37 pub translator_state: DecodeState,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41#[serde(rename_all = "camelCase")]
42pub enum AdapterStreamStep {
43 UseTargetTranslator,
44 Events(Vec<UniversalEvent>),
45}
46
47pub trait ProviderAdapter {
48 fn prepare_request(&mut self, _ctx: &BridgeContext, request: Value) -> Result<Value> {
49 Ok(request)
50 }
51
52 fn map_response(
53 &mut self,
54 _ctx: &BridgeContext,
55 _response: &Value,
56 ) -> Result<Option<Vec<UniversalEvent>>> {
57 Ok(None)
58 }
59
60 fn map_stream_chunk(
61 &mut self,
62 _ctx: &BridgeContext,
63 _chunk: &Value,
64 _state: &mut AdapterStreamState,
65 ) -> Result<AdapterStreamStep> {
66 Ok(AdapterStreamStep::UseTargetTranslator)
67 }
68}