initial load of upstream version 1.06.32
[xmlrpc-c] / src / cpp / outcome.cpp
diff --git a/src/cpp/outcome.cpp b/src/cpp/outcome.cpp
new file mode 100644 (file)
index 0000000..e004ef8
--- /dev/null
@@ -0,0 +1,57 @@
+#include "xmlrpc-c/girerr.hpp"
+using girerr::error;
+#include "xmlrpc-c/base.hpp"
+
+using namespace std;
+
+namespace xmlrpc_c {
+
+rpcOutcome::rpcOutcome() : valid(false) {}
+
+rpcOutcome::rpcOutcome(xmlrpc_c::value const result) :
+    valid(true), _succeeded(true), result(result) 
+    {}
+
+
+
+rpcOutcome::rpcOutcome(xmlrpc_c::fault const fault) :
+    valid(true), _succeeded(false), fault(fault)
+    {}
+
+
+
+bool
+rpcOutcome::succeeded() const {
+    if (!valid)
+        throw(error("Attempt to access rpcOutcome object before setting it"));
+    return _succeeded;
+}
+
+
+
+fault
+rpcOutcome::getFault() const {
+    
+    if (!valid)
+        throw(error("Attempt to access rpcOutcome object before setting it"));
+    if (_succeeded)
+        throw(error("Attempt to get fault description from a non-failure "
+                    "RPC outcome"));
+    return fault;
+}
+
+
+
+value
+rpcOutcome::getResult() const {
+    
+    if (!valid)
+        throw(error("Attempt to access rpcOutcome object before setting it"));
+    if (!_succeeded)
+        throw(error("Attempt to get result from an unsuccessful RPC outcome"));
+    return result;
+}
+
+
+} // namespace
+