zixcel-github 0.1.1

Policy-neutral GitHub API wrapper boundary for Zixcel
Documentation
use serde::{Deserialize, Serialize};

use crate::{ConnectorError, GitHubAction, PermissionRequirement};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct GitHubApiRequest {
    pub schema: String,
    pub request_id: String,
    pub operation_id: String,
    pub connection_ref: String,
    pub owner: String,
    pub repository: String,
    pub action: GitHubAction,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct RequestValidationReport {
    pub schema: &'static str,
    pub request_id: String,
    pub operation_id: String,
    pub valid: bool,
    pub required_permission: PermissionRequirement,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GitHubBackendReceipt {
    pub provider_request_id: String,
    pub remote_reference: String,
    pub remote_digest_sha256: Option<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct GitHubApiReceipt {
    pub schema: &'static str,
    pub request_id: String,
    pub operation_id: String,
    pub owner: String,
    pub repository: String,
    pub permission: PermissionRequirement,
    pub provider_request_id: String,
    pub remote_reference: String,
    pub remote_digest_sha256: Option<String>,
}

pub trait GitHubBackend {
    fn perform(
        &mut self,
        request: &GitHubApiRequest,
    ) -> Result<GitHubBackendReceipt, ConnectorError>;
}