Split print code into separate functions
This commit is contained in:
parent
537225dff2
commit
569758bee5
1 changed files with 50 additions and 39 deletions
49
src/main.rs
49
src/main.rs
|
@ -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{}",
|
||||||
|
@ -403,8 +414,12 @@ async fn handle_list(conf: Config, args: List) -> Result<()> {
|
||||||
Table::new(data).with(Modify::new(Column::from(0)).with(Alignment::right()))
|
Table::new(data).with(Modify::new(Column::from(0)).with(Alignment::right()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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)| {
|
||||||
|
@ -421,10 +436,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> {
|
||||||
|
|
Loading…
Reference in a new issue