chromium/components/sync/mojom/syncer_mojom_traits.h

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_SYNC_MOJOM_SYNCER_MOJOM_TRAITS_H_
#define COMPONENTS_SYNC_MOJOM_SYNCER_MOJOM_TRAITS_H_

#include <string>

#include "base/containers/span.h"
#include "components/sync/model/string_ordinal.h"
#include "components/sync/mojom/syncer.mojom-shared.h"

namespace mojo {

template <>
struct StructTraits<syncer::mojom::StringOrdinalDataView,
                    syncer::StringOrdinal> {
  static base::span<const uint8_t> bytes(const syncer::StringOrdinal& ordinal) {
    return base::as_byte_span(ordinal.bytes_);
  }

  static bool Read(syncer::mojom::StringOrdinalDataView data,
                   syncer::StringOrdinal* out) {
    mojo::ArrayDataView<uint8_t> bytes;
    data.GetBytesDataView(&bytes);
    *out = syncer::StringOrdinal(std::string(base::as_string_view(bytes)));
    return true;
  }
};

}  // namespace mojo

#endif  // COMPONENTS_SYNC_MOJOM_SYNCER_MOJOM_TRAITS_H_