guac 0.3.1

A library that provides toolkit for working with [Guac](https://guac.sh) from Rust.
Documentation
use crate::client::intrinsic::vuln_equal::ingest::{ingest_vuln_equal, IngestVulnEqual};
use crate::client::intrinsic::vuln_equal::query::QueryVulnEqual;
use crate::client::intrinsic::vulnerability::{Vulnerability, VulnerabilityInputSpec, VulnerabilitySpec};
use crate::client::intrinsic::IntrinsicGuacClient;
use crate::client::{Error, Id};
use graphql_client::reqwest::post_graphql;

mod ingest;
mod query;

impl IntrinsicGuacClient {
    pub async fn ingest_vuln_equal(
        &self,
        vulnerability: &VulnerabilityInputSpec,
        other_vulnerability: &VulnerabilityInputSpec,
        vuln_equal: &VulnEqualInputSpec,
    ) -> Result<Id, Error> {
        use self::ingest::ingest_vuln_equal;

        let variables = ingest_vuln_equal::Variables {
            vulnerability: vulnerability.into(),
            other_vulnerability: other_vulnerability.into(),
            vuln_equal: vuln_equal.into(),
        };

        let response_body = post_graphql::<IngestVulnEqual, _>(self.client(), self.url(), variables).await?;

        if let Some(errors) = response_body.errors {
            return Err(Error::GraphQL(errors));
        }

        let data = response_body.data.ok_or(Error::GraphQL(vec![]))?;

        Ok(data.ingest_vuln_equal)
    }

    pub async fn vuln_equal(&self, vuln_equal_spec: &VulnEqualSpec) -> Result<Vec<VulnEqual>, Error> {
        use self::query::query_vuln_equal;

        let variables = query_vuln_equal::Variables {
            vuln_equal_spec: vuln_equal_spec.into(),
        };

        let response_body = post_graphql::<QueryVulnEqual, _>(self.client(), self.url(), variables).await?;

        if let Some(errors) = response_body.errors {
            return Err(Error::GraphQL(errors));
        }

        let data = response_body.data.ok_or(Error::GraphQL(vec![]))?;

        let mut equal = Vec::new();

        for entry in &data.vuln_equal {
            equal.push(entry.into());
        }

        Ok(equal)
    }
}

#[derive(Debug, Clone)]
pub struct VulnEqual {
    pub id: Id,
    pub vulnerabilities: Vec<Vulnerability>,
    pub justification: String,
    pub origin: String,
    pub collector: String,
}

#[derive(Debug, Clone, Default)]
pub struct VulnEqualSpec {
    pub id: Option<Id>,
    pub vulnerabilities: Option<Vec<VulnerabilitySpec>>,
    pub justification: Option<String>,
    pub origin: Option<String>,
    pub collector: Option<String>,
}

#[derive(Debug, Clone)]
pub struct VulnEqualInputSpec {
    pub justification: String,
    pub origin: String,
    pub collector: String,
}