macro_rules! adapter_kind_str_maps {
(
$(
$variant:ident => $name:literal , $lower:literal , $adapter:ty
);* $(;)?
) => {
impl AdapterKind {
pub fn as_str(&self) -> &'static str {
match self {
$( AdapterKind::$variant => $name, )*
#[cfg(feature = "bedrock-sigv4")]
AdapterKind::BedrockSigv4 => "BedrockSigv4",
AdapterKind::Custom(_) => "Custom",
}
}
pub fn as_lower_str(&self) -> &'static str {
match self {
$( AdapterKind::$variant => $lower, )*
#[cfg(feature = "bedrock-sigv4")]
AdapterKind::BedrockSigv4 => "bedrock_sigv4",
AdapterKind::Custom(_) => "custom",
}
}
pub fn from_lower_str(name: &str) -> Option<Self> {
match name {
$( $lower => Some(AdapterKind::$variant), )*
#[cfg(feature = "bedrock-sigv4")]
"bedrock_sigv4" => Some(AdapterKind::BedrockSigv4),
name => {
if name.starts_with("genai_") {
name.strip_prefix("genai_")
.and_then(|n| n.parse::<u8>().ok())
.map(AdapterKind::Custom)
} else {
None
}
}
}
}
pub fn default_key_env_name(&self) -> Option<&'static str> {
match self {
$( AdapterKind::$variant => <$adapter>::DEFAULT_API_KEY_ENV_NAME, )*
#[cfg(feature = "bedrock-sigv4")]
AdapterKind::BedrockSigv4 => adapters::bedrock::BedrockSigv4Adapter::DEFAULT_API_KEY_ENV_NAME,
AdapterKind::Custom(_n) => None,
}
}
}
};
}
pub(crate) use adapter_kind_str_maps;