// Copyright 2018 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.

#include "peridot/bin/ledger/p2p_sync/impl/flatbuffer_message_factory.h"

#include "peridot/lib/convert/convert.h"

namespace p2p_sync {

void CreateUnknownResponseMessage(flatbuffers::FlatBufferBuilder* buffer,
                                  fxl::StringView namespace_id,
                                  fxl::StringView page_id,
                                  ResponseStatus status) {
  flatbuffers::Offset<NamespacePageId> namespace_page_id_offset =
      CreateNamespacePageId(*buffer,
                            convert::ToFlatBufferVector(buffer, namespace_id),
                            convert::ToFlatBufferVector(buffer, page_id));
  flatbuffers::Offset<Response> response =
      CreateResponse(*buffer, status, namespace_page_id_offset);
  flatbuffers::Offset<Message> message =
      CreateMessage(*buffer, MessageUnion_Response, response.Union());
  buffer->Finish(message);
}
}  // namespace p2p_sync
