omnitrack 0.3.0

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

struct Dummy(&'static str);

impl Provider for Dummy {
    fn descriptor(&self) -> ProviderDescriptor {
        ProviderDescriptorBuilder::make(self.0, self.0)
            .capability(Capability::Issues)
            .build()
    }
}

#[test]
fn registry_collects_registered_providers() -> omnitrack::IssueResult<()> {
    let registry = provider()
        .register(Dummy("a"))?
        .register(Dummy("b"))?
        .build();
    assert_eq!(registry.descriptors().len(), 2);
    Ok(())
}

#[test]
fn registry_rejects_duplicate_ids() -> omnitrack::IssueResult<()> {
    let result = provider().register(Dummy("a"))?.register(Dummy("a"));
    assert!(result.is_err());
    Ok(())
}

#[test]
fn descriptor_reports_capabilities() {
    let descriptor = ProviderDescriptorBuilder::make("linear", "Linear")
        .capability(Capability::Issues)
        .build();
    assert!(descriptor.supports(Capability::Issues));
    assert!(!descriptor.supports(Capability::Projects));
}