arraylake 0.3.0

A client for Earthmover's ArrayLake platform
Documentation
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 {
    /// Paths to include. Empty means include everything (before exclusions)
    pub include_paths: Vec<String>,
    /// Paths to exclude. Exclusion always wins over inclusion
    pub exclude_paths: Vec<String>,
}

#[derive(Debug, Clone, Deserialize)]
pub struct DatasetFilter {
    /// Node-level (groups and arrays) include/exclude filter. None means no filtering.
    pub nodes: Option<NodeFilter>,
}

#[derive(Debug, Clone, Deserialize)]
pub struct RepoSubscription {
    /// Subscription id
    pub id: SubscriptionId,
    /// parent/source repo id
    pub parent_repo: RepoId,
    /// parent repo owner organization
    pub parent_org: String,
    /// The ID of the subscriber repository, None means unclaimed subscription
    pub subscriber: Option<RepoId>,
    /// The ID of the associated marketplace listing.
    pub marketplace_listing: ListingId,
    // TODO: uncomment once service returs timezone
    /// The timestamp when the subscription was created
    // pub subscribed_at: DateTime<Utc>,
    /// The status of the subscription
    pub status: SubscriptionStatus,
    /// The type/tier of subscription
    pub subscription_type: SubscriptionType,
    /// Provider-defined filter copied from listing at subscription time. None means no filtering (everything available)
    pub source_filter: Option<DatasetFilter>,
    /// Subscriber-defined filter applied to the subscription. None means no additional filtering.
    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,
}