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

#ifndef PERIDOT_LIB_MODULAR_CONFIG_MODULAR_CONFIG_XDR_H_
#define PERIDOT_LIB_MODULAR_CONFIG_MODULAR_CONFIG_XDR_H_

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

#include "peridot/lib/fidl/json_xdr.h"

namespace modular {

// Serialization and deserialization of
// fuchsia::modular::session::BasemgrConfig to and from JSON
void XdrBasemgrConfig_v1(XdrContext* const xdr,
                         fuchsia::modular::session::BasemgrConfig* const data);

void XdrSessionmgrConfig_v1(
    XdrContext* const xdr,
    fuchsia::modular::session::SessionmgrConfig* const data);

constexpr XdrFilterType<fuchsia::modular::session::BasemgrConfig>
    XdrBasemgrConfig[] = {
        XdrBasemgrConfig_v1,
        nullptr,
};

constexpr XdrFilterType<fuchsia::modular::session::SessionmgrConfig>
    XdrSessionmgrConfig[] = {
        XdrSessionmgrConfig_v1,
        nullptr,
};

}  // namespace modular

#endif  // PERIDOT_LIB_MODULAR_CONFIG_MODULAR_CONFIG_XDR_H_