Split print code into separate functions

This commit is contained in:
Edward Shen 2023-07-28 00:25:04 -07:00
parent 537225dff2
commit 569758bee5
Signed by: edward
GPG key ID: 0A400FFE10097C30

View file

@ -343,18 +343,6 @@ async fn handle_list(conf: Config, args: List) -> Result<()> {
result: Vec<DnsResponse>, result: Vec<DnsResponse>,
} }
#[derive(Serialize, Deserialize, Debug, Tabled)]
#[tabled(rename_all = "PascalCase")]
struct DnsResponse {
name: String,
#[tabled(rename = "Type")]
r#type: RecordType,
#[tabled(rename = "IP Address")]
content: IpAddr,
proxied: bool,
id: String,
}
let mut entries = vec![]; let mut entries = vec![];
for page_no in 1.. { for page_no in 1.. {
// This technically requests one more than optimal, but tbh it // This technically requests one more than optimal, but tbh it
@ -394,8 +382,31 @@ async fn handle_list(conf: Config, args: List) -> Result<()> {
.into_iter() .into_iter()
.map(|(human, zone)| (zone.id, human)) .map(|(human, zone)| (zone.id, human))
.collect(); .collect();
match args.output { match args.output {
OutputFormat::Table => { OutputFormat::Table => print_table(&human_readable_mapping, output),
OutputFormat::Json => print_json(&human_readable_mapping, output),
}
Ok(())
}
#[derive(Serialize, Deserialize, Debug, Tabled)]
#[tabled(rename_all = "PascalCase")]
struct DnsResponse {
name: String,
#[tabled(rename = "Type")]
r#type: RecordType,
#[tabled(rename = "IP Address")]
content: IpAddr,
proxied: bool,
id: String,
}
fn print_table(
human_readable_mapping: &HashMap<String, String>,
output: BTreeMap<String, Vec<DnsResponse>>,
) {
for (zone_id, data) in output { for (zone_id, data) in output {
println!( println!(
"{} ({zone_id})\n{}", "{} ({zone_id})\n{}",
@ -404,7 +415,11 @@ async fn handle_list(conf: Config, args: List) -> Result<()> {
); );
} }
} }
OutputFormat::Json => {
fn print_json(
human_readable_mapping: &HashMap<String, String>,
output: BTreeMap<String, Vec<DnsResponse>>,
) {
let map: serde_json::Map<String, serde_json::Value> = output let map: serde_json::Map<String, serde_json::Value> = output
.into_iter() .into_iter()
.map(|(zone_id, data)| { .map(|(zone_id, data)| {
@ -422,10 +437,6 @@ async fn handle_list(conf: Config, args: List) -> Result<()> {
serde_json::to_string(&map).expect("serialization to work") serde_json::to_string(&map).expect("serialization to work")
); );
} }
}
Ok(())
}
async fn get_ipv4(url: Url) -> Result<Ipv4Addr> { async fn get_ipv4(url: Url) -> Result<Ipv4Addr> {
reqwest::get(url) reqwest::get(url)