// Copyright 2016 The Chromium 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 CHROME_CHROME_CLEANER_INTERFACES_PUP_MOJOM_SHARED_INTERNAL_H_
#define CHROME_CHROME_CLEANER_INTERFACES_PUP_MOJOM_SHARED_INTERNAL_H_

#include "mojo/public/cpp/bindings/lib/array_internal.h"
#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
#include "mojo/public/cpp/bindings/lib/map_data_internal.h"
#include "mojo/public/cpp/bindings/lib/buffer.h"
#include "components/chrome_cleaner/public/interfaces/chrome_prompt.mojom-shared-internal.h"
#include "mojo/public/cpp/bindings/lib/native_enum_data.h"
#include "mojo/public/interfaces/bindings/native_struct.mojom-shared-internal.h"

#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif

namespace mojo {
namespace internal {
class ValidationContext;
}
}
namespace chrome_cleaner {
namespace mojom {
namespace internal {
class TraceLocation_Data;
class FileInfo_Data;
class PUP_Data;

#pragma pack(push, 1)
class  TraceLocation_Data {
 public:
  class BufferWriter {
   public:
    BufferWriter() = default;

    void Allocate(mojo::internal::Buffer* serialization_buffer) {
      serialization_buffer_ = serialization_buffer;
      index_ = serialization_buffer_->Allocate(sizeof(TraceLocation_Data));
      new (data()) TraceLocation_Data();
    }

    bool is_null() const { return !serialization_buffer_; }
    TraceLocation_Data* data() {
      DCHECK(!is_null());
      return serialization_buffer_->Get<TraceLocation_Data>(index_);
    }
    TraceLocation_Data* operator->() { return data(); }

   private:
    mojo::internal::Buffer* serialization_buffer_ = nullptr;
    size_t index_ = 0;

    DISALLOW_COPY_AND_ASSIGN(BufferWriter);
  };

  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  int32_t value;
  uint8_t padfinal_[4];

 private:
  TraceLocation_Data();
  ~TraceLocation_Data() = delete;
};
static_assert(sizeof(TraceLocation_Data) == 16,
              "Bad sizeof(TraceLocation_Data)");
// Used by TraceLocation::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct TraceLocation_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  TraceLocation_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~TraceLocation_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::internal::SerializationContext* context,
                 mojo::internal::Buffer* buffer) override {
    TraceLocation_Data::BufferWriter writer;
    mojo::internal::Serialize<DataView>(user_data_, buffer, &writer, context);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    TraceLocation_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class  FileInfo_Data {
 public:
  class BufferWriter {
   public:
    BufferWriter() = default;

    void Allocate(mojo::internal::Buffer* serialization_buffer) {
      serialization_buffer_ = serialization_buffer;
      index_ = serialization_buffer_->Allocate(sizeof(FileInfo_Data));
      new (data()) FileInfo_Data();
    }

    bool is_null() const { return !serialization_buffer_; }
    FileInfo_Data* data() {
      DCHECK(!is_null());
      return serialization_buffer_->Get<FileInfo_Data>(index_);
    }
    FileInfo_Data* operator->() { return data(); }

   private:
    mojo::internal::Buffer* serialization_buffer_ = nullptr;
    size_t index_ = 0;

    DISALLOW_COPY_AND_ASSIGN(BufferWriter);
  };

  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  mojo::internal::Pointer<mojo::internal::Array_Data<mojo::internal::Pointer<internal::TraceLocation_Data>>> found_in;

 private:
  FileInfo_Data();
  ~FileInfo_Data() = delete;
};
static_assert(sizeof(FileInfo_Data) == 16,
              "Bad sizeof(FileInfo_Data)");
// Used by FileInfo::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct FileInfo_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  FileInfo_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~FileInfo_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::internal::SerializationContext* context,
                 mojo::internal::Buffer* buffer) override {
    FileInfo_Data::BufferWriter writer;
    mojo::internal::Serialize<DataView>(user_data_, buffer, &writer, context);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    FileInfo_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class  PUP_Data {
 public:
  class BufferWriter {
   public:
    BufferWriter() = default;

    void Allocate(mojo::internal::Buffer* serialization_buffer) {
      serialization_buffer_ = serialization_buffer;
      index_ = serialization_buffer_->Allocate(sizeof(PUP_Data));
      new (data()) PUP_Data();
    }

    bool is_null() const { return !serialization_buffer_; }
    PUP_Data* data() {
      DCHECK(!is_null());
      return serialization_buffer_->Get<PUP_Data>(index_);
    }
    PUP_Data* operator->() { return data(); }

   private:
    mojo::internal::Buffer* serialization_buffer_ = nullptr;
    size_t index_ = 0;

    DISALLOW_COPY_AND_ASSIGN(BufferWriter);
  };

  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  mojo::internal::Pointer<mojo::internal::Array_Data<mojo::internal::Pointer<::chrome_cleaner::mojom::internal::FilePath_Data>>> expanded_disk_footprints;
  mojo::internal::Pointer<mojo::internal::Map_Data<mojo::internal::Pointer<::chrome_cleaner::mojom::internal::FilePath_Data>, mojo::internal::Pointer<internal::FileInfo_Data>>> disk_footprints_info;

 private:
  PUP_Data();
  ~PUP_Data() = delete;
};
static_assert(sizeof(PUP_Data) == 24,
              "Bad sizeof(PUP_Data)");
// Used by PUP::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct PUP_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  PUP_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~PUP_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::internal::SerializationContext* context,
                 mojo::internal::Buffer* buffer) override {
    PUP_Data::BufferWriter writer;
    mojo::internal::Serialize<DataView>(user_data_, buffer, &writer, context);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    PUP_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};

#pragma pack(pop)

}  // namespace internal
}  // namespace mojom
}  // namespace chrome_cleaner

#endif  // CHROME_CHROME_CLEANER_INTERFACES_PUP_MOJOM_SHARED_INTERNAL_H_
/* Metadata comment
eyJtZXRhIjogW10sICJ0eXBlIjogImt5dGhlMCJ9
*/