use crate::ProviderKind;
use crate::provider::{self, Provider};
use super::RequestProtocol;
use super::ids::{ProviderId, WireModelId};
#[derive(Clone, Copy)]
pub struct ProviderDescriptor {
pub kind: ProviderKind,
pub inner: &'static dyn Provider,
}
impl ProviderDescriptor {
#[must_use]
pub fn for_kind(kind: ProviderKind) -> Self {
Self {
kind,
inner: provider::provider_for_kind(kind),
}
}
#[must_use]
pub fn id(&self) -> ProviderId {
ProviderId::from(self.inner.id())
}
#[must_use]
pub fn default_base_url(&self) -> &'static str {
self.inner.default_base_url()
}
#[must_use]
pub fn default_wire_model(&self) -> WireModelId {
WireModelId::from(self.inner.default_model())
}
#[must_use]
pub fn env_vars(&self) -> &'static [&'static str] {
self.inner.env_vars()
}
#[must_use]
pub fn protocol(&self) -> RequestProtocol {
self.inner.wire()
}
}
impl std::fmt::Debug for ProviderDescriptor {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ProviderDescriptor")
.field("kind", &self.kind)
.field("id", &self.inner.id())
.field("protocol", &self.inner.wire())
.finish()
}
}
#[derive(Debug, Clone)]
pub struct EndpointDescriptor {
pub endpoint_key: String,
pub protocol: RequestProtocol,
pub default_base_url: String,
pub streaming: bool,
}