#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
pub enum RutaAPI<'a> {
#[default]
Base,
OAuth2,
CrearEnlaceDePago,
CrearCargoRecurrente,
ListarCargosRecurrentes,
DetallarCargoRecurrente(&'a str),
SuscripcionesCargoRecurrente(&'a str),
AgregarImagenCargoRecurrente(&'a str),
}
impl<'a> AsRef<str> for RutaAPI<'a> {
fn as_ref(&self) -> &'a str {
match self {
Self::Base => "https://api.wompi.sv",
Self::OAuth2 => "https://id.wompi.sv/connect/token",
Self::CrearEnlaceDePago => "/EnlacePago",
Self::CrearCargoRecurrente | Self::ListarCargosRecurrentes => "/EnlacePagoRecurrente",
_ => {
unreachable!()
}
}
}
}
impl std::fmt::Display for RutaAPI<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Base => write!(f, "{}", RutaAPI::Base.as_ref()),
Self::OAuth2 => write!(f, "{}", RutaAPI::OAuth2.as_ref()),
Self::CrearEnlaceDePago => write!(
f,
"{}{}",
RutaAPI::Base.as_ref(),
RutaAPI::CrearEnlaceDePago.as_ref()
),
Self::CrearCargoRecurrente => write!(
f,
"{}{}",
RutaAPI::Base.as_ref(),
RutaAPI::CrearCargoRecurrente.as_ref()
),
Self::ListarCargosRecurrentes => {
write!(
f,
"{}{}",
RutaAPI::Base.as_ref(),
RutaAPI::ListarCargosRecurrentes.as_ref()
)
}
Self::DetallarCargoRecurrente(id) => {
write!(
f,
"{}{}/{}",
RutaAPI::Base.as_ref(),
RutaAPI::ListarCargosRecurrentes.as_ref(),
id
)
}
Self::SuscripcionesCargoRecurrente(id) => write!(
f,
"{}{}/{}/suscripciones",
RutaAPI::Base.as_ref(),
RutaAPI::ListarCargosRecurrentes.as_ref(),
id
),
Self::AgregarImagenCargoRecurrente(id) => write!(
f,
"{}{}/{}/imagen",
RutaAPI::Base.as_ref(),
RutaAPI::ListarCargosRecurrentes.as_ref(),
id
),
}
}
}