#include "v1_0/types.h"
#include <hdf_core_log.h>
#include <message_parcel.h>
#include <securec.h>

bool FooInfoBlockMarshalling(OHOS::MessageParcel& data, const OHOS::HDI::Foo::V1_0::FooInfo& dataBlock)
{
    if (!data.WriteUint32(dataBlock.id)) {
        HDF_LOGE("%{public}s: write dataBlock.id failed!", __func__);
        return false;
    }

    if (!data.WriteCString(dataBlock.name.c_str())) {
        HDF_LOGE("%{public}s: write dataBlock.name failed!", __func__);
        return false;
    }

    if (!data.WriteUint64(static_cast<uint64_t>(dataBlock.type))) {
        HDF_LOGE("%{public}s: write dataBlock.type failed!", __func__);
        return false;
    }
    return true;
}

bool FooInfoBlockUnmarshalling(OHOS::MessageParcel& data, OHOS::HDI::Foo::V1_0::FooInfo& dataBlock)
{
    if (!data.ReadUint32(dataBlock.id)) {
        HDF_LOGE("%{public}s: read dataBlock.id failed!", __func__);
        return false;
    }

    const char* nameCp = data.ReadCString();
    if (nameCp == nullptr) {
        HDF_LOGE("%{public}s: read nameCp failed", __func__);
        return false;
    }
    dataBlock.name = nameCp;

    {
        uint64_t enumTmp = 0;
        if (!data.ReadUint64(enumTmp)) {
            HDF_LOGE("%{public}s: write dataBlock.type failed!", __func__);
            return false;
        }
        dataBlock.type = static_cast<enum FooType>(enumTmp);
    }
    return true;
}