Skip to content

wunderfrucht/gouqi

Repository files navigation

gouqi

Software License Released API docs Rust codecov

a rust interface for jira

Forked from goji https://github.com/softprops/goji

install

Add the following to your Cargo.toml file

[dependencies]
gouqi = "*"

# Optional: Enable async API
gouqi = { version = "*", features = ["async"] }

usage

Please browse the examples directory in this repo for some example applications.

Basic usage requires a jira host, and a flavor of jira::Credentials for authorization.

Synchronous API

The default API uses synchronous requests:

use gouqi::{Credentials, Jira};
use std::env;
use tracing::error;

fn main() { 
    if let Ok(host) = env::var("JIRA_HOST") {
        let query = env::args().nth(1).unwrap_or("order by created DESC".to_owned());
        let jira = Jira::new(host, Credentials::Anonymous).expect("Error initializing Jira");

        match jira.search().iter(query, &Default::default()) {
            Ok(results) => {
                for issue in results {
                    println!("{:#?}", issue);
                }
            }
            Err(err) => panic!("{:#?}", err),
        }
    } else {
        error!("Missing environment variable JIRA_HOST!");
    }
}

Asynchronous API

With the async feature enabled, you can use the asynchronous API:

use futures::stream::StreamExt;
use gouqi::{Credentials, SearchOptions};
use std::env;
use tracing::error;

#[tokio::main]
async fn main() {
    if let Ok(host) = env::var("JIRA_HOST") {
        let query = env::args().nth(1).unwrap_or("order by created DESC".to_owned());
        
        // Create an async Jira client
        let jira = gouqi::r#async::Jira::new(host, Credentials::Anonymous)
            .expect("Error initializing Jira");

        // Use the stream method to get a futures Stream
        let search_options = SearchOptions::default();
        match jira.search().stream(query, &search_options).await {
            Ok(mut stream) => {
                // Consume the stream asynchronously
                while let Some(issue) = stream.next().await {
                    println!("{:#?}", issue);
                }
            }
            Err(err) => error!("{:#?}", err),
        }
    } else {
        error!("Missing environment variable JIRA_HOST!");
    }
}

You can also convert between sync and async clients:

// Convert from sync to async
let sync_jira = Jira::new(host, credentials)?;
let async_jira = sync_jira.into_async();

// Convert from async to sync
let async_jira = gouqi::r#async::Jira::new(host, credentials)?;
let sync_jira = gouqi::sync::Jira::from(&async_jira);

Commiting a PR

Please make sure to run cargo fmt, cargo test and cargo clippy before committing. New code should contains tests. Commits to follow the Conventional Commits specification.

Changelog is generated using git cliff

cargo install git-cliff
git cliff -o --use-branch-tags

what's with the name

Jira's name is a shortened form of gojira, another name for godzilla. Goji is a play on that.

Goji (Chinese: 枸杞; pinyin: gǒuqǐ)

Doug Tangren (softprops) 2016-2018

About

a rust interface for jira

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 6

Languages