/*
 *
 *    Copyright (c) 2017 Nest Labs, Inc.
 *    All rights reserved.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
#include <nest/test/trait/UnionAStructSchema.h>

namespace Schema {
namespace Nest {
namespace Test {
namespace Trait {

    const nl::FieldDescriptor UnionAFieldDescriptors[] =
    {
    };

    const nl::SchemaFieldDescriptor UnionA::FieldSchema =
    {
        .mNumFieldDescriptorElements = sizeof(UnionAFieldDescriptors)/sizeof(UnionAFieldDescriptors[0]),
        .mFields = UnionAFieldDescriptors,
        .mSize = sizeof(UnionA)
    };
}
}
}
}
