Skip to content

Refactor: Extract shared column validation logic into helper function #694

@codekiln

Description

@codekiln

Summary

The column validation logic for --columns and --show-columns flags is duplicated across three commands:

  • assistant list (cli/src/commands/assistant.rs:219-242)
  • deployment list (cli/src/commands/deployment.rs:224-245)
  • model-config list (cli/src/commands/model_config.rs:172-193)

Proposed Solution

Extract this pattern into a shared helper function in cli/src/output.rs:

pub fn validate_and_show_columns(
    columns: &Option<Vec<String>>,
    show_columns: bool,
    available_columns: &[&str],
    command_name: &str,
) -> Result<()> {
    if show_columns {
        println!("Available columns for {} list:", command_name);
        for col in available_columns {
            println!("  {}", col);
        }
        println!("\nUsage: langstar {} list -f text --columns <col1,col2>", command_name);
        return Ok(());
    }

    if let Some(cols) = columns {
        for col in cols {
            if !available_columns.contains(&col.as_str()) {
                return Err(CliError::Config(format!(
                    "Invalid column '{}'. Available columns: {}",
                    col,
                    available_columns.join(", ")
                )));
            }
        }
    }
    Ok(())
}

Related

Benefits

  • Reduces code duplication
  • Improves maintainability
  • Makes it easier to add consistent behavior across commands

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions