relay-knowledge 1.1.17

Graph-database-based knowledge graph project.
Documentation
use crate::domain::{
    BusinessKnowledgeQueryKind, CodeQueryKind, CodeRepositorySelector, FrameworkKind,
    FrameworkNodeKind, FreshnessPolicy, SoftwareExportProfile, SoftwareGlobalKind,
};

use super::{
    CliError, OutputFormat,
    command::{parse_freshness, value_after},
    render_response, serialize_line,
};

mod index;
mod parser;
mod query;
mod report;
mod runner;
pub(crate) mod view;

pub use parser::parse_repo;
pub(super) use report::render_report_response;
pub use runner::run_repo;

/// Parsed `repo` CLI command.
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RepoCommand {
    List,
    Register {
        root_path: String,
        alias: String,
        path_filters: Vec<String>,
        language_filters: Vec<String>,
    },
    Remove {
        alias: String,
    },
    Index {
        alias: String,
        ref_selector: String,
        dry_run: bool,
        reuse_historical: bool,
    },
    IndexReset {
        alias: String,
    },
    IndexWorker {
        task_id: Option<String>,
    },
    ScopePreview {
        alias: String,
        ref_selector: String,
    },
    Update {
        alias: String,
        base_ref: Option<String>,
        head_ref: Option<String>,
    },
    Query {
        alias: String,
        query: String,
        kind: CodeQueryKind,
        limit: usize,
        ref_selector: String,
        path_filters: Vec<String>,
        language_filters: Vec<String>,
        freshness: FreshnessPolicy,
        exclude_generated: bool,
    },
    Graph {
        alias: String,
        focus_path: String,
        depth: u8,
        ref_selector: String,
        path_filters: Vec<String>,
        node_limit: usize,
        edge_limit: usize,
    },
    Context {
        alias: String,
        query: String,
        limit: usize,
        ref_selector: String,
        path_filters: Vec<String>,
        language_filters: Vec<String>,
        freshness: FreshnessPolicy,
        max_context_bytes: usize,
        include_code: bool,
        exclude_generated: bool,
    },
    FeatureFlags {
        alias: String,
        query: Option<String>,
        limit: usize,
        ref_selector: String,
        path_filters: Vec<String>,
        language_filters: Vec<String>,
        freshness: FreshnessPolicy,
    },
    FrameworkGraph {
        alias: String,
        query: Option<String>,
        frameworks: Vec<FrameworkKind>,
        kinds: Vec<FrameworkNodeKind>,
        limit: usize,
        ref_selector: String,
        path_filters: Vec<String>,
        freshness: FreshnessPolicy,
    },
    Impact {
        alias: String,
        base_ref: String,
        head_ref: String,
        limit: usize,
    },
    Status {
        alias: String,
    },
    Report {
        alias: String,
    },
    Software {
        alias: String,
        ref_selector: String,
        kind: SoftwareGlobalKind,
        freshness: FreshnessPolicy,
        limit: usize,
    },
    SoftwareExport {
        alias: String,
        ref_selector: String,
        profile: SoftwareExportProfile,
        freshness: FreshnessPolicy,
        limit: usize,
    },
    Business {
        alias: String,
        ref_selector: String,
        domain: Option<String>,
        query: Option<String>,
        kind: BusinessKnowledgeQueryKind,
        freshness: FreshnessPolicy,
        limit: usize,
    },
    View(view::RepoViewCommand),
}

pub(crate) fn selector(
    alias: String,
    ref_selector: impl Into<String>,
    path_filters: Vec<String>,
    language_filters: Vec<String>,
    format: OutputFormat,
) -> Result<CodeRepositorySelector, CliError> {
    CodeRepositorySelector::new(alias, ref_selector, path_filters, language_filters)
        .map_err(|error| CliError::invalid_api_argument(error.to_string(), format))
}

#[cfg(test)]
#[path = "test_support.rs"]
mod test_support;