use super::CatalogEndpoint;
use openlark_core::api::{ApiRequest, HttpMethod};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(test, derive(strum_macros::EnumIter))]
pub enum MinutesApiV1 {
Get(String),
Subscription,
Unsubscription,
MediaGet(String),
TranscriptGet(String),
StatisticsGet(String),
}
impl MinutesApiV1 {
pub fn to_url(&self) -> String {
match self {
MinutesApiV1::Get(minute_token) => {
format!("/open-apis/minutes/v1/minutes/{minute_token}")
}
MinutesApiV1::Subscription => "/open-apis/minutes/v1/minutes/subscription".to_string(),
MinutesApiV1::Unsubscription => {
"/open-apis/minutes/v1/minutes/unsubscription".to_string()
}
MinutesApiV1::MediaGet(minute_token) => {
format!("/open-apis/minutes/v1/minutes/{minute_token}/media")
}
MinutesApiV1::TranscriptGet(minute_token) => {
format!("/open-apis/minutes/v1/minutes/{minute_token}/transcript")
}
MinutesApiV1::StatisticsGet(minute_token) => {
format!("/open-apis/minutes/v1/minutes/{minute_token}/statistics")
}
}
}
pub fn to_request<R>(&self) -> ApiRequest<R> {
<Self as CatalogEndpoint>::to_request(self)
}
}
impl CatalogEndpoint for MinutesApiV1 {
fn to_url(&self) -> String {
MinutesApiV1::to_url(self)
}
fn method(&self) -> HttpMethod {
match self {
Self::Get(_) | Self::MediaGet(_) | Self::TranscriptGet(_) | Self::StatisticsGet(_) => {
HttpMethod::Get
}
Self::Subscription | Self::Unsubscription => HttpMethod::Post,
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(test, derive(strum_macros::EnumIter))]
#[cfg(feature = "minutes")]
pub(crate) enum MinutesExtraApiV1 {
Search,
Artifacts(String),
}
#[cfg(feature = "minutes")]
impl MinutesExtraApiV1 {
pub(crate) fn to_request<R>(&self) -> ApiRequest<R> {
<Self as CatalogEndpoint>::to_request(self)
}
}
#[cfg(feature = "minutes")]
impl CatalogEndpoint for MinutesExtraApiV1 {
fn to_url(&self) -> String {
match self {
Self::Search => "/open-apis/minutes/v1/minutes/search".to_string(),
Self::Artifacts(minute_token) => {
format!("/open-apis/minutes/v1/minutes/{minute_token}/artifacts")
}
}
}
fn method(&self) -> HttpMethod {
match self {
Self::Search => HttpMethod::Post,
Self::Artifacts(_) => HttpMethod::Get,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::common::api_endpoints::test_support::catalog_semantics_snapshot;
#[test]
fn minutes_catalog_semantics_snapshots() {
insta::assert_snapshot!(
"minutes_catalog_semantics",
catalog_semantics_snapshot::<MinutesApiV1>()
);
#[cfg(feature = "minutes")]
insta::assert_snapshot!(
"minutes_extra_catalog_semantics",
catalog_semantics_snapshot::<MinutesExtraApiV1>()
);
}
}