| 815 | } |
| 816 | |
| 817 | fn gateway_select_with<F>( |
| 818 | name: Option<&str>, |
| 819 | gateway_flag: &Option<String>, |
| 820 | interactive: bool, |
| 821 | choose_gateway: F, |
| 822 | ) -> Result<()> |
| 823 | where |
| 824 | F: FnOnce(&[GatewayMetadata], usize) -> Result<Option<String>>, |
| 825 | { |
| 826 | if let Some(name) = name { |
| 827 | return gateway_use(name); |
| 828 | } |
| 829 | |
| 830 | let gateways = list_gateways()?; |
| 831 | if gateways.is_empty() || !interactive { |
| 832 | gateway_list(gateway_flag, "table")?; |
| 833 | if !gateways.is_empty() { |
| 834 | eprintln!(); |
| 835 | eprintln!( |
| 836 | "Select a gateway with: {}", |
| 837 | "openshell gateway select <name>".dimmed() |
| 838 | ); |
| 839 | } |
| 840 | return Ok(()); |
| 841 | } |
| 842 | |
| 843 | let active = gateway_flag.clone().or_else(load_active_gateway); |
| 844 | let default = active |
| 845 | .as_deref() |
| 846 | .and_then(|name| gateways.iter().position(|gateway| gateway.name == name)) |
| 847 | .unwrap_or(0); |
| 848 | |
| 849 | if let Some(name) = choose_gateway(&gateways, default)? { |
| 850 | gateway_use(&name)?; |
| 851 | } else { |
| 852 | eprintln!("{} Gateway selection cancelled", "!".yellow()); |
| 853 | } |
| 854 | |
| 855 | Ok(()) |
| 856 | } |
| 857 | |
| 858 | /// Register an existing gateway. |
| 859 | /// |