Module gitlab::api::projects::merge_requests::approval_state[][src]

Expand description

Project merge request approval rules state API endpoints.

These endpoints are used for querying project merge request approval rules state.

Example

use serde::Deserialize;
use gitlab::Gitlab;
use gitlab::api::{self, Query};
use gitlab::api::projects::merge_requests::approval_state::MergeRequestApprovalState;
use gitlab::types::UserBasic;

// This enum describes approval rule types.
#[derive(Debug, Deserialize, Clone, Copy, PartialEq, Eq)]
enum RuleType {
    // The approval rule gets this type when you press "Add approval rule" in settings.
    #[serde(rename = "regular")]
    Regular,
    // This is the default approval rule when you create a new project.
    #[serde(rename = "any_approver")]
    AnyApprover,
    // This is the approval rule found in Gitlab's code, looks like
    // it's a dummy value against null dereferencing. Nevertheless, better have it than not.
    #[serde(rename = "fallback")]
    Fallback,
}

// Approval rule as returned by Gitlab REST API.
// This is only a partial representation of the full approval rule in a response, for the sake of example.
#[derive(Debug, Deserialize)]
struct ApprovalRule {
    name: String,
    rule_type: RuleType,
    eligible_approvers: Vec<UserBasic>,
    users: Vec<UserBasic>,
    approvals_required: u32,
    contains_hidden_groups: bool,
    approved: bool,
}

// Approval state as returned by Gitlab REST API.
// See https://docs.gitlab.com/ee/api/merge_request_approvals.html#get-the-approval-state-of-merge-requests.
#[derive(Debug, Deserialize)]
struct ApprovalState {
    approval_rules_overwritten: bool,
    rules: Vec<ApprovalRule>,
}

// Create the client.
let client = Gitlab::new("gitlab.com", "private-token").unwrap();
// Create the endpoint for the merge request 34 in project 12.
let endpoint = MergeRequestApprovalState::builder()
    .project(12)
    .merge_request(34)
    .build()
    .unwrap();
// Get the approval rules state for the merge request.
let approvals: ApprovalState = endpoint.query(&client).unwrap();

Structs

Query for approval state of a merge request.