From 0540ae9392db2f887b3ef1bcdc6bc49b496655cc Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 6 Oct 2017 11:23:07 +0200 Subject: [PATCH] Initial import of imag-contact --- Cargo.toml | 1 + bin/domain/imag-contact/Cargo.toml | 26 ++++++++++++ bin/domain/imag-contact/src/main.rs | 65 +++++++++++++++++++++++++++++ bin/domain/imag-contact/src/ui.rs | 61 +++++++++++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 bin/domain/imag-contact/Cargo.toml create mode 100644 bin/domain/imag-contact/src/main.rs create mode 100644 bin/domain/imag-contact/src/ui.rs diff --git a/Cargo.toml b/Cargo.toml index 21f3a85e..7a0e8b3a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ members = [ "bin/core/imag-tag", "bin/core/imag-view", "bin/domain/imag-bookmark", + "bin/domain/imag-contact", "bin/domain/imag-diary", "bin/domain/imag-mail", "bin/domain/imag-notes", diff --git a/bin/domain/imag-contact/Cargo.toml b/bin/domain/imag-contact/Cargo.toml new file mode 100644 index 00000000..1dac6415 --- /dev/null +++ b/bin/domain/imag-contact/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "imag-contact" +version = "0.5.0" +authors = ["Matthias Beyer "] + +description = "Part of the imag core distribution: imag-contact command" + +keywords = ["imag", "PIM", "personal", "information", "management"] +readme = "../../../README.md" +license = "LGPL-2.1" + +documentation = "https://matthiasbeyer.github.io/imag/imag_documentation/index.html" +repository = "https://github.com/matthiasbeyer/imag" +homepage = "http://imag-pim.org" + +[dependencies] +clap = ">=2.17" +log = "0.3" +version = "2.0.1" +toml = "0.4" +toml-query = "^0.3.1" + +libimagrt = { version = "0.5.0", path = "../../../lib/core/libimagrt" } +libimagerror = { version = "0.5.0", path = "../../../lib/core/libimagerror" } +libimagcontact = { version = "0.5.0", path = "../../../lib/domain/libimagcontact" } +libimagutil = { version = "0.5.0", path = "../../../lib/etc/libimagutil" } diff --git a/bin/domain/imag-contact/src/main.rs b/bin/domain/imag-contact/src/main.rs new file mode 100644 index 00000000..cb320502 --- /dev/null +++ b/bin/domain/imag-contact/src/main.rs @@ -0,0 +1,65 @@ +// +// imag - the personal information management suite for the commandline +// Copyright (C) 2015, 2016 Matthias Beyer and contributors +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; version +// 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +// + +#![deny( + non_camel_case_types, + non_snake_case, + path_statements, + trivial_numeric_casts, + unstable_features, + unused_allocation, + unused_import_braces, + unused_imports, + unused_must_use, + unused_mut, + unused_qualifications, + while_true, +)] + +extern crate clap; +#[macro_use] extern crate log; +#[macro_use] extern crate version; +extern crate toml; +extern crate toml_query; + +extern crate libimagcontact; +extern crate libimagrt; +extern crate libimagerror; +extern crate libimagutil; + +use std::process::exit; + + +use libimagrt::runtime::Runtime; +use libimagrt::setup::generate_runtime_setup; +use libimagerror::trace::{MapErrTrace, trace_error, trace_error_exit}; +use libimagutil::info_result::*; + +mod ui; + +use ui::build_ui; + +fn main() { + let rt = generate_runtime_setup("imag-contact", + &version!()[..], + "Contact management tool", + build_ui); + +} + diff --git a/bin/domain/imag-contact/src/ui.rs b/bin/domain/imag-contact/src/ui.rs new file mode 100644 index 00000000..00a222b6 --- /dev/null +++ b/bin/domain/imag-contact/src/ui.rs @@ -0,0 +1,61 @@ +// +// imag - the personal information management suite for the commandline +// Copyright (C) 2015, 2016 Matthias Beyer and contributors +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; version +// 2.1 of the License. +// +// This library 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 +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +// + +use clap::{Arg, App, SubCommand}; + +use libimagutil::cli_validators::*; + +pub fn build_ui<'a>(app: App<'a, 'a>) -> App<'a, 'a> { + app + .subcommand(SubCommand::with_name("list") + .about("List contacts") + .version("0.1") + .arg(Arg::with_name("filter") + .index(1) + .takes_value(true) + .required(false) + .multiple(true) + .value_name("FILTER") + .help("Filter by these properties (not implemented yet)")) + ) + + .subcommand(SubCommand::with_name("import") + .about("Import contacts") + .version("0.1") + .arg(Arg::with_name("path") + .index(1) + .takes_value(true) + .required(true) + .multiple(false) + .value_name("PATH") + .help("Import from this file/directory")) + ) + + .subcommand(SubCommand::with_name("show") + .about("Show contact") + .version("0.1") + .arg(Arg::with_name("ref") + .index(1) + .takes_value(true) + .required(true) + .multiple(false) + .value_name("REF") + .help("Show the contact pointed to by this reference hash")) + ) +}