summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2017-03-08 12:45:16 +0100
committerGitHub <noreply@github.com>2017-03-08 12:45:16 +0100
commit3a0166ba7c301b92cc0ccdbec137a42345963dd9 (patch)
tree8d02cef82be9f2de7589dc269c80597cdaf356e3
parentc4bd98a48fe56625179ce2ecfad403164f0a32b8 (diff)
parenta14d10fd47ed998f7638a9ed78ebaadba3c61132 (diff)
downloadimag-3a0166ba7c301b92cc0ccdbec137a42345963dd9.zip
imag-3a0166ba7c301b92cc0ccdbec137a42345963dd9.tar.gz
Merge pull request #912 from matthiasbeyer/libimagruby/error-types
Libimagruby/error types
-rw-r--r--libimagruby/src/entry.rs18
-rw-r--r--libimagruby/src/error.rs52
-rw-r--r--libimagruby/src/lib.rs2
-rw-r--r--libimagruby/src/store.rs34
-rw-r--r--libimagruby/test/test_ruby.rb25
5 files changed, 105 insertions, 26 deletions
diff --git a/libimagruby/src/entry.rs b/libimagruby/src/entry.rs
index 0ac88c0..aa83e6a 100644
--- a/libimagruby/src/entry.rs
+++ b/libimagruby/src/entry.rs
@@ -79,11 +79,11 @@ macro_rules! call_on_fle_from_store {
$operation
},
Ok(None) => {
- VM::raise(Class::from_existing("RuntimeError"), "Obj does not exist");
+ VM::raise(Class::from_existing("RImagStoreReadError"), "Obj does not exist");
NilClass::new().to_any_object()
},
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreReadError"), e.description());
NilClass::new().to_any_object()
},
}
@@ -100,11 +100,11 @@ macro_rules! call_on_fle_from_store {
$operation
},
Ok(None) => {
- VM::raise(Class::from_existing("RuntimeError"), "Obj does not exist");
+ VM::raise(Class::from_existing("RImagStoreReadError"), "Obj does not exist");
$ex
},
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreReadError"), e.description());
$ex
},
}
@@ -133,7 +133,7 @@ methods!(
let entryheader = match typecheck!(hdr or return NilClass::new()).into_toml() {
Value::Table(t) => Value::Table(t),
_ => {
- let ec = Class::from_existing("RuntimeError");
+ let ec = Class::from_existing("RImagEntryHeaderWriteError");
VM::raise(ec, "Something weird happened. Hash seems to be not a Hash");
return NilClass::new();
},
@@ -160,7 +160,7 @@ methods!(
let content = match typecheck!(ctt).into_toml() {
Value::String(s) => s,
_ => {
- let ec = Class::from_existing("RuntimeError");
+ let ec = Class::from_existing("RImagEntryError");
VM::raise(ec, "Something weird happened. String seems to be not a String");
return NilClass::new();
},
@@ -197,7 +197,7 @@ methods!(
match itself.get_data(&*ENTRY_HEADER_WRAPPER).insert(&spec, obj.into_toml()) {
Ok(b) => Boolean::new(b),
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagEntryHeaderWriteError"), e.description());
Boolean::new(false)
}
}
@@ -213,7 +213,7 @@ methods!(
Ok(Some(v)) => v.into_ruby(),
Ok(None) => NilClass::new().to_any_object(),
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagEntryHeaderWriteError"), e.description());
return Boolean::new(false).to_any_object();
}
}
@@ -228,7 +228,7 @@ methods!(
Ok(Some(v)) => v.into_ruby(),
Ok(None) => NilClass::new().to_any_object(),
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagEntryHeaderReadError"), e.description());
return Boolean::new(false).to_any_object();
}
}
diff --git a/libimagruby/src/error.rs b/libimagruby/src/error.rs
new file mode 100644
index 0000000..acd01d4
--- /dev/null
+++ b/libimagruby/src/error.rs
@@ -0,0 +1,52 @@
+//
+// 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 ruru::Class;
+
+class!(RImagError);
+class!(RImagObjDoesNotExistError);
+class!(RImagStoreError);
+class!(RImagStoreWriteError);
+class!(RImagStoreReadError);
+class!(RImagEntryError);
+class!(RImagEntryHeaderError);
+class!(RImagEntryHeaderReadError);
+class!(RImagEntryHeaderWriteError);
+class!(RImagTypeError);
+
+pub fn setup() {
+ let imag_error = Class::new("RImagError", Some(&Class::from_existing("RuntimeError")));
+ Class::new("RImagObjDoesNotExistError" , Some(&imag_error));
+
+ {
+ let imag_store_error = Class::new("RImagStoreError", Some(&imag_error));
+ Class::new("RImagStoreWriteError", Some(&imag_store_error));
+ Class::new("RImagStoreReadError" , Some(&imag_store_error));
+ }
+
+ {
+ let imag_entry_error = Class::new("RImagEntryError" , Some(&imag_error));
+ let imag_entry_header_error = Class::new("RImagEntryHeaderError", Some(&imag_entry_error));
+ Class::new("RImagEntryHeaderReadError" , Some(&imag_entry_header_error));
+ Class::new("RImagEntryHeaderWriteError", Some(&imag_entry_header_error));
+ }
+
+ Class::new("RImagTypeError", Some(&imag_error));
+}
+
diff --git a/libimagruby/src/lib.rs b/libimagruby/src/lib.rs
index 13d933b..f26b6b1 100644
--- a/libimagruby/src/lib.rs
+++ b/libimagruby/src/lib.rs
@@ -34,6 +34,7 @@ extern crate libimagrt;
#[macro_use] pub mod store;
mod cache;
+pub mod error;
pub mod entry;
pub mod imag;
pub mod ruby_utils;
@@ -43,6 +44,7 @@ pub mod toml_utils;
#[no_mangle]
#[allow(non_snake_case)]
pub extern fn Init_liblibimagruby() {
+ self::error::setup();
self::store::setup();
self::storeid::setup();
self::entry::setup_filelockentry();
diff --git a/libimagruby/src/store.rs b/libimagruby/src/store.rs
index f20481b..518b42a 100644
--- a/libimagruby/src/store.rs
+++ b/libimagruby/src/store.rs
@@ -61,14 +61,14 @@ macro_rules! call_on_store_by_handle {
match hm.get($store_handle) {
Some($name) => { $operation },
None => {
- VM::raise(Class::from_existing("RuntimeError"),
+ VM::raise(Class::from_existing("RImagStoreReadError"),
"Tried to operate on non-existing object");
$ex
}
}
},
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagError"), e.description());
$ex
}
}
@@ -102,11 +102,11 @@ macro_rules! call_on_store {
let $fle_name = match $store_name.get($fle_handle_name) {
Ok(Some(fle)) => fle,
Ok(None) => {
- VM::raise(Class::from_existing("RuntimeError"), "Obj does not exist");
+ VM::raise(Class::from_existing("RImagStoreReadError"), "Obj does not exist");
return $fail_expr
},
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreReadError"), e.description());
return $fail_expr
},
};
@@ -174,14 +174,14 @@ methods!(
let rtp = PathBuf::from(typecheck!(rtp or return any NilClass::new()).to_string());
if !rtp.exists() || !rtp.is_dir() {
- VM::raise(Class::from_existing("RuntimeError"), "Runtimepath not a directory");
+ VM::raise(Class::from_existing("RImagError"), "Runtimepath not a directory");
return NilClass::new().to_any_object();
}
let store_config = match Configuration::new(&rtp) {
Ok(mut cfg) => cfg.store_config().cloned(),
Err(e) => if e.err_type() != ConfigErrorKind::NoConfigFileFound {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagError"), e.description());
return NilClass::new().to_any_object();
} else {
warn!("No config file found.");
@@ -248,7 +248,7 @@ methods!(
let store = match store {
Ok(s) => s,
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreError"), e.description());
return NilClass::new().to_any_object();
},
};
@@ -264,7 +264,7 @@ methods!(
return store_handle.wrap().to_any_object();
},
Err(e) => {
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagError"), e.description());
return NilClass::new().to_any_object();
}
}
@@ -291,7 +291,7 @@ methods!(
match store.create(sid.clone()) {
Err(e) => {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
NilClass::new().to_any_object()
},
Ok(entry) => {
@@ -325,7 +325,7 @@ methods!(
match store.retrieve(sid.clone()) {
Err(e) => {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
NilClass::new().to_any_object()
},
Ok(entry) => {
@@ -360,7 +360,7 @@ methods!(
match store.get(sid.clone()) {
Err(e) => {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
NilClass::new().to_any_object()
},
Ok(None) => NilClass::new().to_any_object(),
@@ -397,7 +397,7 @@ methods!(
match store.retrieve_for_module(&name) {
Err(e) => {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
NilClass::new().to_any_object()
},
Ok(iter) => {
@@ -428,7 +428,7 @@ methods!(
operation {
if let Err(e) = store.update(real_fle) {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
}
NilClass::new()
},
@@ -451,7 +451,7 @@ methods!(
operation {
if let Err(e) = store.delete(sid) {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
}
NilClass::new()
},
@@ -476,7 +476,7 @@ methods!(
operation {
if let Err(e) = store.save_to(&real_fle, sid) {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
}
NilClass::new()
},
@@ -501,7 +501,7 @@ methods!(
operation {
if let Err(e) = store.save_as(real_fle, sid) {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
}
NilClass::new()
},
@@ -525,7 +525,7 @@ methods!(
operation {
if let Err(e) = store.move_by_id(old, nw) {
trace_error(&e);
- VM::raise(Class::from_existing("RuntimeError"), e.description());
+ VM::raise(Class::from_existing("RImagStoreWriteError"), e.description());
}
NilClass::new()
},
diff --git a/libimagruby/test/test_ruby.rb b/libimagruby/test/test_ruby.rb
index 9b08859..1c777a1 100644
--- a/libimagruby/test/test_ruby.rb
+++ b/libimagruby/test/test_ruby.rb
@@ -30,6 +30,31 @@ end
puts "---"
+[
+ :RImag,
+ :RStoreId,
+ :RStoreHandle,
+ :RFileLockEntryHandle,
+ :REntryHeader,
+ :REntryContent,
+ :RImagError,
+ :RImagObjDoesNotExistError,
+ :RImagStoreError,
+ :RImagStoreWriteError,
+ :RImagStoreReadError,
+ :RImagEntryError,
+ :RImagEntryHeaderError,
+ :RImagEntryHeaderReadError,
+ :RImagEntryHeaderWriteError,
+ :RImagTypeError,
+].each do |sym|
+ if Kernel.const_defined? sym
+ RImag.info "Exists: #{sym}"
+ else
+ RImag.error "#{sym} not defined"
+ end
+end
+
works "RStoreId.new_baseless", (not RStoreId.new_baseless("test").nil?)
works "RStoreHandle.respond_to? :new", (RStoreHandle.respond_to? :new)