// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIB_CONTEXT_CPP_FORMATTING_H_
#define LIB_CONTEXT_CPP_FORMATTING_H_

#include <fuchsia/modular/cpp/fidl.h>

namespace fuchsia {
namespace modular {

std::ostream& operator<<(std::ostream& os, const FocusedState& state);
std::ostream& operator<<(std::ostream& os, const StoryMetadata& meta);
std::ostream& operator<<(std::ostream& os, const ModuleMetadata& meta);
std::ostream& operator<<(std::ostream& os, const EntityMetadata& meta);
std::ostream& operator<<(std::ostream& os, const LinkMetadata& meta);
std::ostream& operator<<(std::ostream& os, const ContextMetadata& meta);

std::ostream& operator<<(std::ostream& os, const ContextValue& value);
std::ostream& operator<<(std::ostream& os, const ContextSelector& selector);

std::ostream& operator<<(std::ostream& os, const ContextUpdate& update);
std::ostream& operator<<(std::ostream& os, const ContextQuery& query);

}  // namespace modular
}  // namespace fuchsia

#endif  // LIB_CONTEXT_CPP_FORMATTING_H_
