use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum TransportTag {
Tcp,
WebSocket,
Quic,
Uds,
WebTransport,
Stdio,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct TransportPreference(pub Vec<TransportTag>);
impl TransportPreference {
pub fn any() -> Self {
Self(Vec::new())
}
pub fn one(tag: TransportTag) -> Self {
Self(vec![tag])
}
pub fn iter(&self) -> std::slice::Iter<'_, TransportTag> {
self.0.iter()
}
pub fn is_any(&self) -> bool {
self.0.is_empty()
}
}
impl From<Vec<TransportTag>> for TransportPreference {
fn from(v: Vec<TransportTag>) -> Self {
Self(v)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum FormatPreference {
Arrow,
Tlv,
Csv,
}
impl Default for FormatPreference {
fn default() -> Self {
Self::Arrow
}
}