blob: ad67166169125be5d605da52b570e92e01409dd7 [file] [log] [blame]
// 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/lib/module_manifest/module_manifest_xdr.h"
namespace modular {
namespace {
void XdrParameterConstraint(XdrContext* const xdr,
fuchsia::modular::ParameterConstraint* const data) {
xdr->Field("name", &data->name);
xdr->Field("type", &data->type);
}
void XdrModuleManifestIntentFilters(
XdrContext* const xdr, fuchsia::modular::IntentFilter* const data) {
xdr->Field("action", &data->action);
xdr->Field("parameters", &data->parameter_constraints,
XdrParameterConstraint);
}
} // namespace
void XdrModuleManifest_v1(XdrContext* const xdr,
fuchsia::modular::ModuleManifest* const data) {
xdr->Field("binary", &data->binary);
xdr->Field("suggestion_headline", &data->suggestion_headline);
xdr->Field("composition_pattern", &data->composition_pattern);
// Version 2 supports multiple actions using the "intent_filters" field. This
// version supports just one with "action" and "parameters" fields, so we
// put those in "IntentFilter[0]".
data->intent_filters->resize(1);
xdr->Field("action", &data->intent_filters->at(0).action);
xdr->Field("parameters", &data->intent_filters->at(0).parameter_constraints,
XdrParameterConstraint);
}
void XdrModuleManifest_v2(XdrContext* const xdr,
fuchsia::modular::ModuleManifest* const data) {
if (!xdr->Version(2)) {
return;
}
xdr->Field("binary", &data->binary);
xdr->Field("suggestion_headline", &data->suggestion_headline);
xdr->Field("composition_pattern", &data->composition_pattern);
xdr->Field("intent_filters", &data->intent_filters,
XdrModuleManifestIntentFilters);
xdr->Field("placeholder_color", &data->placeholder_color);
}
// New nullable fields may be added to latest version (i.e., no need to do a
// version bump). Removing old fields needs a new version, in which case all xdr
// filter for previous versions should be updated to provide a polyfill.
extern const XdrFilterType<fuchsia::modular::ModuleManifest>
XdrModuleManifest[] = {
XdrModuleManifest_v2,
XdrModuleManifest_v1,
nullptr,
};
} // namespace modular