/* 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 dotenv; #[macro_use] extern crate clap; extern crate serde_json; use clap::{Arg, SubCommand}; use dotenv::dotenv; use std::env; mod abook; mod channel_stream; mod network_stream; mod xchan; fn main() { dotenv().ok(); let site = env::var("HZ_SITE").expect("SITE variable expected"); let user = env::var("HZ_USER").expect("USER variable expected"); let password = env::var("HZ_PASSWORD").expect("PASSWORD variable expected"); let matches = app_from_crate!() .subcommand( SubCommand::with_name("channel-stream") .about("Fetch the channel stream") .arg(Arg::with_name("raw") .long("raw") .help("Display raw json payload"))) .subcommand( SubCommand::with_name("network-stream") .about("Fetch the network stream") .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"))) .subcommand( SubCommand::with_name("xchan") .about("Fetch xchan info") .arg(Arg::with_name("raw") .long("raw") .help("Display raw json payload")) .arg(Arg::with_name("addr") .long("addr") .help("ID is given as a webbie address (default)")) .arg(Arg::with_name("hash") .long("hash") .help("ID is given as a xchan hash")) .arg(Arg::with_name("guid") .long("guid") .help("ID is given as a GUID")) .arg(Arg::with_name("ID") .help("id (email, hash or GUID) of xchan to fetch") .required(true))) .get_matches(); let client = zotapi::client(&site, &user, &password); match matches.subcommand() { ("channel-stream", Some(m)) => { let raw = m.is_present("raw"); channel_stream::fetch(&client, raw); }, ("network-stream", Some(m)) => { let raw = m.is_present("raw"); network_stream::fetch(&client, raw); }, ("abook", Some(m)) => { let raw = m.is_present("raw"); abook::fetch(&client, raw); }, ("xchan", Some(m)) => { let raw = m.is_present("raw"); let t = if m.is_present("guid") { xchan::Type::GUID } else if m.is_present("hash") { xchan::Type::Hash } else { xchan::Type::Addr }; xchan::fetch(&client, raw, t, m.value_of("ID").unwrap()); }, _ => { println!("{}", matches.usage()); }, } }