va_ai_api_bridge/
protocol.rs1use std::fmt;
2use std::str::FromStr;
3
4use serde::{Deserialize, Serialize};
5
6use crate::{ApiBridgeError, Result};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9pub enum WireProtocol {
10 #[serde(rename = "openai-responses")]
11 OpenAiResponses,
12 #[serde(rename = "openai-chat")]
13 OpenAiChat,
14 #[serde(rename = "anthropic-messages")]
15 AnthropicMessages,
16 #[serde(rename = "gemini-generate-content")]
17 GeminiGenerateContent,
18}
19
20impl WireProtocol {
21 pub fn as_str(self) -> &'static str {
22 match self {
23 Self::OpenAiResponses => "openai-responses",
24 Self::OpenAiChat => "openai-chat",
25 Self::AnthropicMessages => "anthropic-messages",
26 Self::GeminiGenerateContent => "gemini-generate-content",
27 }
28 }
29}
30
31impl fmt::Display for WireProtocol {
32 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
33 f.write_str(self.as_str())
34 }
35}
36
37impl FromStr for WireProtocol {
38 type Err = ApiBridgeError;
39
40 fn from_str(value: &str) -> Result<Self> {
41 match value {
42 "openai-responses" => Ok(Self::OpenAiResponses),
43 "openai-chat" => Ok(Self::OpenAiChat),
44 "anthropic-messages" => Ok(Self::AnthropicMessages),
45 "gemini-generate-content" => Ok(Self::GeminiGenerateContent),
46 other => Err(ApiBridgeError::unsupported_protocol(other)),
47 }
48 }
49}