use crate::constant::REGIONS;
use anyhow::Result;
use inquire::{Select, Text};
use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Config {
pub start_url: String,
pub region: String,
}
impl Config {
pub fn new() -> Result<Self> {
let sso_start_url: String = Text::new("SSO start-url:").prompt()?;
let regions: Vec<String> = REGIONS.iter().map(|x| x.to_string()).collect();
let sso_region: String = Select::new("SSO region:", regions).prompt()?;
Ok(Self {
start_url: sso_start_url,
region: sso_region,
})
}
}
impl fmt::Display for Config {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"SSO Start URL: {}\nSSO Region: {}",
self.start_url, self.region
)
}
}