#pragma once #include #include class Source { public: Source(const std::string& path); Source(const std::string& path, const std::string& target); Source(const std::string& path, const std::string& target, const std::string& name); Source(const std::string& path, const std::optional& target, const std::optional& name); std::string getPath() const; std::string getTarget() const; std::string getName() const; std::optional getOptionalTarget() const; std::optional getOptionalName() const; void setPath(const std::string& path); void setTarget(const std::string& target); void setName(const std::string& name); std::string print() const; void clearTarget(); void clearName(); bool hasExplicitTarget() const; bool hasExplicitName() const; bool operator < (const Source& other) const; private: std::string path; std::optional target; std::optional name; };