blob: 82701166acad6fbe23c277ffe0255265a7fc27df [file] [log] [blame]
// Copyright 2013 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 SERVICES_DEVICE_PUBLIC_MOJOM_SERIAL_MOJOM_H_
#define SERVICES_DEVICE_PUBLIC_MOJOM_SERIAL_MOJOM_H_
#include <stdint.h>
#include <limits>
#include <type_traits>
#include <utility>
#include "base/callback.h"
#include "base/macros.h"
#include "base/optional.h"
#include "mojo/public/cpp/bindings/mojo_buildflags.h"
#if BUILDFLAG(MOJO_TRACE_ENABLED)
#include "base/trace_event/trace_event.h"
#endif
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"
#include "services/device/public/mojom/serial.mojom-shared.h"
#include "services/device/public/mojom/serial.mojom-forward.h"
#include "mojo/public/mojom/base/file_path.mojom.h"
#include "mojo/public/mojom/base/unguessable_token.mojom.h"
#include <string>
#include <vector>
#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
#include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
#include "mojo/public/cpp/bindings/associated_interface_request.h"
#include "mojo/public/cpp/bindings/interface_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
#include "mojo/public/cpp/bindings/lib/native_enum_serialization.h"
#include "mojo/public/cpp/bindings/lib/native_struct_serialization.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace device {
namespace mojom {
class SerialPortManagerProxy;
template <typename ImplRefTraits>
class SerialPortManagerStub;
class SerialPortManagerRequestValidator;
class SerialPortManagerResponseValidator;
// @generated_from: device.mojom.SerialPortManager
class SerialPortManager
: public SerialPortManagerInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
using Base_ = SerialPortManagerInterfaceBase;
using Proxy_ = SerialPortManagerProxy;
template <typename ImplRefTraits>
using Stub_ = SerialPortManagerStub<ImplRefTraits>;
using RequestValidator_ = SerialPortManagerRequestValidator;
using ResponseValidator_ = SerialPortManagerResponseValidator;
enum MethodMinVersions : uint32_t {
kGetDevicesMinVersion = 0,
kGetPortMinVersion = 0,
};
virtual ~SerialPortManager() {}
using GetDevicesCallback = base::OnceCallback<void(std::vector<SerialPortInfoPtr>)>;
// @generated_from: device.mojom.SerialPortManager.GetDevices
virtual void GetDevices(GetDevicesCallback callback) = 0;
// @generated_from: device.mojom.SerialPortManager.GetPort
virtual void GetPort(const base::UnguessableToken& token, SerialPortRequest port_request, SerialPortConnectionWatcherPtr watcher) = 0;
};
class SerialPortProxy;
template <typename ImplRefTraits>
class SerialPortStub;
class SerialPortRequestValidator;
class SerialPortResponseValidator;
// @generated_from: device.mojom.SerialPort
class SerialPort
: public SerialPortInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
using Base_ = SerialPortInterfaceBase;
using Proxy_ = SerialPortProxy;
template <typename ImplRefTraits>
using Stub_ = SerialPortStub<ImplRefTraits>;
using RequestValidator_ = SerialPortRequestValidator;
using ResponseValidator_ = SerialPortResponseValidator;
enum MethodMinVersions : uint32_t {
kOpenMinVersion = 0,
kClearSendErrorMinVersion = 0,
kClearReadErrorMinVersion = 0,
kFlushMinVersion = 0,
kGetControlSignalsMinVersion = 0,
kSetControlSignalsMinVersion = 0,
kConfigurePortMinVersion = 0,
kGetPortInfoMinVersion = 0,
kSetBreakMinVersion = 0,
kClearBreakMinVersion = 0,
};
virtual ~SerialPort() {}
using OpenCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.SerialPort.Open
virtual void Open(SerialConnectionOptionsPtr options, mojo::ScopedDataPipeConsumerHandle in_stream, mojo::ScopedDataPipeProducerHandle out_stream, SerialPortClientPtr client, OpenCallback callback) = 0;
// @generated_from: device.mojom.SerialPort.ClearSendError
virtual void ClearSendError(mojo::ScopedDataPipeConsumerHandle consumer) = 0;
// @generated_from: device.mojom.SerialPort.ClearReadError
virtual void ClearReadError(mojo::ScopedDataPipeProducerHandle producer) = 0;
using FlushCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.SerialPort.Flush
virtual void Flush(FlushCallback callback) = 0;
using GetControlSignalsCallback = base::OnceCallback<void(SerialPortControlSignalsPtr)>;
// @generated_from: device.mojom.SerialPort.GetControlSignals
virtual void GetControlSignals(GetControlSignalsCallback callback) = 0;
using SetControlSignalsCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.SerialPort.SetControlSignals
virtual void SetControlSignals(SerialHostControlSignalsPtr signals, SetControlSignalsCallback callback) = 0;
using ConfigurePortCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.SerialPort.ConfigurePort
virtual void ConfigurePort(SerialConnectionOptionsPtr options, ConfigurePortCallback callback) = 0;
using GetPortInfoCallback = base::OnceCallback<void(SerialConnectionInfoPtr)>;
// @generated_from: device.mojom.SerialPort.GetPortInfo
virtual void GetPortInfo(GetPortInfoCallback callback) = 0;
using SetBreakCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.SerialPort.SetBreak
virtual void SetBreak(SetBreakCallback callback) = 0;
using ClearBreakCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.SerialPort.ClearBreak
virtual void ClearBreak(ClearBreakCallback callback) = 0;
};
class SerialPortClientProxy;
template <typename ImplRefTraits>
class SerialPortClientStub;
class SerialPortClientRequestValidator;
// @generated_from: device.mojom.SerialPortClient
class SerialPortClient
: public SerialPortClientInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
using Base_ = SerialPortClientInterfaceBase;
using Proxy_ = SerialPortClientProxy;
template <typename ImplRefTraits>
using Stub_ = SerialPortClientStub<ImplRefTraits>;
using RequestValidator_ = SerialPortClientRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
kOnReadErrorMinVersion = 0,
kOnSendErrorMinVersion = 0,
};
virtual ~SerialPortClient() {}
// @generated_from: device.mojom.SerialPortClient.OnReadError
virtual void OnReadError(SerialReceiveError error) = 0;
// @generated_from: device.mojom.SerialPortClient.OnSendError
virtual void OnSendError(SerialSendError error) = 0;
};
class SerialPortConnectionWatcherProxy;
template <typename ImplRefTraits>
class SerialPortConnectionWatcherStub;
class SerialPortConnectionWatcherRequestValidator;
// @generated_from: device.mojom.SerialPortConnectionWatcher
class SerialPortConnectionWatcher
: public SerialPortConnectionWatcherInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
using Base_ = SerialPortConnectionWatcherInterfaceBase;
using Proxy_ = SerialPortConnectionWatcherProxy;
template <typename ImplRefTraits>
using Stub_ = SerialPortConnectionWatcherStub<ImplRefTraits>;
using RequestValidator_ = SerialPortConnectionWatcherRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
};
virtual ~SerialPortConnectionWatcher() {}
};
class SerialPortManagerProxy
: public SerialPortManager {
public:
using InterfaceType = SerialPortManager;
explicit SerialPortManagerProxy(mojo::MessageReceiverWithResponder* receiver);
void GetDevices(GetDevicesCallback callback) final;
void GetPort(const base::UnguessableToken& token, SerialPortRequest port_request, SerialPortConnectionWatcherPtr watcher) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class SerialPortProxy
: public SerialPort {
public:
using InterfaceType = SerialPort;
explicit SerialPortProxy(mojo::MessageReceiverWithResponder* receiver);
void Open(SerialConnectionOptionsPtr options, mojo::ScopedDataPipeConsumerHandle in_stream, mojo::ScopedDataPipeProducerHandle out_stream, SerialPortClientPtr client, OpenCallback callback) final;
void ClearSendError(mojo::ScopedDataPipeConsumerHandle consumer) final;
void ClearReadError(mojo::ScopedDataPipeProducerHandle producer) final;
void Flush(FlushCallback callback) final;
void GetControlSignals(GetControlSignalsCallback callback) final;
void SetControlSignals(SerialHostControlSignalsPtr signals, SetControlSignalsCallback callback) final;
void ConfigurePort(SerialConnectionOptionsPtr options, ConfigurePortCallback callback) final;
void GetPortInfo(GetPortInfoCallback callback) final;
void SetBreak(SetBreakCallback callback) final;
void ClearBreak(ClearBreakCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class SerialPortClientProxy
: public SerialPortClient {
public:
using InterfaceType = SerialPortClient;
explicit SerialPortClientProxy(mojo::MessageReceiverWithResponder* receiver);
void OnReadError(SerialReceiveError error) final;
void OnSendError(SerialSendError error) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class SerialPortConnectionWatcherProxy
: public SerialPortConnectionWatcher {
public:
using InterfaceType = SerialPortConnectionWatcher;
explicit SerialPortConnectionWatcherProxy(mojo::MessageReceiverWithResponder* receiver);
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class SerialPortManagerStubDispatch {
public:
static bool Accept(SerialPortManager* impl, mojo::Message* message);
static bool AcceptWithResponder(
SerialPortManager* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<SerialPortManager>>
class SerialPortManagerStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
SerialPortManagerStub() {}
~SerialPortManagerStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return SerialPortManagerStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return SerialPortManagerStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class SerialPortStubDispatch {
public:
static bool Accept(SerialPort* impl, mojo::Message* message);
static bool AcceptWithResponder(
SerialPort* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<SerialPort>>
class SerialPortStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
SerialPortStub() {}
~SerialPortStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return SerialPortStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return SerialPortStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class SerialPortClientStubDispatch {
public:
static bool Accept(SerialPortClient* impl, mojo::Message* message);
static bool AcceptWithResponder(
SerialPortClient* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<SerialPortClient>>
class SerialPortClientStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
SerialPortClientStub() {}
~SerialPortClientStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return SerialPortClientStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return SerialPortClientStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class SerialPortConnectionWatcherStubDispatch {
public:
static bool Accept(SerialPortConnectionWatcher* impl, mojo::Message* message);
static bool AcceptWithResponder(
SerialPortConnectionWatcher* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<SerialPortConnectionWatcher>>
class SerialPortConnectionWatcherStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
SerialPortConnectionWatcherStub() {}
~SerialPortConnectionWatcherStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return SerialPortConnectionWatcherStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return SerialPortConnectionWatcherStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class SerialPortManagerRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class SerialPortRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class SerialPortClientRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class SerialPortConnectionWatcherRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class SerialPortManagerResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class SerialPortResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
// @generated_from: device.mojom.SerialHostControlSignals
class SerialHostControlSignals {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<SerialHostControlSignals, T>::value>;
using DataView = SerialHostControlSignalsDataView;
using Data_ = internal::SerialHostControlSignals_Data;
template <typename... Args>
static SerialHostControlSignalsPtr New(Args&&... args) {
return SerialHostControlSignalsPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static SerialHostControlSignalsPtr From(const U& u) {
return mojo::TypeConverter<SerialHostControlSignalsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, SerialHostControlSignals>::Convert(*this);
}
SerialHostControlSignals();
SerialHostControlSignals(
bool dtr,
bool has_dtr,
bool rts,
bool has_rts);
~SerialHostControlSignals();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = SerialHostControlSignalsPtr>
SerialHostControlSignalsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, SerialHostControlSignals::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
size_t Hash(size_t seed) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
SerialHostControlSignals::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
SerialHostControlSignals::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::SerialHostControlSignals_UnserializedMessageContext<
UserType, SerialHostControlSignals::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<SerialHostControlSignals::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return SerialHostControlSignals::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::SerialHostControlSignals_UnserializedMessageContext<
UserType, SerialHostControlSignals::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<SerialHostControlSignals::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: device.mojom.SerialHostControlSignals.dtr
bool dtr;
// @generated_from: device.mojom.SerialHostControlSignals.has_dtr
bool has_dtr;
// @generated_from: device.mojom.SerialHostControlSignals.rts
bool rts;
// @generated_from: device.mojom.SerialHostControlSignals.has_rts
bool has_rts;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, SerialHostControlSignals::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, SerialHostControlSignals::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, SerialHostControlSignals::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, SerialHostControlSignals::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.SerialPortControlSignals
class SerialPortControlSignals {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<SerialPortControlSignals, T>::value>;
using DataView = SerialPortControlSignalsDataView;
using Data_ = internal::SerialPortControlSignals_Data;
template <typename... Args>
static SerialPortControlSignalsPtr New(Args&&... args) {
return SerialPortControlSignalsPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static SerialPortControlSignalsPtr From(const U& u) {
return mojo::TypeConverter<SerialPortControlSignalsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, SerialPortControlSignals>::Convert(*this);
}
SerialPortControlSignals();
SerialPortControlSignals(
bool dcd,
bool cts,
bool ri,
bool dsr);
~SerialPortControlSignals();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = SerialPortControlSignalsPtr>
SerialPortControlSignalsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, SerialPortControlSignals::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
size_t Hash(size_t seed) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
SerialPortControlSignals::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
SerialPortControlSignals::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::SerialPortControlSignals_UnserializedMessageContext<
UserType, SerialPortControlSignals::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<SerialPortControlSignals::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return SerialPortControlSignals::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::SerialPortControlSignals_UnserializedMessageContext<
UserType, SerialPortControlSignals::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<SerialPortControlSignals::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: device.mojom.SerialPortControlSignals.dcd
bool dcd;
// @generated_from: device.mojom.SerialPortControlSignals.cts
bool cts;
// @generated_from: device.mojom.SerialPortControlSignals.ri
bool ri;
// @generated_from: device.mojom.SerialPortControlSignals.dsr
bool dsr;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, SerialPortControlSignals::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, SerialPortControlSignals::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, SerialPortControlSignals::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, SerialPortControlSignals::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.SerialPortInfo
class SerialPortInfo {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<SerialPortInfo, T>::value>;
using DataView = SerialPortInfoDataView;
using Data_ = internal::SerialPortInfo_Data;
template <typename... Args>
static SerialPortInfoPtr New(Args&&... args) {
return SerialPortInfoPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static SerialPortInfoPtr From(const U& u) {
return mojo::TypeConverter<SerialPortInfoPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, SerialPortInfo>::Convert(*this);
}
SerialPortInfo();
SerialPortInfo(
const base::UnguessableToken& token,
const base::FilePath& path,
uint16_t vendor_id,
bool has_vendor_id,
uint16_t product_id,
bool has_product_id,
const base::Optional<std::string>& display_name);
~SerialPortInfo();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = SerialPortInfoPtr>
SerialPortInfoPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, SerialPortInfo::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
SerialPortInfo::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
SerialPortInfo::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::SerialPortInfo_UnserializedMessageContext<
UserType, SerialPortInfo::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<SerialPortInfo::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return SerialPortInfo::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::SerialPortInfo_UnserializedMessageContext<
UserType, SerialPortInfo::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<SerialPortInfo::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: device.mojom.SerialPortInfo.token
base::UnguessableToken token;
// @generated_from: device.mojom.SerialPortInfo.path
base::FilePath path;
// @generated_from: device.mojom.SerialPortInfo.vendor_id
uint16_t vendor_id;
// @generated_from: device.mojom.SerialPortInfo.has_vendor_id
bool has_vendor_id;
// @generated_from: device.mojom.SerialPortInfo.product_id
uint16_t product_id;
// @generated_from: device.mojom.SerialPortInfo.has_product_id
bool has_product_id;
// @generated_from: device.mojom.SerialPortInfo.display_name
base::Optional<std::string> display_name;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, SerialPortInfo::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, SerialPortInfo::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, SerialPortInfo::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, SerialPortInfo::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.SerialConnectionOptions
class SerialConnectionOptions {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<SerialConnectionOptions, T>::value>;
using DataView = SerialConnectionOptionsDataView;
using Data_ = internal::SerialConnectionOptions_Data;
template <typename... Args>
static SerialConnectionOptionsPtr New(Args&&... args) {
return SerialConnectionOptionsPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static SerialConnectionOptionsPtr From(const U& u) {
return mojo::TypeConverter<SerialConnectionOptionsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, SerialConnectionOptions>::Convert(*this);
}
SerialConnectionOptions();
SerialConnectionOptions(
uint32_t bitrate,
SerialDataBits data_bits,
SerialParityBit parity_bit,
SerialStopBits stop_bits,
bool cts_flow_control,
bool has_cts_flow_control);
~SerialConnectionOptions();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = SerialConnectionOptionsPtr>
SerialConnectionOptionsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, SerialConnectionOptions::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
size_t Hash(size_t seed) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
SerialConnectionOptions::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
SerialConnectionOptions::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::SerialConnectionOptions_UnserializedMessageContext<
UserType, SerialConnectionOptions::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<SerialConnectionOptions::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return SerialConnectionOptions::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::SerialConnectionOptions_UnserializedMessageContext<
UserType, SerialConnectionOptions::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<SerialConnectionOptions::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: device.mojom.SerialConnectionOptions.bitrate
uint32_t bitrate;
// @generated_from: device.mojom.SerialConnectionOptions.data_bits
SerialDataBits data_bits;
// @generated_from: device.mojom.SerialConnectionOptions.parity_bit
SerialParityBit parity_bit;
// @generated_from: device.mojom.SerialConnectionOptions.stop_bits
SerialStopBits stop_bits;
// @generated_from: device.mojom.SerialConnectionOptions.cts_flow_control
bool cts_flow_control;
// @generated_from: device.mojom.SerialConnectionOptions.has_cts_flow_control
bool has_cts_flow_control;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, SerialConnectionOptions::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, SerialConnectionOptions::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, SerialConnectionOptions::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, SerialConnectionOptions::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.SerialConnectionInfo
class SerialConnectionInfo {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<SerialConnectionInfo, T>::value>;
using DataView = SerialConnectionInfoDataView;
using Data_ = internal::SerialConnectionInfo_Data;
template <typename... Args>
static SerialConnectionInfoPtr New(Args&&... args) {
return SerialConnectionInfoPtr(
base::in_place, std::forward<Args>(args)...);
}
template <typename U>
static SerialConnectionInfoPtr From(const U& u) {
return mojo::TypeConverter<SerialConnectionInfoPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, SerialConnectionInfo>::Convert(*this);
}
SerialConnectionInfo();
SerialConnectionInfo(
uint32_t bitrate,
SerialDataBits data_bits,
SerialParityBit parity_bit,
SerialStopBits stop_bits,
bool cts_flow_control);
~SerialConnectionInfo();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = SerialConnectionInfoPtr>
SerialConnectionInfoPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, SerialConnectionInfo::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
size_t Hash(size_t seed) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
SerialConnectionInfo::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
SerialConnectionInfo::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::SerialConnectionInfo_UnserializedMessageContext<
UserType, SerialConnectionInfo::DataView>>(0, 0, std::move(input)));
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
return mojo::internal::DeserializeImpl<SerialConnectionInfo::DataView>(
data, data_num_bytes, std::vector<mojo::ScopedHandle>(), output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return SerialConnectionInfo::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::SerialConnectionInfo_UnserializedMessageContext<
UserType, SerialConnectionInfo::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<SerialConnectionInfo::DataView>(
input.payload(), input.payload_num_bytes(),
std::move(*input.mutable_handles()), output, Validate);
}
// @generated_from: device.mojom.SerialConnectionInfo.bitrate
uint32_t bitrate;
// @generated_from: device.mojom.SerialConnectionInfo.data_bits
SerialDataBits data_bits;
// @generated_from: device.mojom.SerialConnectionInfo.parity_bit
SerialParityBit parity_bit;
// @generated_from: device.mojom.SerialConnectionInfo.stop_bits
SerialStopBits stop_bits;
// @generated_from: device.mojom.SerialConnectionInfo.cts_flow_control
bool cts_flow_control;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, SerialConnectionInfo::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, SerialConnectionInfo::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, SerialConnectionInfo::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, SerialConnectionInfo::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename StructPtrType>
SerialPortInfoPtr SerialPortInfo::Clone() const {
return New(
mojo::Clone(token),
mojo::Clone(path),
mojo::Clone(vendor_id),
mojo::Clone(has_vendor_id),
mojo::Clone(product_id),
mojo::Clone(has_product_id),
mojo::Clone(display_name)
);
}
template <typename T, SerialPortInfo::EnableIfSame<T>*>
bool SerialPortInfo::Equals(const T& other_struct) const {
if (!mojo::Equals(this->token, other_struct.token))
return false;
if (!mojo::Equals(this->path, other_struct.path))
return false;
if (!mojo::Equals(this->vendor_id, other_struct.vendor_id))
return false;
if (!mojo::Equals(this->has_vendor_id, other_struct.has_vendor_id))
return false;
if (!mojo::Equals(this->product_id, other_struct.product_id))
return false;
if (!mojo::Equals(this->has_product_id, other_struct.has_product_id))
return false;
if (!mojo::Equals(this->display_name, other_struct.display_name))
return false;
return true;
}
template <typename T, SerialPortInfo::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.token < rhs.token)
return true;
if (rhs.token < lhs.token)
return false;
if (lhs.path < rhs.path)
return true;
if (rhs.path < lhs.path)
return false;
if (lhs.vendor_id < rhs.vendor_id)
return true;
if (rhs.vendor_id < lhs.vendor_id)
return false;
if (lhs.has_vendor_id < rhs.has_vendor_id)
return true;
if (rhs.has_vendor_id < lhs.has_vendor_id)
return false;
if (lhs.product_id < rhs.product_id)
return true;
if (rhs.product_id < lhs.product_id)
return false;
if (lhs.has_product_id < rhs.has_product_id)
return true;
if (rhs.has_product_id < lhs.has_product_id)
return false;
if (lhs.display_name < rhs.display_name)
return true;
if (rhs.display_name < lhs.display_name)
return false;
return false;
}
template <typename StructPtrType>
SerialConnectionOptionsPtr SerialConnectionOptions::Clone() const {
return New(
mojo::Clone(bitrate),
mojo::Clone(data_bits),
mojo::Clone(parity_bit),
mojo::Clone(stop_bits),
mojo::Clone(cts_flow_control),
mojo::Clone(has_cts_flow_control)
);
}
template <typename T, SerialConnectionOptions::EnableIfSame<T>*>
bool SerialConnectionOptions::Equals(const T& other_struct) const {
if (!mojo::Equals(this->bitrate, other_struct.bitrate))
return false;
if (!mojo::Equals(this->data_bits, other_struct.data_bits))
return false;
if (!mojo::Equals(this->parity_bit, other_struct.parity_bit))
return false;
if (!mojo::Equals(this->stop_bits, other_struct.stop_bits))
return false;
if (!mojo::Equals(this->cts_flow_control, other_struct.cts_flow_control))
return false;
if (!mojo::Equals(this->has_cts_flow_control, other_struct.has_cts_flow_control))
return false;
return true;
}
template <typename T, SerialConnectionOptions::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.bitrate < rhs.bitrate)
return true;
if (rhs.bitrate < lhs.bitrate)
return false;
if (lhs.data_bits < rhs.data_bits)
return true;
if (rhs.data_bits < lhs.data_bits)
return false;
if (lhs.parity_bit < rhs.parity_bit)
return true;
if (rhs.parity_bit < lhs.parity_bit)
return false;
if (lhs.stop_bits < rhs.stop_bits)
return true;
if (rhs.stop_bits < lhs.stop_bits)
return false;
if (lhs.cts_flow_control < rhs.cts_flow_control)
return true;
if (rhs.cts_flow_control < lhs.cts_flow_control)
return false;
if (lhs.has_cts_flow_control < rhs.has_cts_flow_control)
return true;
if (rhs.has_cts_flow_control < lhs.has_cts_flow_control)
return false;
return false;
}
template <typename StructPtrType>
SerialConnectionInfoPtr SerialConnectionInfo::Clone() const {
return New(
mojo::Clone(bitrate),
mojo::Clone(data_bits),
mojo::Clone(parity_bit),
mojo::Clone(stop_bits),
mojo::Clone(cts_flow_control)
);
}
template <typename T, SerialConnectionInfo::EnableIfSame<T>*>
bool SerialConnectionInfo::Equals(const T& other_struct) const {
if (!mojo::Equals(this->bitrate, other_struct.bitrate))
return false;
if (!mojo::Equals(this->data_bits, other_struct.data_bits))
return false;
if (!mojo::Equals(this->parity_bit, other_struct.parity_bit))
return false;
if (!mojo::Equals(this->stop_bits, other_struct.stop_bits))
return false;
if (!mojo::Equals(this->cts_flow_control, other_struct.cts_flow_control))
return false;
return true;
}
template <typename T, SerialConnectionInfo::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.bitrate < rhs.bitrate)
return true;
if (rhs.bitrate < lhs.bitrate)
return false;
if (lhs.data_bits < rhs.data_bits)
return true;
if (rhs.data_bits < lhs.data_bits)
return false;
if (lhs.parity_bit < rhs.parity_bit)
return true;
if (rhs.parity_bit < lhs.parity_bit)
return false;
if (lhs.stop_bits < rhs.stop_bits)
return true;
if (rhs.stop_bits < lhs.stop_bits)
return false;
if (lhs.cts_flow_control < rhs.cts_flow_control)
return true;
if (rhs.cts_flow_control < lhs.cts_flow_control)
return false;
return false;
}
template <typename StructPtrType>
SerialHostControlSignalsPtr SerialHostControlSignals::Clone() const {
return New(
mojo::Clone(dtr),
mojo::Clone(has_dtr),
mojo::Clone(rts),
mojo::Clone(has_rts)
);
}
template <typename T, SerialHostControlSignals::EnableIfSame<T>*>
bool SerialHostControlSignals::Equals(const T& other_struct) const {
if (!mojo::Equals(this->dtr, other_struct.dtr))
return false;
if (!mojo::Equals(this->has_dtr, other_struct.has_dtr))
return false;
if (!mojo::Equals(this->rts, other_struct.rts))
return false;
if (!mojo::Equals(this->has_rts, other_struct.has_rts))
return false;
return true;
}
template <typename T, SerialHostControlSignals::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.dtr < rhs.dtr)
return true;
if (rhs.dtr < lhs.dtr)
return false;
if (lhs.has_dtr < rhs.has_dtr)
return true;
if (rhs.has_dtr < lhs.has_dtr)
return false;
if (lhs.rts < rhs.rts)
return true;
if (rhs.rts < lhs.rts)
return false;
if (lhs.has_rts < rhs.has_rts)
return true;
if (rhs.has_rts < lhs.has_rts)
return false;
return false;
}
template <typename StructPtrType>
SerialPortControlSignalsPtr SerialPortControlSignals::Clone() const {
return New(
mojo::Clone(dcd),
mojo::Clone(cts),
mojo::Clone(ri),
mojo::Clone(dsr)
);
}
template <typename T, SerialPortControlSignals::EnableIfSame<T>*>
bool SerialPortControlSignals::Equals(const T& other_struct) const {
if (!mojo::Equals(this->dcd, other_struct.dcd))
return false;
if (!mojo::Equals(this->cts, other_struct.cts))
return false;
if (!mojo::Equals(this->ri, other_struct.ri))
return false;
if (!mojo::Equals(this->dsr, other_struct.dsr))
return false;
return true;
}
template <typename T, SerialPortControlSignals::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.dcd < rhs.dcd)
return true;
if (rhs.dcd < lhs.dcd)
return false;
if (lhs.cts < rhs.cts)
return true;
if (rhs.cts < lhs.cts)
return false;
if (lhs.ri < rhs.ri)
return true;
if (rhs.ri < lhs.ri)
return false;
if (lhs.dsr < rhs.dsr)
return true;
if (rhs.dsr < lhs.dsr)
return false;
return false;
}
} // namespace mojom
} // namespace device
namespace mojo {
template <>
struct StructTraits<::device::mojom::SerialPortInfo::DataView,
::device::mojom::SerialPortInfoPtr> {
static bool IsNull(const ::device::mojom::SerialPortInfoPtr& input) { return !input; }
static void SetToNull(::device::mojom::SerialPortInfoPtr* output) { output->reset(); }
static const decltype(::device::mojom::SerialPortInfo::token)& token(
const ::device::mojom::SerialPortInfoPtr& input) {
return input->token;
}
static const decltype(::device::mojom::SerialPortInfo::path)& path(
const ::device::mojom::SerialPortInfoPtr& input) {
return input->path;
}
static decltype(::device::mojom::SerialPortInfo::vendor_id) vendor_id(
const ::device::mojom::SerialPortInfoPtr& input) {
return input->vendor_id;
}
static decltype(::device::mojom::SerialPortInfo::has_vendor_id) has_vendor_id(
const ::device::mojom::SerialPortInfoPtr& input) {
return input->has_vendor_id;
}
static decltype(::device::mojom::SerialPortInfo::product_id) product_id(
const ::device::mojom::SerialPortInfoPtr& input) {
return input->product_id;
}
static decltype(::device::mojom::SerialPortInfo::has_product_id) has_product_id(
const ::device::mojom::SerialPortInfoPtr& input) {
return input->has_product_id;
}
static const decltype(::device::mojom::SerialPortInfo::display_name)& display_name(
const ::device::mojom::SerialPortInfoPtr& input) {
return input->display_name;
}
static bool Read(::device::mojom::SerialPortInfo::DataView input, ::device::mojom::SerialPortInfoPtr* output);
};
template <>
struct StructTraits<::device::mojom::SerialConnectionOptions::DataView,
::device::mojom::SerialConnectionOptionsPtr> {
static bool IsNull(const ::device::mojom::SerialConnectionOptionsPtr& input) { return !input; }
static void SetToNull(::device::mojom::SerialConnectionOptionsPtr* output) { output->reset(); }
static decltype(::device::mojom::SerialConnectionOptions::bitrate) bitrate(
const ::device::mojom::SerialConnectionOptionsPtr& input) {
return input->bitrate;
}
static decltype(::device::mojom::SerialConnectionOptions::data_bits) data_bits(
const ::device::mojom::SerialConnectionOptionsPtr& input) {
return input->data_bits;
}
static decltype(::device::mojom::SerialConnectionOptions::parity_bit) parity_bit(
const ::device::mojom::SerialConnectionOptionsPtr& input) {
return input->parity_bit;
}
static decltype(::device::mojom::SerialConnectionOptions::stop_bits) stop_bits(
const ::device::mojom::SerialConnectionOptionsPtr& input) {
return input->stop_bits;
}
static decltype(::device::mojom::SerialConnectionOptions::cts_flow_control) cts_flow_control(
const ::device::mojom::SerialConnectionOptionsPtr& input) {
return input->cts_flow_control;
}
static decltype(::device::mojom::SerialConnectionOptions::has_cts_flow_control) has_cts_flow_control(
const ::device::mojom::SerialConnectionOptionsPtr& input) {
return input->has_cts_flow_control;
}
static bool Read(::device::mojom::SerialConnectionOptions::DataView input, ::device::mojom::SerialConnectionOptionsPtr* output);
};
template <>
struct StructTraits<::device::mojom::SerialConnectionInfo::DataView,
::device::mojom::SerialConnectionInfoPtr> {
static bool IsNull(const ::device::mojom::SerialConnectionInfoPtr& input) { return !input; }
static void SetToNull(::device::mojom::SerialConnectionInfoPtr* output) { output->reset(); }
static decltype(::device::mojom::SerialConnectionInfo::bitrate) bitrate(
const ::device::mojom::SerialConnectionInfoPtr& input) {
return input->bitrate;
}
static decltype(::device::mojom::SerialConnectionInfo::data_bits) data_bits(
const ::device::mojom::SerialConnectionInfoPtr& input) {
return input->data_bits;
}
static decltype(::device::mojom::SerialConnectionInfo::parity_bit) parity_bit(
const ::device::mojom::SerialConnectionInfoPtr& input) {
return input->parity_bit;
}
static decltype(::device::mojom::SerialConnectionInfo::stop_bits) stop_bits(
const ::device::mojom::SerialConnectionInfoPtr& input) {
return input->stop_bits;
}
static decltype(::device::mojom::SerialConnectionInfo::cts_flow_control) cts_flow_control(
const ::device::mojom::SerialConnectionInfoPtr& input) {
return input->cts_flow_control;
}
static bool Read(::device::mojom::SerialConnectionInfo::DataView input, ::device::mojom::SerialConnectionInfoPtr* output);
};
template <>
struct StructTraits<::device::mojom::SerialHostControlSignals::DataView,
::device::mojom::SerialHostControlSignalsPtr> {
static bool IsNull(const ::device::mojom::SerialHostControlSignalsPtr& input) { return !input; }
static void SetToNull(::device::mojom::SerialHostControlSignalsPtr* output) { output->reset(); }
static decltype(::device::mojom::SerialHostControlSignals::dtr) dtr(
const ::device::mojom::SerialHostControlSignalsPtr& input) {
return input->dtr;
}
static decltype(::device::mojom::SerialHostControlSignals::has_dtr) has_dtr(
const ::device::mojom::SerialHostControlSignalsPtr& input) {
return input->has_dtr;
}
static decltype(::device::mojom::SerialHostControlSignals::rts) rts(
const ::device::mojom::SerialHostControlSignalsPtr& input) {
return input->rts;
}
static decltype(::device::mojom::SerialHostControlSignals::has_rts) has_rts(
const ::device::mojom::SerialHostControlSignalsPtr& input) {
return input->has_rts;
}
static bool Read(::device::mojom::SerialHostControlSignals::DataView input, ::device::mojom::SerialHostControlSignalsPtr* output);
};
template <>
struct StructTraits<::device::mojom::SerialPortControlSignals::DataView,
::device::mojom::SerialPortControlSignalsPtr> {
static bool IsNull(const ::device::mojom::SerialPortControlSignalsPtr& input) { return !input; }
static void SetToNull(::device::mojom::SerialPortControlSignalsPtr* output) { output->reset(); }
static decltype(::device::mojom::SerialPortControlSignals::dcd) dcd(
const ::device::mojom::SerialPortControlSignalsPtr& input) {
return input->dcd;
}
static decltype(::device::mojom::SerialPortControlSignals::cts) cts(
const ::device::mojom::SerialPortControlSignalsPtr& input) {
return input->cts;
}
static decltype(::device::mojom::SerialPortControlSignals::ri) ri(
const ::device::mojom::SerialPortControlSignalsPtr& input) {
return input->ri;
}
static decltype(::device::mojom::SerialPortControlSignals::dsr) dsr(
const ::device::mojom::SerialPortControlSignalsPtr& input) {
return input->dsr;
}
static bool Read(::device::mojom::SerialPortControlSignals::DataView input, ::device::mojom::SerialPortControlSignalsPtr* output);
};
} // namespace mojo
#endif // SERVICES_DEVICE_PUBLIC_MOJOM_SERIAL_MOJOM_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMjE3MSwgImJlZ2luIjogMjE1NCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5TZXJpYWxQb3J0TWFuYWdlciJ9
fSwgeyJlbmQiOiAzMDI4LCAiYmVnaW4iOiAzMDE4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlhbFBvcnRNYW5hZ2VyLkdldERldmlj
ZXMifX0sIHsiZW5kIjogMzE0OCwgImJlZ2luIjogMzE0MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5TZXJpYWxQb3J0TWFuYWdlci5HZXRQ
b3J0In19LCB7ImVuZCI6IDM0ODAsICJiZWdpbiI6IDM0NzAsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uU2VyaWFsUG9ydCJ9fSwgeyJlbmQi
OiA0NTAxLCAiYmVnaW4iOiA0NDk3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlhbFBvcnQuT3BlbiJ9fSwgeyJlbmQiOiA0Nzc5LCAi
YmVnaW4iOiA0NzY1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
ZGV2aWNlLm1vam9tLlNlcmlhbFBvcnQuQ2xlYXJTZW5kRXJyb3IifX0sIHsiZW5kIjogNDkyMiwg
ImJlZ2luIjogNDkwOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImRldmljZS5tb2pvbS5TZXJpYWxQb3J0LkNsZWFyUmVhZEVycm9yIn19LCB7ImVuZCI6IDUxMDQs
ICJiZWdpbiI6IDUwOTksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJkZXZpY2UubW9qb20uU2VyaWFsUG9ydC5GbHVzaCJ9fSwgeyJlbmQiOiA1MzI0LCAiYmVnaW4i
OiA1MzA3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNl
Lm1vam9tLlNlcmlhbFBvcnQuR2V0Q29udHJvbFNpZ25hbHMifX0sIHsiZW5kIjogNTUzMywgImJl
Z2luIjogNTUxNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRl
dmljZS5tb2pvbS5TZXJpYWxQb3J0LlNldENvbnRyb2xTaWduYWxzIn19LCB7ImVuZCI6IDU3Njcs
ICJiZWdpbiI6IDU3NTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJkZXZpY2UubW9qb20uU2VyaWFsUG9ydC5Db25maWd1cmVQb3J0In19LCB7ImVuZCI6IDYwMDks
ICJiZWdpbiI6IDU5OTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJkZXZpY2UubW9qb20uU2VyaWFsUG9ydC5HZXRQb3J0SW5mbyJ9fSwgeyJlbmQiOiA2MTg1LCAi
YmVnaW4iOiA2MTc3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
ZGV2aWNlLm1vam9tLlNlcmlhbFBvcnQuU2V0QnJlYWsifX0sIHsiZW5kIjogNjM2NCwgImJlZ2lu
IjogNjM1NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmlj
ZS5tb2pvbS5TZXJpYWxQb3J0LkNsZWFyQnJlYWsifX0sIHsiZW5kIjogNjYxMSwgImJlZ2luIjog
NjU5NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5t
b2pvbS5TZXJpYWxQb3J0Q2xpZW50In19LCB7ImVuZCI6IDczNjksICJiZWdpbiI6IDczNTgsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uU2Vy
aWFsUG9ydENsaWVudC5PblJlYWRFcnJvciJ9fSwgeyJlbmQiOiA3NDkzLCAiYmVnaW4iOiA3NDgy
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9t
LlNlcmlhbFBvcnRDbGllbnQuT25TZW5kRXJyb3IifX0sIHsiZW5kIjogNzc4OSwgImJlZ2luIjog
Nzc2MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5t
b2pvbS5TZXJpYWxQb3J0Q29ubmVjdGlvbldhdGNoZXIifX0sIHsiZW5kIjogMTY3OTAsICJiZWdp
biI6IDE2NzY2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2
aWNlLm1vam9tLlNlcmlhbEhvc3RDb250cm9sU2lnbmFscyJ9fSwgeyJlbmQiOiAyMDYwOCwgImJl
Z2luIjogMjA2MDUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJk
ZXZpY2UubW9qb20uU2VyaWFsSG9zdENvbnRyb2xTaWduYWxzLmR0ciJ9fSwgeyJlbmQiOiAyMDY5
MywgImJlZ2luIjogMjA2ODYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJkZXZpY2UubW9qb20uU2VyaWFsSG9zdENvbnRyb2xTaWduYWxzLmhhc19kdHIifX0sIHsi
ZW5kIjogMjA3NzAsICJiZWdpbiI6IDIwNzY3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlhbEhvc3RDb250cm9sU2lnbmFscy5ydHMi
fX0sIHsiZW5kIjogMjA4NTUsICJiZWdpbiI6IDIwODQ4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlhbEhvc3RDb250cm9sU2lnbmFs
cy5oYXNfcnRzIn19LCB7ImVuZCI6IDIxODUwLCAiYmVnaW4iOiAyMTgyNiwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5TZXJpYWxQb3J0Q29u
dHJvbFNpZ25hbHMifX0sIHsiZW5kIjogMjU2NTksICJiZWdpbiI6IDI1NjU2LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlhbFBvcnRD
b250cm9sU2lnbmFscy5kY2QifX0sIHsiZW5kIjogMjU3MzYsICJiZWdpbiI6IDI1NzMzLCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlh
bFBvcnRDb250cm9sU2lnbmFscy5jdHMifX0sIHsiZW5kIjogMjU4MTEsICJiZWdpbiI6IDI1ODA5
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9t
LlNlcmlhbFBvcnRDb250cm9sU2lnbmFscy5yaSJ9fSwgeyJlbmQiOiAyNTg4OCwgImJlZ2luIjog
MjU4ODUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2Uu
bW9qb20uU2VyaWFsUG9ydENvbnRyb2xTaWduYWxzLmRzciJ9fSwgeyJlbmQiOiAyNjg2NSwgImJl
Z2luIjogMjY4NTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJk
ZXZpY2UubW9qb20uU2VyaWFsUG9ydEluZm8ifX0sIHsiZW5kIjogMzA1OTcsICJiZWdpbiI6IDMw
NTkyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1v
am9tLlNlcmlhbFBvcnRJbmZvLnRva2VuIn19LCB7ImVuZCI6IDMwNjc2LCAiYmVnaW4iOiAzMDY3
MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pv
bS5TZXJpYWxQb3J0SW5mby5wYXRoIn19LCB7ImVuZCI6IDMwNzU5LCAiYmVnaW4iOiAzMDc1MCwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5T
ZXJpYWxQb3J0SW5mby52ZW5kb3JfaWQifX0sIHsiZW5kIjogMzA4NDYsICJiZWdpbiI6IDMwODMz
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9t
LlNlcmlhbFBvcnRJbmZvLmhhc192ZW5kb3JfaWQifX0sIHsiZW5kIjogMzA5MzEsICJiZWdpbiI6
IDMwOTIxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNl
Lm1vam9tLlNlcmlhbFBvcnRJbmZvLnByb2R1Y3RfaWQifX0sIHsiZW5kIjogMzEwMjAsICJiZWdp
biI6IDMxMDA2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2
aWNlLm1vam9tLlNlcmlhbFBvcnRJbmZvLmhhc19wcm9kdWN0X2lkIn19LCB7ImVuZCI6IDMxMTI4
LCAiYmVnaW4iOiAzMTExNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImRldmljZS5tb2pvbS5TZXJpYWxQb3J0SW5mby5kaXNwbGF5X25hbWUifX0sIHsiZW5kIjog
MzIwODEsICJiZWdpbiI6IDMyMDU4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlhbENvbm5lY3Rpb25PcHRpb25zIn19LCB7ImVuZCI6
IDM1OTk5LCAiYmVnaW4iOiAzNTk5MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImRldmljZS5tb2pvbS5TZXJpYWxDb25uZWN0aW9uT3B0aW9ucy5iaXRyYXRlIn19
LCB7ImVuZCI6IDM2MDk3LCAiYmVnaW4iOiAzNjA4OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5TZXJpYWxDb25uZWN0aW9uT3B0aW9ucy5k
YXRhX2JpdHMifX0sIHsiZW5kIjogMzYxOTgsICJiZWdpbiI6IDM2MTg4LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlhbENvbm5lY3Rp
b25PcHRpb25zLnBhcml0eV9iaXQifX0sIHsiZW5kIjogMzYyOTYsICJiZWdpbiI6IDM2Mjg3LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLlNl
cmlhbENvbm5lY3Rpb25PcHRpb25zLnN0b3BfYml0cyJ9fSwgeyJlbmQiOiAzNjM5OCwgImJlZ2lu
IjogMzYzODIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZp
Y2UubW9qb20uU2VyaWFsQ29ubmVjdGlvbk9wdGlvbnMuY3RzX2Zsb3dfY29udHJvbCJ9fSwgeyJl
bmQiOiAzNjUwOCwgImJlZ2luIjogMzY0ODgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uU2VyaWFsQ29ubmVjdGlvbk9wdGlvbnMuaGFzX2N0
c19mbG93X2NvbnRyb2wifX0sIHsiZW5kIjogMzc0OTEsICJiZWdpbiI6IDM3NDcxLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLlNlcmlhbENv
bm5lY3Rpb25JbmZvIn19LCB7ImVuZCI6IDQxMzA0LCAiYmVnaW4iOiA0MTI5NywgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5TZXJpYWxDb25u
ZWN0aW9uSW5mby5iaXRyYXRlIn19LCB7ImVuZCI6IDQxMzk5LCAiYmVnaW4iOiA0MTM5MCwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5TZXJp
YWxDb25uZWN0aW9uSW5mby5kYXRhX2JpdHMifX0sIHsiZW5kIjogNDE0OTcsICJiZWdpbiI6IDQx
NDg3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1v
am9tLlNlcmlhbENvbm5lY3Rpb25JbmZvLnBhcml0eV9iaXQifX0sIHsiZW5kIjogNDE1OTIsICJi
ZWdpbiI6IDQxNTgzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
ZGV2aWNlLm1vam9tLlNlcmlhbENvbm5lY3Rpb25JbmZvLnN0b3BfYml0cyJ9fSwgeyJlbmQiOiA0
MTY5MSwgImJlZ2luIjogNDE2NzUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJkZXZpY2UubW9qb20uU2VyaWFsQ29ubmVjdGlvbkluZm8uY3RzX2Zsb3dfY29udHJv
bCJ9fV0sICJ0eXBlIjogImt5dGhlMCJ9
*/