Merge branch 'libimagentryview-propagate-io-errors' into master
This commit is contained in:
commit
a2433f315d
10 changed files with 101 additions and 17 deletions
|
@ -209,9 +209,9 @@ fn main() {
|
|||
.map(|s| writeln!(outlock, "{}", s).to_exit_code().unwrap_or_exit());
|
||||
}
|
||||
|
||||
viewer
|
||||
.view_entry(&entry, &mut outlock)
|
||||
.map_err_trace_exit_unwrap();
|
||||
if let Err(e) = viewer.view_entry(&entry, &mut outlock) {
|
||||
handle_error(e);
|
||||
}
|
||||
|
||||
rt.report_touched(entry.get_location()).unwrap_or_exit();
|
||||
});
|
||||
|
@ -243,9 +243,9 @@ fn main() {
|
|||
.map(|s| writeln!(outlock, "{}", s).to_exit_code().unwrap_or_exit());
|
||||
}
|
||||
|
||||
viewer
|
||||
.view_entry(&entry, &mut outlock)
|
||||
.map_err_trace_exit_unwrap();
|
||||
if let Err(e) = viewer.view_entry(&entry, &mut outlock) {
|
||||
handle_error(e);
|
||||
}
|
||||
|
||||
rt.report_touched(entry.get_location()).unwrap_or_exit();
|
||||
});
|
||||
|
@ -285,3 +285,11 @@ fn create_tempfile_for<'a>(entry: &FileLockEntry<'a>, view_header: bool, hide_co
|
|||
(tmpfile, file_path)
|
||||
}
|
||||
|
||||
fn handle_error(e: ::libimagentryview::error::Error) {
|
||||
use libimagentryview::error::Error;
|
||||
match e {
|
||||
Error::Io(e) => Err(e).to_exit_code().unwrap_or_exit(),
|
||||
Error::Other(e) => Err(e).map_err_trace_exit_unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,9 +23,11 @@ use libimagrt::runtime::Runtime;
|
|||
use libimagerror::trace::MapErrTrace;
|
||||
use libimagerror::iter::TraceIterator;
|
||||
use libimagerror::exit::ExitUnwrap;
|
||||
use libimagerror::io::ToExitCode;
|
||||
use libimagutil::warn_exit::warn_exit;
|
||||
use libimagstore::iter::get::StoreIdGetIteratorExtension;
|
||||
use libimagentryview::viewer::Viewer;
|
||||
use libimagentryview::error::Error;
|
||||
|
||||
use crate::util::get_diary_name;
|
||||
|
||||
|
@ -49,7 +51,13 @@ pub fn view(rt: &Runtime) {
|
|||
});
|
||||
|
||||
let out = rt.stdout();
|
||||
DV::new(hdr).view_entries(entries, &mut out.lock())
|
||||
.map_err_trace_exit_unwrap();
|
||||
let mut outlock = out.lock();
|
||||
|
||||
if let Err(e) = DV::new(hdr).view_entries(entries, &mut outlock) {
|
||||
match e {
|
||||
Error::Io(e) => Err(e).to_exit_code().unwrap_or_exit(),
|
||||
Error::Other(e) => Err(e).map_err_trace_exit_unwrap()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,14 +22,14 @@
|
|||
use std::io::Write;
|
||||
use std::ops::Deref;
|
||||
|
||||
use failure::Fallible as Result;
|
||||
use failure::ResultExt;
|
||||
use failure::err_msg;
|
||||
use failure::Error;
|
||||
|
||||
use libimagstore::store::Entry;
|
||||
use libimagentryview::viewer::Viewer;
|
||||
use libimagentryview::builtin::plain::PlainViewer;
|
||||
use libimagentryview::error::Error;
|
||||
use libimagentryview::error::Result;
|
||||
use crate::entry::DiaryEntry;
|
||||
|
||||
/// This viewer does _not_ implement libimagentryview::viewer::Viewer because we need to be able to
|
||||
|
|
|
@ -24,9 +24,9 @@ use libimagrt::runtime::Runtime;
|
|||
use libimagentryedit::edit::edit_in_tmpfile;
|
||||
|
||||
use crate::viewer::Viewer;
|
||||
use failure::Fallible as Result;
|
||||
use crate::error::Result;
|
||||
use crate::error::Error;
|
||||
use failure::ResultExt;
|
||||
use failure::Error;
|
||||
|
||||
pub struct EditorView<'a>(&'a Runtime<'a>);
|
||||
|
||||
|
|
|
@ -27,8 +27,8 @@ use pulldown_cmark::Parser;
|
|||
use syntect::parsing::SyntaxSet;
|
||||
|
||||
use crate::viewer::Viewer;
|
||||
use failure::Fallible as Result;
|
||||
use failure::Error;
|
||||
use crate::error::Result;
|
||||
use crate::error::Error;
|
||||
|
||||
pub struct MarkdownViewer<'a> {
|
||||
rt: &'a Runtime<'a>,
|
||||
|
@ -66,6 +66,7 @@ impl<'a> Viewer for MarkdownViewer<'a> {
|
|||
self.resource_access.clone(),
|
||||
syntax_set)
|
||||
.map_err(|e| e.compat())
|
||||
.map_err(::failure::Error::from)
|
||||
.map_err(Error::from)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ use std::io::Write;
|
|||
use libimagstore::store::Entry;
|
||||
|
||||
use crate::viewer::Viewer;
|
||||
use failure::Fallible as Result;
|
||||
use crate::error::Result;
|
||||
|
||||
pub struct PlainViewer {
|
||||
show_header: bool
|
||||
|
|
|
@ -24,7 +24,7 @@ use libimagstore::store::Entry;
|
|||
use toml::ser::to_string;
|
||||
|
||||
use crate::viewer::Viewer;
|
||||
use failure::Fallible as Result;
|
||||
use crate::error::Result;
|
||||
|
||||
pub struct StdoutViewer {
|
||||
view_header: bool,
|
||||
|
|
66
lib/entry/libimagentryview/src/error.rs
Normal file
66
lib/entry/libimagentryview/src/error.rs
Normal file
|
@ -0,0 +1,66 @@
|
|||
//
|
||||
// imag - the personal information management suite for the commandline
|
||||
// Copyright (C) 2015-2019 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 std::fmt::Display;
|
||||
use std::fmt::Debug;
|
||||
|
||||
use failure::Fail;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Error {
|
||||
Io(::std::io::Error),
|
||||
Other(::failure::Error),
|
||||
}
|
||||
|
||||
impl Display for Error {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
||||
match self {
|
||||
Error::Io(e) => write!(f, "{}", e),
|
||||
Error::Other(e) => write!(f, "{}", e),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Fail for Error {
|
||||
/* empty */
|
||||
}
|
||||
|
||||
impl From<::std::io::Error> for Error {
|
||||
fn from(ioe: ::std::io::Error) -> Self {
|
||||
Error::Io(ioe)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<::failure::Error> for Error {
|
||||
fn from(fe: ::failure::Error) -> Self {
|
||||
Error::Other(fe)
|
||||
}
|
||||
}
|
||||
|
||||
impl<D> From<::failure::Context<D>> for Error
|
||||
where D: Debug + Display + Send + Sync
|
||||
{
|
||||
fn from(ctx: ::failure::Context<D>) -> Self {
|
||||
Error::Other(ctx.into())
|
||||
}
|
||||
}
|
||||
|
||||
/// Convenient helper type
|
||||
pub type Result<T> = ::std::result::Result<T, Error>;
|
||||
|
|
@ -56,5 +56,6 @@ extern crate libimagerror;
|
|||
extern crate libimagentryedit;
|
||||
|
||||
pub mod builtin;
|
||||
pub mod error;
|
||||
pub mod viewer;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ use std::ops::Deref;
|
|||
|
||||
use libimagstore::store::Entry;
|
||||
|
||||
use failure::Fallible as Result;
|
||||
use crate::error::Result;
|
||||
|
||||
pub trait Viewer {
|
||||
|
||||
|
|
Loading…
Reference in a new issue