use serde::Deserialize;
use crate::ids::{ListingId, RepoId, SubscriptionId};
#[derive(Debug, Clone, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
pub enum SubscriptionStatus {
#[serde(rename = "active")]
Active,
#[serde(rename = "orphaned")]
Orphaned,
#[serde(rename = "pending_claim")]
PendingClaim,
}
#[derive(Debug, Clone, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
pub enum SubscriptionType {
#[serde(rename = "direct")]
Direct,
#[serde(rename = "filtered")]
Filtered,
#[serde(rename = "private")]
Private,
}
#[derive(Debug, Clone, Deserialize)]
pub struct NodeFilter {
pub include_paths: Vec<String>,
pub exclude_paths: Vec<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DatasetFilter {
pub nodes: Option<NodeFilter>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct RepoSubscription {
pub id: SubscriptionId,
pub parent_repo: RepoId,
pub parent_org: String,
pub subscriber: Option<RepoId>,
pub marketplace_listing: ListingId,
pub status: SubscriptionStatus,
pub subscription_type: SubscriptionType,
pub source_filter: Option<DatasetFilter>,
pub target_filter: Option<DatasetFilter>,
}
#[allow(dead_code)]
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct PaginatedRepoSubscriptions {
pub(crate) items: Vec<RepoSubscription>,
pub(crate) total: u64,
pub(crate) page: u64,
pub(crate) size: u64,
pub(crate) pages: u64,
}