15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef DBUS_OBJECT_PATH_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DBUS_OBJECT_PATH_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <iosfwd>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/dbus_export.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dbus {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ObjectPath is a type used to distinguish D-Bus object paths from simple
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// strings, especially since normal practice is that these should be only
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// initialized from static constants or obtained from remote objects and no
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// assumptions about their value made.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CHROME_DBUS_EXPORT ObjectPath {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Permit initialization without a value for passing to
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // dbus::MessageReader::PopObjectPath to fill in and from std::string
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // objects.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The compiler synthesised copy constructor and assignment operator are
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sufficient for our needs, as is implicit initialization of a std::string
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // from a string constant.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObjectPath() {}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ObjectPath(const std::string& value) : value_(value) {}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Retrieves value as a std::string.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& value() const { return value_; }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the value is a valid object path.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsValid() const;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Permit sufficient comparison to allow an ObjectPath to be used as a
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // key in a std::map.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool operator<(const ObjectPath&) const;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Permit testing for equality, required for mocks to work and useful for
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // observers.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool operator==(const ObjectPath&) const;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool operator!=(const ObjectPath&) const;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private:
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string value_;
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This is required by gtest to print a readable output on test failures.
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)CHROME_DBUS_EXPORT void PrintTo(const ObjectPath& path, std::ostream* out);
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace dbus
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // DBUS_OBJECT_PATH_H_
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)