// This file is generated by FrontendChannel_h.template.

// Copyright 2016 The Chromium 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 {{"_".join(config.protocol.namespace)}}_FrontendChannel_h
#define {{"_".join(config.protocol.namespace)}}_FrontendChannel_h

#include "{{config.crdtp.dir}}/serializable.h"

{% for namespace in config.protocol.namespace %}
namespace {{namespace}} {
{% endfor %}

using {{config.crdtp.namespace}}::Serializable;

class {{config.lib.export_macro}} FrontendChannel {
public:
    virtual ~FrontendChannel() { }
    virtual void sendProtocolResponse(int callId, std::unique_ptr<Serializable> message) = 0;
    virtual void sendProtocolNotification(std::unique_ptr<Serializable> message) = 0;
    virtual void fallThrough(int callId, const String& method, const ProtocolMessage& message) = 0;
    virtual void flushProtocolNotifications() = 0;
};

{% for namespace in config.protocol.namespace %}
} // namespace {{namespace}}
{% endfor %}

#endif // !defined({{"_".join(config.protocol.namespace)}}_FrontendChannel_h)
