diff --git a/src/viam/sdk/resource/resource_api.cpp b/src/viam/sdk/resource/resource_api.cpp index 3fb340105..d7219ac4d 100644 --- a/src/viam/sdk/resource/resource_api.cpp +++ b/src/viam/sdk/resource/resource_api.cpp @@ -191,12 +191,28 @@ const API& RPCSubtype::api() const { ModelFamily::ModelFamily(std::string namespace_, std::string family) : namespace_(std::move(namespace_)), family_(std::move(family)) {} +const std::string& ModelFamily::get_namespace() const { + return namespace_; +} + +const std::string& ModelFamily::family() const { + return family_; +} + Model::Model(ModelFamily model_family, std::string model_name) : model_family_(std::move(model_family)), model_name_(std::move(model_name)) {} Model::Model(std::string namespace_, std::string family, std::string model_name) : Model(ModelFamily(std::move(namespace_), std::move(family)), std::move(model_name)) {} +const ModelFamily& Model::model_family() const { + return model_family_; +} + +const std::string& Model::model_name() const { + return model_name_; +} + Model Model::from_str(std::string model) { if (std::regex_match(model, MODEL_REGEX)) { std::vector model_parts; diff --git a/src/viam/sdk/resource/resource_api.hpp b/src/viam/sdk/resource/resource_api.hpp index 7c7db218f..fc4fa21a9 100644 --- a/src/viam/sdk/resource/resource_api.hpp +++ b/src/viam/sdk/resource/resource_api.hpp @@ -113,6 +113,10 @@ class RPCSubtype { class ModelFamily { public: ModelFamily(std::string namespace_, std::string family); + + const std::string& get_namespace() const; + const std::string& family() const; + std::string to_string() const; private: @@ -124,12 +128,15 @@ class ModelFamily { /// @brief Defines the namespace_, family, and name for a particular resource model. class Model { public: - std::string to_string() const; - Model(std::string namespace_, std::string family, std::string model_name); Model(ModelFamily model, std::string model_name); Model(); + const ModelFamily& model_family() const; + const std::string& model_name() const; + + std::string to_string() const; + /// @brief Parses a single model string into a Model, using default values for namespace and /// family if not provided. /// diff --git a/src/viam/sdk/tests/test_resource.cpp b/src/viam/sdk/tests/test_resource.cpp index 0fef864e4..8a1b167e2 100644 --- a/src/viam/sdk/tests/test_resource.cpp +++ b/src/viam/sdk/tests/test_resource.cpp @@ -77,20 +77,32 @@ BOOST_AUTO_TEST_CASE(test_name) { BOOST_AUTO_TEST_CASE(test_model) { ModelFamily mf("ns", "mf"); BOOST_CHECK_EQUAL(mf.to_string(), "ns:mf"); + BOOST_CHECK_EQUAL(mf.get_namespace(), "ns"); + BOOST_CHECK_EQUAL(mf.family(), "mf"); Model model1(mf, "model1"); BOOST_CHECK_EQUAL(model1.to_string(), "ns:mf:model1"); + BOOST_CHECK_EQUAL(model1.model_family().to_string(), "ns:mf"); + BOOST_CHECK_EQUAL(model1.model_name(), "model1"); Model model2("ns", "mf", "model2"); BOOST_CHECK_EQUAL(model2.to_string(), "ns:mf:model2"); + BOOST_CHECK_EQUAL(model2.model_family().to_string(), "ns:mf"); + BOOST_CHECK_EQUAL(model2.model_name(), "model2"); Model model3 = Model::from_str("ns:mf:model3"); BOOST_CHECK_EQUAL(model3.to_string(), "ns:mf:model3"); + BOOST_CHECK_EQUAL(model3.model_family().to_string(), "ns:mf"); + BOOST_CHECK_EQUAL(model3.model_name(), "model3"); Model model4 = Model::from_str("model4"); BOOST_CHECK_EQUAL(model4.to_string(), "rdk:builtin:model4"); + BOOST_CHECK_EQUAL(model4.model_family().to_string(), "rdk:builtin"); + BOOST_CHECK_EQUAL(model4.model_name(), "model4"); ModelFamily empty("", ""); Model model5(empty, "model5"); BOOST_CHECK_EQUAL(model5.to_string(), "model5"); + BOOST_CHECK_EQUAL(model5.model_family().to_string(), ""); + BOOST_CHECK_EQUAL(model5.model_name(), "model5"); BOOST_CHECK_THROW(Model::from_str("@"), Exception); }