diff options
| author | Gavin Andresen <[email protected]> | 2012-06-22 18:36:42 -0400 |
|---|---|---|
| committer | Gavin Andresen <[email protected]> | 2012-07-05 12:42:25 -0400 |
| commit | 899d373b3ccb3003f8f6e518ba4cf7ba4028e58b (patch) | |
| tree | 2e35daa5f4d32a335fee22b6a8a1b28a5a0df768 /src/bitcoinrpc.cpp | |
| parent | Refactor: SignSignature/VerifyScript (diff) | |
| download | discoin-899d373b3ccb3003f8f6e518ba4cf7ba4028e58b.tar.xz discoin-899d373b3ccb3003f8f6e518ba4cf7ba4028e58b.zip | |
RPCTypeCheck method to make type-checking JSON Arrays easier.
Diffstat (limited to 'src/bitcoinrpc.cpp')
| -rw-r--r-- | src/bitcoinrpc.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 19815ef0f..c9413a5b2 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -63,6 +63,43 @@ Object JSONRPCError(int code, const string& message) return error; } +void RPCTypeCheck(const Array& params, + const list<Value_type>& typesExpected) +{ + int i = 0; + BOOST_FOREACH(Value_type t, typesExpected) + { + if (params.size() <= i) + break; + + const Value& v = params[i]; + if (v.type() != t) + { + string err = strprintf("Expected type %s, got %s", + Value_type_name[t], Value_type_name[v.type()]); + throw JSONRPCError(-3, err); + } + i++; + } +} + +void RPCTypeCheck(const Object& o, + const map<string, Value_type>& typesExpected) +{ + BOOST_FOREACH(const PAIRTYPE(string, Value_type)& t, typesExpected) + { + const Value& v = find_value(o, t.first); + if (v.type() == null_type) + throw JSONRPCError(-3, strprintf("Missing %s", t.first.c_str())); + if (v.type() != t.second) + { + string err = strprintf("Expected type %s for %s, got %s", + Value_type_name[t.second], t.first.c_str(), Value_type_name[v.type()]); + throw JSONRPCError(-3, err); + } + } +} + double GetDifficulty(const CBlockIndex* blockindex = NULL) { // Floating point number that is a multiple of the minimum difficulty, |