From 2d8e3c5cd1cc3fdcec838710af377bfa32718fbd Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Mon, 8 Oct 2018 19:57:23 +0200 Subject: Add abook api to main example. --- examples/abook.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ examples/zot.rs | 11 +++++++++++ 2 files changed, 63 insertions(+) create mode 100644 examples/abook.rs diff --git a/examples/abook.rs b/examples/abook.rs new file mode 100644 index 0000000..bceaacc --- /dev/null +++ b/examples/abook.rs @@ -0,0 +1,52 @@ +/* Example Zot API command line utility, part of zotapi. + * Copyright (C) 2018 Harald Eilertsen + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +extern crate zotapi; +extern crate serde_json; + +pub fn fetch(client: &zotapi::Client, raw: bool) { + match client.abook().fetch() { + Ok(payload) => { + if raw { + println!("{}", &payload); + } + else { + process(&payload); + } + }, + Err(e) => { + println!("{:?}", e); + } + } +} + +fn process(payload: &str) { + let data: serde_json::Value = serde_json::from_str(&payload).unwrap(); + match data { + serde_json::Value::Array(v) => { + for contact in v { + println!("{} ({}, {})", + contact["xchan_name"], + contact["xchan_addr"], + contact["xchan_network"]); + } + }, + _ => { + println!("Unexpected data:\n{}", payload); + } + }; +} diff --git a/examples/zot.rs b/examples/zot.rs index 2c49fe3..5fa4f09 100644 --- a/examples/zot.rs +++ b/examples/zot.rs @@ -25,6 +25,7 @@ use clap::{Arg, SubCommand}; use dotenv::dotenv; use std::env; +mod abook; mod channel_stream; mod network_stream; @@ -47,6 +48,12 @@ fn main() { .arg(Arg::with_name("raw") .long("raw") .help("Display raw json payload"))) + .subcommand( + SubCommand::with_name("abook") + .about("Fetch address book/contact info") + .arg(Arg::with_name("raw") + .long("raw") + .help("Display raw json payload"))) .get_matches(); let client = zotapi::client(&site, &user, &password); @@ -60,6 +67,10 @@ fn main() { let raw = m.is_present("raw"); network_stream::fetch(&client, raw); }, + ("abook", Some(m)) => { + let raw = m.is_present("raw"); + abook::fetch(&client, raw); + }, _ => { println!("{}", matches.usage()); }, -- cgit v1.2.3