From 47fb8c4e7b32d8f9ff4c2f34e977a90ca1c06970 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Sat, 22 Sep 2018 12:17:42 +0200 Subject: [PATCH] [65-libyang-option-data] Added Unexpected for impossible conditions and @throw for BadValue --- src/lib/yang/translator_option_data.cc | 11 ++++++++--- src/lib/yang/translator_option_data.h | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/lib/yang/translator_option_data.cc b/src/lib/yang/translator_option_data.cc index 2f1e782f4d..fde715bbbf 100644 --- a/src/lib/yang/translator_option_data.cc +++ b/src/lib/yang/translator_option_data.cc @@ -43,7 +43,9 @@ TranslatorOptionData::getOptionDataKea(const string& xpath) { ConstElementPtr code = getItem(xpath + "/code"); ConstElementPtr space = getItem(xpath + "/space"); if (!code || !space) { - return (ElementPtr()); + // Can't happen as code and space are the keys. + isc_throw(Unexpected, "getOptionDataKea requires code and space: " + << xpath); } ElementPtr result = Element::createMap(); result->set("code", code); @@ -93,6 +95,7 @@ TranslatorOptionData::setOptionData(const string& xpath, void TranslatorOptionData::setOptionDataKea(const string& xpath, ConstElementPtr elem) { + // Skip keys code and space. ConstElementPtr name = elem->get("name"); if (name) { setItem(xpath + "/name", name, SR_STRING_T); @@ -146,7 +149,9 @@ TranslatorOptionDataList::getOptionDataListKea(const string& xpath) { ElementPtr result = Element::createList(); S_Iter_Value iter = getIter(xpath + "/*"); if (!iter) { - return (ConstElementPtr()); + // Can't happen. + isc_throw(Unexpected, "getOptionDataListKea: can't get iterator: " + << xpath); } for (;;) { const string& option = getNext(iter); @@ -187,7 +192,7 @@ TranslatorOptionDataList::setOptionDataListKea(const string& xpath, } unsigned code = static_cast(option->get("code")->intValue()); if (!option->contains("space")) { - isc_throw(BadValue,"option data without space: " <str()); + isc_throw(BadValue, "option data without space: " <str()); } string space = option->get("space")->stringValue(); ostringstream keys; diff --git a/src/lib/yang/translator_option_data.h b/src/lib/yang/translator_option_data.h index fdd3c88135..e6530b9aa6 100644 --- a/src/lib/yang/translator_option_data.h +++ b/src/lib/yang/translator_option_data.h @@ -131,6 +131,7 @@ protected: /// /// @param xpath The xpath of the option data list. /// @param elem The JSON element. + /// @throw BadValue on option data without code or space. void setOptionDataListKea(const std::string& xpath, isc::data::ConstElementPtr elem); -- 2.47.2