Line data Source code
1 : /*! 2 : * \file esys/repo/manifest/depends_manifest.cpp 3 : * \brief Repository depends edge (ADR-0022) 4 : * 5 : * \cond 6 : * __legal_b__ 7 : * 8 : * Copyright (c) 2026 Michel Gillet 9 : * Distributed under the MIT License. 10 : * (See accompanying file LICENSE.txt or 11 : * copy at https://opensource.org/licenses/MIT) 12 : * 13 : * __legal_e__ 14 : * \endcond 15 : * 16 : */ 17 : 18 : #include "esys/repo/esysrepo_prec.h" 19 : #include "esys/repo/manifest/depends.h" 20 : 21 : #include <sstream> 22 : 23 : namespace esys::repo::manifest 24 : { 25 : 26 7 : Depends::Depends() = default; 27 : 28 7 : Depends::~Depends() = default; 29 : 30 7 : void Depends::set_selector(DependsSelector selector) 31 : { 32 7 : m_selector = selector; 33 7 : } 34 : 35 26 : DependsSelector Depends::get_selector() const 36 : { 37 26 : return m_selector; 38 : } 39 : 40 7 : void Depends::set_value(const std::string &value) 41 : { 42 7 : m_value = value; 43 7 : } 44 : 45 25 : const std::string &Depends::get_value() const 46 : { 47 25 : return m_value; 48 : } 49 : 50 6 : void Depends::set_resolved_path(const std::string &path) 51 : { 52 6 : m_resolved_path = path; 53 6 : } 54 : 55 26 : const std::string &Depends::get_resolved_path() const 56 : { 57 26 : return m_resolved_path; 58 : } 59 : 60 7 : void Depends::set_line_number(int line_number) 61 : { 62 7 : m_line_number = line_number; 63 7 : } 64 : 65 1 : int Depends::get_line_number() const 66 : { 67 1 : return m_line_number; 68 : } 69 : 70 0 : void Depends::clear() 71 : { 72 0 : m_selector = DependsSelector::NOT_SET; 73 0 : m_value.clear(); 74 0 : m_resolved_path.clear(); 75 0 : m_line_number = -1; 76 0 : } 77 : 78 0 : bool Depends::operator==(const Depends &other) const 79 : { 80 0 : return get_selector() == other.get_selector() && get_value() == other.get_value() 81 0 : && get_resolved_path() == other.get_resolved_path(); 82 : } 83 : 84 0 : bool Depends::operator!=(const Depends &other) const 85 : { 86 0 : return !operator==(other); 87 : } 88 : 89 10 : std::string to_string(DependsSelector selector) 90 : { 91 10 : switch (selector) 92 : { 93 10 : case DependsSelector::PATH: return "path"; 94 0 : case DependsSelector::NAME: return "name"; 95 0 : case DependsSelector::PROJECT: return "project"; 96 0 : case DependsSelector::URL: return "url"; 97 0 : default: return ""; 98 : } 99 : } 100 : 101 0 : bool depends_selector_from_string(const std::string &text, DependsSelector &selector) 102 : { 103 0 : if (text == "path") 104 : { 105 0 : selector = DependsSelector::PATH; 106 0 : return true; 107 : } 108 0 : if (text == "name") 109 : { 110 0 : selector = DependsSelector::NAME; 111 0 : return true; 112 : } 113 0 : if (text == "project") 114 : { 115 0 : selector = DependsSelector::PROJECT; 116 0 : return true; 117 : } 118 0 : if (text == "url") 119 : { 120 0 : selector = DependsSelector::URL; 121 0 : return true; 122 : } 123 0 : selector = DependsSelector::NOT_SET; 124 0 : return false; 125 : } 126 : 127 7 : std::string format_depends_element(const Depends &edge) 128 : { 129 7 : std::ostringstream oss; 130 7 : oss << "<depends"; 131 7 : const std::string sel = to_string(edge.get_selector()); 132 7 : if (!sel.empty()) oss << " " << sel << "=\"" << edge.get_value() << "\""; 133 7 : oss << ">"; 134 14 : return oss.str(); 135 7 : } 136 : 137 : } // namespace esys::repo::manifest