summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-01-01 21:18:22 +0100
committerGitHub <noreply@github.com>2018-01-01 21:18:22 +0100
commit0c9c9e26c1705c660baf2fb015b1dd5e14f748ce (patch)
treecd7b623e6f8c29efb2b99ac3c863c5476684c91e
parent529f3f83da030ff2ba383b9bb7a9f6ff8191e451 (diff)
parent198e304be924b959975417c20983090d47235a6a (diff)
downloadimag-0c9c9e26c1705c660baf2fb015b1dd5e14f748ce.zip
imag-0c9c9e26c1705c660baf2fb015b1dd5e14f748ce.tar.gz
Merge pull request #1183 from matthiasbeyer/libimaglog/init
libimaglog: init
-rw-r--r--Cargo.toml1
-rw-r--r--doc/src/05100-lib-log.md10
-rw-r--r--lib/domain/libimaglog/Cargo.toml29
l---------lib/domain/libimaglog/README.md1
-rw-r--r--lib/domain/libimaglog/src/error.rs36
-rw-r--r--lib/domain/libimaglog/src/lib.rs30
-rw-r--r--lib/domain/libimaglog/src/log.rs54
7 files changed, 161 insertions, 0 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 62b680d..6416893 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -26,6 +26,7 @@ members = [
"lib/domain/libimagcontact",
"lib/domain/libimagdiary",
"lib/domain/libimaghabit",
+ "lib/domain/libimaglog",
"lib/domain/libimagmail",
"lib/domain/libimagnotes",
"lib/domain/libimagtimetrack",
diff --git a/doc/src/05100-lib-log.md b/doc/src/05100-lib-log.md
new file mode 100644
index 0000000..f960bf2
--- /dev/null
+++ b/doc/src/05100-lib-log.md
@@ -0,0 +1,10 @@
+## libimaglog
+
+A small extension over libimagdiary which strips down the functionality of
+libimagdiary to some defaults for writing a `log` (a tumbleblog like diary)
+with rather short messages.
+
+Provides only basic functionality over libimagdiary, most notably the
+"log.is_log" header entry, so the `imag-log` CLI can distinguish between
+"logs" and "diary entries".
+
diff --git a/lib/domain/libimaglog/Cargo.toml b/lib/domain/libimaglog/Cargo.toml
new file mode 100644
index 0000000..9c82529
--- /dev/null
+++ b/lib/domain/libimaglog/Cargo.toml
@@ -0,0 +1,29 @@
+[package]
+name = "libimaglog"
+version = "0.6.0"
+authors = ["Matthias Beyer <mail@beyermatthias.de>"]
+
+description = "Library for the imag core distribution"
+
+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"
+
+[badges]
+travis-ci = { repository = "matthiasbeyer/imag" }
+is-it-maintained-issue-resolution = { repository = "matthiasbeyer/imag" }
+is-it-maintained-open-issues = { repository = "matthiasbeyer/imag" }
+maintenance = { status = "actively-developed" }
+
+[dependencies]
+toml = "0.4"
+toml-query = "0.3"
+error-chain = "0.11"
+
+libimagstore = { version = "0.6.0", path = "../../../lib/core/libimagstore" }
+libimagerror = { version = "0.6.0", path = "../../../lib/core/libimagerror" }
+libimagdiary = { version = "0.6.0", path = "../../../lib/domain/libimagdiary" }
diff --git a/lib/domain/libimaglog/README.md b/lib/domain/libimaglog/README.md
new file mode 120000
index 0000000..f596111
--- /dev/null
+++ b/lib/domain/libimaglog/README.md
@@ -0,0 +1 @@
+../../../doc/src/05100-lib-log.md \ No newline at end of file
diff --git a/lib/domain/libimaglog/src/error.rs b/lib/domain/libimaglog/src/error.rs
new file mode 100644
index 0000000..2d00180
--- /dev/null
+++ b/lib/domain/libimaglog/src/error.rs
@@ -0,0 +1,36 @@
+//
+// imag - the personal information management suite for the commandline
+// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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
+//
+
+error_chain! {
+ types {
+ LogError, LogErrorKind, ResultExt, Result;
+ }
+
+ foreign_links {
+ TomlQueryError(::toml_query::error::Error);
+ }
+
+ errors {
+ HeaderTypeError(expected: &'static str, got: &'static str) {
+ description("Header Type Error")
+ display("Error: Expected {} in header, got {}", expected, got)
+ }
+ }
+}
+
diff --git a/lib/domain/libimaglog/src/lib.rs b/lib/domain/libimaglog/src/lib.rs
new file mode 100644
index 0000000..375d657
--- /dev/null
+++ b/lib/domain/libimaglog/src/lib.rs
@@ -0,0 +1,30 @@
+//
+// imag - the personal information management suite for the commandline
+// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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
+//
+
+#[macro_use]
+extern crate error_chain;
+extern crate toml;
+extern crate toml_query;
+
+extern crate libimagdiary;
+extern crate libimagstore;
+
+pub mod error;
+pub mod log;
+
diff --git a/lib/domain/libimaglog/src/log.rs b/lib/domain/libimaglog/src/log.rs
new file mode 100644
index 0000000..a172eae
--- /dev/null
+++ b/lib/domain/libimaglog/src/log.rs
@@ -0,0 +1,54 @@
+//
+// imag - the personal information management suite for the commandline
+// Copyright (C) 2015, 2016 Matthias Beyer <mail@beyermatthias.de> 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 libimagdiary::entry::DiaryEntry;
+use libimagstore::store::Entry;
+
+use error::LogError as LE;
+use error::LogErrorKind as LEK;
+use error::Result;
+
+use toml::Value;
+use toml_query::read::TomlValueReadExt;
+use toml_query::insert::TomlValueInsertExt;
+
+pub trait Log : DiaryEntry {
+ fn is_log(&self) -> Result<bool>;
+ fn make_log_entry(&mut self) -> Result<()>;
+}
+
+impl Log for Entry {
+ fn is_log(&self) -> Result<bool> {
+ let location = "log.is_log";
+ match self.get_header().read(location)? {
+ Some(&Value::Boolean(b)) => Ok(b),
+ Some(_) => Err(LE::from_kind(LEK::HeaderTypeError("boolean", location))),
+ None => Ok(false)
+ }
+ }
+
+ fn make_log_entry(&mut self) -> Result<()> {
+ self.get_header_mut()
+ .insert("log.is_log", Value::Boolean(true))
+ .map_err(LE::from)
+ .map(|_| ())
+ }
+
+}
+