xpath = "/keatest-module:main/string";
value = "str";
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::string, elem->getType());
xpath = "/keatest-module:main/boolean";
value = "true";
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::boolean, elem->getType());
uint8_t u8(8);
value = to_string(u8);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::integer, elem->getType());
uint16_t u16(16);
value = to_string(u16);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::integer, elem->getType());
uint32_t u32(32);
value = to_string(u32);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::integer, elem->getType());
EXPECT_EQ(32, elem->intValue());
elem.reset();
+ // Unsigned 64 bit integer.
+ xpath = "/keatest-module:main/ui64";
+ uint32_t u64(64);
+ value = to_string(u64);
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::integer, elem->getType());
+ EXPECT_EQ(64, elem->intValue());
+ elem.reset();
+
+ // Empty.
+ xpath = "/keatest-module:main/empty";
+ value = string();
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::string, elem->getType());
+ EXPECT_EQ(string(), elem->stringValue());
+ elem.reset();
+
// Signed 8 bit integer.
xpath = "/keatest-module:main/i8";
int8_t s8(8);
value = to_string(s8);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::integer, elem->getType());
int16_t s16(16);
value = to_string(s16);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::integer, elem->getType());
int32_t s32(32);
value = to_string(s32);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::integer, elem->getType());
EXPECT_EQ(32, elem->intValue());
elem.reset();
+ // Signed 64 bit integer.
+ xpath = "/keatest-module:main/i64";
+ int32_t s64(64);
+ value = to_string(s64);
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::integer, elem->getType());
+ EXPECT_EQ(64, elem->intValue());
+ elem.reset();
+
// Identity reference.
xpath = "/keatest-module:main/id_ref";
value = "keatest-module:id_1";
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::string, elem->getType());
xpath = "/keatest-module:main/enum";
value = "maybe";
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::string, elem->getType());
EXPECT_EQ("maybe", elem->stringValue());
elem.reset();
+ // Bits.
+ xpath = "/keatest-module:main/options";
+ value = "strict recursive logging";
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::string, elem->getType());
+ EXPECT_EQ("strict recursive logging", elem->stringValue());
+ elem.reset();
+
// Binary.
xpath = "/keatest-module:main/raw";
value = "Zm9vYmFy";
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::string, elem->getType());
u8 = 1;
value = to_string(u8);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
u8 = 2;
value = to_string(u8);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
u8 = 3;
value = to_string(u8);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::list, elem->getType());
EXPECT_EQ("[ 1, 2, 3 ]", elem->str());
elem.reset();
- // Unknown / unsupported.
+ // Instance identifier.
+ xpath = "/keatest-module:main/instance_id";
+ value = "/keatest-module:main/numbers[.='1']";
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::string, elem->getType());
+ EXPECT_EQ(value, elem->stringValue());
+ elem.reset();
+
+ // Union.
+ xpath = "/keatest-module:main/union";
+ value = "8";
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::string, elem->getType());
+ EXPECT_EQ(value, elem->stringValue());
+ elem.reset();
+ value = "infinity";
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::string, elem->getType());
+ EXPECT_EQ(value, elem->stringValue());
+ elem.reset();
+
+ // Leafref.
+ xpath = "/keatest-module:main/leafref-i8";
+ value = "9";
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::string, elem->getType());
+ EXPECT_EQ(value, elem->stringValue());
+ elem.reset();
+
+ // Leafref.
+ xpath = "/keatest-module:main/leafref-raw";
+ value = "ff012345";
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::string, elem->getType());
+ EXPECT_EQ(value, elem->stringValue());
+ elem.reset();
+
+ // Leafref.
+ xpath = "/keatest-module:main/leafref-string";
+ value = "string through leafref";
+ EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
+ EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
+ ASSERT_TRUE(elem);
+ ASSERT_EQ(Element::string, elem->getType());
+ EXPECT_EQ(value, elem->stringValue());
+ elem.reset();
+
+ // Decimal 64.
xpath = "/keatest-module:main/dec64";
value = to_string(9.85);
EXPECT_NO_THROW_LOG(sess.setItem(xpath, value));
+ sess.applyChanges();
EXPECT_NO_THROW_LOG(elem = t_obj->getItemFromAbsoluteXpath(xpath));
ASSERT_TRUE(elem);
ASSERT_EQ(Element::real, elem->getType());
EXPECT_EQ(elem->str(), value);
elem.reset();
+ // Unsigned 64 bit integer.
+ elem = Element::create(int64_t(1234567890123456));
+ EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Uint64));
+ EXPECT_EQ("1234567890123456", value);
+ elem.reset();
+
// Signed 8 bit integer.
elem = Element::create(-123);
EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Int8));
EXPECT_EQ(elem->str(), value);
elem.reset();
+ // Signed 32 bit integer.
+ elem = Element::create(int64_t(-1234567890123456));
+ EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Int64));
+ EXPECT_EQ("-1234567890123456", value);
+ elem.reset();
+
// Identity reference.
elem = Element::create(str);
EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::IdentityRef));
EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Binary));
EXPECT_EQ("Zm9vYmFy", value);
+ // Bits.
+ elem = Element::create(string("foobar"));
+ EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Bits));
+ EXPECT_EQ(elem->stringValue(), value);
+
// Decimal 64.
double d64(.1234);
elem = Element::create(d64);
EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Dec64));
EXPECT_EQ(elem->str(), value);
+
+ // Empty.
+ elem = Element::create(string());
+ EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Empty));
+ EXPECT_EQ(elem->stringValue(), value);
+
+ // Leafref.
+ elem = Element::create(string("leafref"));
+ EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Leafref));
+ EXPECT_EQ(elem->stringValue(), value);
+
+ // Union.
+ elem = Element::create(string("union"));
+ EXPECT_NO_THROW_LOG(value = Translator::translateToYang(elem, LeafBaseType::Union));
+ EXPECT_EQ(elem->stringValue(), value);
}
// Test JSON to basic YANG value conversion using sysrepo test models.
ASSERT_EQ(LeafBaseType::Uint32, data_node->schema().asLeaf().valueType().base());
EXPECT_EQ(elem->str(), string(data_node->asTerm().valueStr()));
+ // Unsigned 64 bit integer.
+ xpath = "/keatest-module:main/ui64";
+ elem = Element::create(64);
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Uint64));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Uint64, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->str(), string(data_node->asTerm().valueStr()));
+
+ // Empty.
+ xpath = "/keatest-module:main/empty";
+ elem = Element::create(string());
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Empty));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Empty, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->stringValue(), string(data_node->asTerm().valueStr()));
+
// Signed 8 bit integer.
xpath = "/keatest-module:main/i8";
elem = Element::create(8);
ASSERT_EQ(LeafBaseType::Int32, data_node->schema().asLeaf().valueType().base());
EXPECT_EQ(elem->str(), string(data_node->asTerm().valueStr()));
+ // Signed 64 bit integer.
+ xpath = "/keatest-module:main/i64";
+ elem = Element::create(64);
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Int64));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Int64, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->str(), string(data_node->asTerm().valueStr()));
+
// Identity reference.
xpath = "/keatest-module:main/id_ref";
elem = Element::create(string("keatest-module:id_1"));
ASSERT_EQ(LeafBaseType::Binary, data_node->schema().asLeaf().valueType().base());
EXPECT_EQ("Zm9vYmFy", string(data_node->asTerm().valueStr()));
+ // Bits.
+ xpath = "/keatest-module:main/options";
+ elem = Element::create(string("strict recursive logging"));
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Bits));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Bits, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->stringValue(), string(data_node->asTerm().valueStr()));
+
// Decimal 64.
xpath = "/keatest-module:main/dec64";
double d64(9.85);
ASSERT_EQ(LeafBaseType::Dec64, data_node->schema().asLeaf().valueType().base());
EXPECT_EQ("[ 1, 2, 3 ]", got->str());
- // Clean it.
+ // Clean the leaf-list.
EXPECT_NO_THROW_LOG(t_obj->deleteItem(xpath));
EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
EXPECT_FALSE(data_node);
data_node.reset();
+ // Instance identifier.
+ xpath = "/keatest-module:main/instance_id";
+ elem = Element::create(string("/keatest-module:main/numbers[.='1']"));
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::InstanceIdentifier));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::InstanceIdentifier, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->stringValue(), string(data_node->asTerm().valueStr()));
+
+ // Union.
+ xpath = "/keatest-module:main/union";
+ elem = Element::create(string("8"));
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Union));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Union, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->stringValue(), string(data_node->asTerm().valueStr()));
+ elem = Element::create(string("infinity"));
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Union));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Union, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->stringValue(), string(data_node->asTerm().valueStr()));
+
+ // Leafref.
+ xpath = "/keatest-module:main/leafref-i8";
+ elem = Element::create(string("9"));
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Leafref));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Leafref, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->stringValue(), string(data_node->asTerm().valueStr()));
+
+ // Leafref.
+ xpath = "/keatest-module:main/leafref-raw";
+ elem = Element::create(string("ff012345"));
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Leafref));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Leafref, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->stringValue(), string(data_node->asTerm().valueStr()));
+
+ // Leafref.
+ xpath = "/keatest-module:main/leafref-string";
+ elem = Element::create(string("string through"));
+ EXPECT_NO_THROW_LOG(t_obj->setItem(xpath, elem, LeafBaseType::Leafref));
+ EXPECT_NO_THROW_LOG(data_node = sess.getData(xpath));
+ ASSERT_TRUE(data_node);
+ EXPECT_NO_THROW_LOG(data_node = data_node->findPath(xpath));
+ ASSERT_TRUE(data_node);
+ ASSERT_EQ(LeafBaseType::Leafref, data_node->schema().asLeaf().valueType().base());
+ EXPECT_EQ(elem->stringValue(), string(data_node->asTerm().valueStr()));
+
// Bad xpath.
xpath = "/keatest-module:main/no_such_string";
elem = Element::create(string("str"));
storage->set(name, x);
}
+Translator::Deserializer
+Translator::initializeDeserializer() {
+ Deserializer result;
+
+ result.emplace(LeafBaseType::Binary, [](string const& value) -> ElementPtr const {
+ return Element::create(decode64(value));
+ });
+
+ for (LeafBaseType const& i :
+ {LeafBaseType::Bool, LeafBaseType::Dec64, LeafBaseType::Int8, LeafBaseType::Int16,
+ LeafBaseType::Int32, LeafBaseType::Int64, LeafBaseType::Uint8, LeafBaseType::Uint16,
+ LeafBaseType::Uint32, LeafBaseType::Uint64}) {
+ result.emplace(i, [](string const& value) -> ElementPtr const {
+ return Element::fromJSON(value);
+ });
+ }
+
+ // The rest of YANG values can be expressed as strings.
+ for (LeafBaseType const& i :
+ {LeafBaseType::Bits, LeafBaseType::Empty, LeafBaseType::Enum, LeafBaseType::IdentityRef,
+ LeafBaseType::InstanceIdentifier, LeafBaseType::Leafref, LeafBaseType::String,
+ LeafBaseType::Union, LeafBaseType::Unknown}) {
+ result.emplace(i, [](string const& value) -> ElementPtr const {
+ return Element::create(value);
+ });
+ }
+
+ return result;
+}
+
+Translator::Serializer
+Translator::initializeSerializer() {
+ Serializer result;
+
+ result.emplace(LeafBaseType::Binary, [](string const& value) -> string const {
+ return encode64(value);
+ });
+
+ // The rest of YANG values can be expressed directly.
+ for (LeafBaseType const& i :
+ {LeafBaseType::Bits, LeafBaseType::Bool, LeafBaseType::Dec64, LeafBaseType::Empty,
+ LeafBaseType::Enum, LeafBaseType::IdentityRef, LeafBaseType::InstanceIdentifier,
+ LeafBaseType::Int8, LeafBaseType::Int16, LeafBaseType::Int32, LeafBaseType::Int64,
+ LeafBaseType::Leafref, LeafBaseType::String, LeafBaseType::Uint8, LeafBaseType::Uint16,
+ LeafBaseType::Uint32, LeafBaseType::Uint64, LeafBaseType::Union, LeafBaseType::Unknown}) {
+ result.emplace(i, [](string const& value) -> string const {
+ return value;
+ });
+ }
+
+ return result;
+}
+
void
Translator::setItem(const string& xpath, ConstElementPtr elem,
LeafBaseType type) {
NodeType const node_type(data_node->schema().nodeType());
if (node_type == NodeType::Leaf || node_type == NodeType::Leaflist) {
DataNodeTerm const& leaf(data_node->asTerm());
- Value const& v(leaf.value());
- if (holds_alternative<string>(v) ||
- holds_alternative<Enum>(v) ||
- holds_alternative<IdentityRef>(v)) {
- // Should be a string. Call create(). Should be slightly faster
- // than wrapping value in double quotes and calling fromJSON().
- return Element::create(string(leaf.valueStr()));
- } else if (holds_alternative<Binary>(v)) {
- return Element::create(decode64(string(leaf.valueStr())));
+ LeafBaseType type;
+ if (node_type == NodeType::Leaf) {
+ type = leaf.schema().asLeaf().valueType().base();
} else {
- // This can be various types so defer to fromJSON().
- return Element::fromJSON(string(leaf.valueStr()));
+ type = leaf.schema().asLeafList().valueType().base();
}
+
+ static Deserializer deserializer(initializeDeserializer());
+ return deserializer.at(type)(string(leaf.valueStr()));
}
return ElementPtr();
}
optional<string>
Translator::translateToYang(ConstElementPtr const& element,
- LeafBaseType const type) {
+ libyang::LeafBaseType const type) {
+ string string_representation;
if (!element) {
// A null ElementPtr is how we signal that this item requires no value.
// Useful when setting YANG lists which is the only way to set their
} else if (element->getType() == Element::list) {
/// @todo: implement
isc_throw(NotImplemented, "Translator::value(): list element");
- }
- if (type == LeafBaseType::Enum ||
- type == LeafBaseType::String ||
- type == LeafBaseType::Union ||
- type == LeafBaseType::IdentityRef) {
- // These types are usually strings in ElementPtr, but are accepted
- // without the double quotes in sysrepo, so get the stringValue().
- if (element->getType() == Element::string) {
- return element->stringValue();
- } else {
- // Except for some nodes which are maps e.g. user-context. And also Unions and
- // IdentityRefs can very well have underlying types that are different than strings.
- // Use the generic str() for those.
- return element->str();
- }
- } else if (type == LeafBaseType::Binary) {
- return encode64(element->stringValue());
+ } else if (element->getType() == Element::string) {
+ // If it's a string, get the variant wthout quotes.
+ string_representation = element->stringValue();
} else {
- // The rest of YANG values can be expressed using the
- // general string representation of ElementPtr.
- return element->str();
+ // If it's not a string, also get the variant without quotes, but it's a different method.
+ string_representation = element->str();
}
+
+ static Serializer serializer(initializeSerializer());
+ return serializer.at(type)(string_representation);
}
} // namespace yang