railwayapp 4.57.5

Interact with Railway via CLI
use crate::{
    commands::queries::{RailwayProject, project::ProjectProjectEnvironmentsEdgesNode},
    errors::RailwayError,
};
use anyhow::{Result, bail};

pub fn get_matched_environment(
    project: &RailwayProject,
    environment: String,
) -> Result<ProjectProjectEnvironmentsEdgesNode> {
    let environment = project
        .environments
        .edges
        .iter()
        .find(|env| env.node.name == environment || env.node.id == environment)
        .ok_or_else(|| RailwayError::EnvironmentNotFound(environment))?;

    ensure_environment_accessible(&environment.node)?;

    Ok(environment.node.clone())
}

pub fn ensure_environment_accessible(
    environment: &ProjectProjectEnvironmentsEdgesNode,
) -> Result<()> {
    if !environment.can_access {
        bail!(RailwayError::EnvironmentRestricted(
            environment.name.clone()
        ));
    }

    Ok(())
}