omnitrack 0.3.0

Universal issue-tracker provider contracts and clients (Linear, Jira, ...) for Rust, in one crate.
Documentation
use crate::{Capability, Provider, ProviderDescriptor, ProviderDescriptorBuilder};

mod client;
mod comments;
mod entities;
mod issues;
mod model;
mod resources;
mod transitions;
mod transport;
mod util;
mod viewer;

pub use client::{JiraClient, JiraClientBuilder};
pub use model::category_from_status_category;
pub use resources::{JiraSite, accessible_resources};

pub const PROVIDER_ID: &str = "jira";
pub const DISPLAY_NAME: &str = "Jira";

#[derive(Clone, Copy, Debug, Default)]
pub struct JiraProvider;

impl JiraProvider {
    pub fn auth(
        self,
        base_url: impl Into<String>,
        email: impl Into<String>,
        token: impl Into<String>,
    ) -> JiraClientBuilder {
        JiraClientBuilder::basic(base_url, email, token)
    }

    pub fn bearer(
        self,
        cloud_id: impl Into<String>,
        access_token: impl Into<String>,
    ) -> JiraClientBuilder {
        JiraClientBuilder::bearer(cloud_id, access_token)
    }
}

impl Provider for JiraProvider {
    fn descriptor(&self) -> ProviderDescriptor {
        ProviderDescriptorBuilder::make(PROVIDER_ID, DISPLAY_NAME)
            .capability(Capability::Issues)
            .capability(Capability::Projects)
            .capability(Capability::Users)
            .capability(Capability::Labels)
            .capability(Capability::Viewer)
            .capability(Capability::Comments)
            .build()
    }
}

pub fn jira() -> JiraProvider {
    JiraProvider
}