blob: 69a0b22b874d8a399cf73ec403aad9c6d7c0b788 [file] [log] [blame]
// Copyright 2019 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 "src/lib/fidl_codec/wire_parser.h"
#include "src/lib/fidl_codec/wire_object.h"
#include "src/lib/fidl_codec/wire_types.h"
namespace fidl_codec {
namespace {
// Takes a Message which holds either a request or a response and extracts a
// JSON object which represents the message. The format of the message is
// specified by str.
// Returns true on success, false on failure.
bool DecodeMessage(const Struct& str, const uint8_t* bytes, uint32_t num_bytes,
const zx_handle_disposition_t* handles, uint32_t num_handles,
std::unique_ptr<StructValue>* decoded_object,
std::ostream& error_stream) {
MessageDecoder decoder(bytes, num_bytes, handles, num_handles, error_stream);
*decoded_object = decoder.DecodeMessage(str);
return !decoder.HasError();
}
} // anonymous namespace
bool DecodeRequest(const InterfaceMethod* method, const uint8_t* bytes, uint32_t num_bytes,
const zx_handle_disposition_t* handles, uint32_t num_handles,
std::unique_ptr<StructValue>* decoded_object,
std::ostream& error_stream) {
if (method->request() == nullptr) {
return false;
}
return DecodeMessage(*method->request(), bytes, num_bytes, handles, num_handles,
decoded_object, error_stream);
}
bool DecodeResponse(const InterfaceMethod* method, const uint8_t* bytes, uint32_t num_bytes,
const zx_handle_disposition_t* handles, uint32_t num_handles,
std::unique_ptr<StructValue>* decoded_object,
std::ostream& error_stream) {
if (method->response() == nullptr) {
return false;
}
return DecodeMessage(*method->response(), bytes, num_bytes, handles, num_handles,
decoded_object, error_stream);
}
} // namespace fidl_codec