// services/network/public/mojom/trust_tokens.mojom-forward.h is auto generated by mojom_bindings_generator.py, do not edit

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

#ifndef SERVICES_NETWORK_PUBLIC_MOJOM_TRUST_TOKENS_MOJOM_FORWARD_H_
#define SERVICES_NETWORK_PUBLIC_MOJOM_TRUST_TOKENS_MOJOM_FORWARD_H_

#include <stdint.h>

#include "mojo/public/cpp/bindings/struct_forward.h"

#include "mojo/public/cpp/bindings/deprecated_interface_types_forward.h"


#include "mojo/public/interfaces/bindings/native_struct.mojom-forward.h"

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




namespace network::mojom {
class TrustTokenParamsDataView;

class HasTrustTokensResultDataView;

class HasRedemptionRecordResultDataView;

class TrustTokenVerificationKeyDataView;

class TrustTokenKeyCommitmentResultDataView;

class FulfillTrustTokenIssuanceRequestDataView;

class FulfillTrustTokenIssuanceAnswerDataView;

class TrustTokenOperationResultDataView;

class StoredTrustTokensForIssuerDataView;


enum class TrustTokenProtocolVersion : int32_t;

enum class TrustTokenOperationStatus : int32_t;

enum class TrustTokenOperationType : int32_t;

enum class TrustTokenRefreshPolicy : int32_t;

enum class TrustTokenSignRequestData : int32_t;

enum class DeleteStoredTrustTokensStatus : int32_t;

enum class TrustTokenKeyCommitmentResult_Os : int32_t;

enum class TrustTokenKeyCommitmentResult_UnavailableLocalOperationFallback : int32_t;

enum class FulfillTrustTokenIssuanceAnswer_Status : int32_t;
class TrustTokenParams;
using TrustTokenParamsPtr = mojo::StructPtr<TrustTokenParams>;

class HasTrustTokensResult;
using HasTrustTokensResultPtr = mojo::InlinedStructPtr<HasTrustTokensResult>;

class HasRedemptionRecordResult;
using HasRedemptionRecordResultPtr = mojo::InlinedStructPtr<HasRedemptionRecordResult>;

class TrustTokenVerificationKey;
using TrustTokenVerificationKeyPtr = mojo::StructPtr<TrustTokenVerificationKey>;

class TrustTokenKeyCommitmentResult;
using TrustTokenKeyCommitmentResultPtr = mojo::StructPtr<TrustTokenKeyCommitmentResult>;

class FulfillTrustTokenIssuanceRequest;
using FulfillTrustTokenIssuanceRequestPtr = mojo::StructPtr<FulfillTrustTokenIssuanceRequest>;

class FulfillTrustTokenIssuanceAnswer;
using FulfillTrustTokenIssuanceAnswerPtr = mojo::InlinedStructPtr<FulfillTrustTokenIssuanceAnswer>;

class TrustTokenOperationResult;
using TrustTokenOperationResultPtr = mojo::StructPtr<TrustTokenOperationResult>;

class StoredTrustTokensForIssuer;
using StoredTrustTokensForIssuerPtr = mojo::StructPtr<StoredTrustTokensForIssuer>;

class TrustTokenQueryAnswerer;




}  // network::mojom

#endif  // SERVICES_NETWORK_PUBLIC_MOJOM_TRUST_TOKENS_MOJOM_FORWARD_H_
/* Metadata comment
eyJ0eXBlIjogImt5dGhlMCIsICJtZXRhIjogW119
*/