summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2018-03-23 15:27:26 +0100
committerMatthias Beyer <mail@beyermatthias.de>2018-03-23 17:16:40 +0100
commit13af364b765b495fe39ab8177ae0e6c24c543a9b (patch)
treeba35d3310f1b05ff099444fadcc5d597d626565f
parented41922c2e44061c1e2c045257daf6d554b96059 (diff)
Add header editing support
-rw-r--r--lib/entry/libimagentryedit/Cargo.toml1
-rw-r--r--lib/entry/libimagentryedit/src/edit.rs23
-rw-r--r--lib/entry/libimagentryedit/src/error.rs10
-rw-r--r--lib/entry/libimagentryedit/src/lib.rs1
4 files changed, 35 insertions, 0 deletions
diff --git a/lib/entry/libimagentryedit/Cargo.toml b/lib/entry/libimagentryedit/Cargo.toml
index 57690db1..865d6264 100644
--- a/lib/entry/libimagentryedit/Cargo.toml
+++ b/lib/entry/libimagentryedit/Cargo.toml
@@ -21,6 +21,7 @@ maintenance = { status = "actively-developed" }
[dependencies]
error-chain = "0.11"
+toml = "0.4"
libimagerror = { version = "0.7.0", path = "../../../lib/core/libimagerror" }
libimagrt = { version = "0.7.0", path = "../../../lib/core/libimagrt" }
diff --git a/lib/entry/libimagentryedit/src/edit.rs b/lib/entry/libimagentryedit/src/edit.rs
index e84e3b7b..6802eaa3 100644
--- a/lib/entry/libimagentryedit/src/edit.rs
+++ b/lib/entry/libimagentryedit/src/edit.rs
@@ -29,6 +29,11 @@ pub trait Edit {
fn edit_content(&mut self, rt: &Runtime) -> Result<()>;
}
+pub trait EditHeader : Edit {
+ fn edit_header(&mut self, rt: &Runtime) -> Result<()>;
+ fn edit_header_and_content(&mut self, rt: &Runtime) -> Result<()>;
+}
+
impl Edit for String {
fn edit_content(&mut self, rt: &Runtime) -> Result<()> {
@@ -46,6 +51,24 @@ impl Edit for Entry {
}
+impl EditHeader for Entry {
+
+ fn edit_header(&mut self, rt: &Runtime) -> Result<()> {
+ let mut header = ::toml::ser::to_string_pretty(self.get_header())?;
+ let _ = edit_in_tmpfile(rt, &mut header)?;
+ let header = ::toml::de::from_str(&header)?;
+ *self.get_header_mut() = header;
+ Ok(())
+ }
+
+ fn edit_header_and_content(&mut self, rt: &Runtime) -> Result<()> {
+ let mut header_and_content = self.to_str();
+ let _ = edit_in_tmpfile(rt, &mut header_and_content)?;
+ self.replace_from_buffer(&header_and_content).map_err(EE::from)
+ }
+
+}
+
pub fn edit_in_tmpfile(rt: &Runtime, s: &mut String) -> Result<()> {
use libimagutil::edit::edit_in_tmpfile_with_command;
diff --git a/lib/entry/libimagentryedit/src/error.rs b/lib/entry/libimagentryedit/src/error.rs
index 094744b4..039dd0c5 100644
--- a/lib/entry/libimagentryedit/src/error.rs
+++ b/lib/entry/libimagentryedit/src/error.rs
@@ -22,6 +22,16 @@ error_chain! {
EditError, EditErrorKind, ResultExt, Result;
}
+ links {
+ StoreError(::libimagstore::error::StoreError, ::libimagstore::error::StoreErrorKind);
+ }
+
+ foreign_links {
+ TomlSerError(::toml::ser::Error);
+ TomlDeserError(::toml::de::Error);
+ }
+
+
errors {
IOError {
description("IO Error")
diff --git a/lib/entry/libimagentryedit/src/lib.rs b/lib/entry/libimagentryedit/src/lib.rs
index bcc2491c..29a09073 100644
--- a/lib/entry/libimagentryedit/src/lib.rs
+++ b/lib/entry/libimagentryedit/src/lib.rs
@@ -40,6 +40,7 @@ extern crate libimagstore;
extern crate libimagrt;
extern crate libimagutil;
#[macro_use] extern crate error_chain;
+extern crate toml;
pub mod edit;
pub mod error;