// Copyright 2025 Google LLC.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated file. DO NOT EDIT.

// Package digitalassetlinks provides access to the Digital Asset Links API.
//
// For product documentation, see: https://developers.google.com/digital-asset-links/
//
// # Library status
//
// These client libraries are officially supported by Google. However, this
// library is considered complete and is in maintenance mode. This means
// that we will address critical bugs and security issues but will not add
// any new features.
//
// When possible, we recommend using our newer
// [Cloud Client Libraries for Go](https://pkg.go.dev/cloud.google.com/go)
// that are still actively being worked and iterated on.
//
// # Creating a client
//
// Usage example:
//
//	import "google.golang.org/api/digitalassetlinks/v1"
//	...
//	ctx := context.Background()
//	digitalassetlinksService, err := digitalassetlinks.NewService(ctx)
//
// In this example, Google Application Default Credentials are used for
// authentication. For information on how to create and obtain Application
// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
//
// # Other authentication options
//
// To use an API key for authentication (note: some APIs do not support API
// keys), use [google.golang.org/api/option.WithAPIKey]:
//
//	digitalassetlinksService, err := digitalassetlinks.NewService(ctx, option.WithAPIKey("AIza..."))
//
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth
// flow, use [google.golang.org/api/option.WithTokenSource]:
//
//	config := &oauth2.Config{...}
//	// ...
//	token, err := config.Exchange(ctx, ...)
//	digitalassetlinksService, err := digitalassetlinks.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
//
// See [google.golang.org/api/option.ClientOption] for details on options.
package digitalassetlinks // import "google.golang.org/api/digitalassetlinks/v1"

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"log/slog"
	"net/http"
	"net/url"
	"strconv"
	"strings"

	"github.com/googleapis/gax-go/v2/internallog"
	googleapi "google.golang.org/api/googleapi"
	internal "google.golang.org/api/internal"
	gensupport "google.golang.org/api/internal/gensupport"
	option "google.golang.org/api/option"
	internaloption "google.golang.org/api/option/internaloption"
	htransport "google.golang.org/api/transport/http"
)

// Always reference these packages, just in case the auto-generated code
// below doesn't.
var _ = bytes.NewBuffer
var _ = strconv.Itoa
var _ = fmt.Sprintf
var _ = json.NewDecoder
var _ = io.Copy
var _ = url.Parse
var _ = gensupport.MarshalJSON
var _ = googleapi.Version
var _ = errors.New
var _ = strings.Replace
var _ = context.Canceled
var _ = internaloption.WithDefaultEndpoint
var _ = internal.Version
var _ = internallog.New

const apiId = "digitalassetlinks:v1"
const apiName = "digitalassetlinks"
const apiVersion = "v1"
const basePath = "https://digitalassetlinks.googleapis.com/"
const basePathTemplate = "https://digitalassetlinks.UNIVERSE_DOMAIN/"
const mtlsBasePath = "https://digitalassetlinks.mtls.googleapis.com/"

// NewService creates a new Service.
func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {
	opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
	opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate))
	opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
	opts = append(opts, internaloption.EnableNewAuthLibrary())
	client, endpoint, err := htransport.NewClient(ctx, opts...)
	if err != nil {
		return nil, err
	}
	s := &Service{client: client, BasePath: basePath, logger: internaloption.GetLogger(opts)}
	s.Assetlinks = NewAssetlinksService(s)
	s.Statements = NewStatementsService(s)
	if endpoint != "" {
		s.BasePath = endpoint
	}
	return s, nil
}

// New creates a new Service. It uses the provided http.Client for requests.
//
// Deprecated: please use NewService instead.
// To provide a custom HTTP client, use option.WithHTTPClient.
// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.
func New(client *http.Client) (*Service, error) {
	if client == nil {
		return nil, errors.New("client is nil")
	}
	return NewService(context.TODO(), option.WithHTTPClient(client))
}

type Service struct {
	client    *http.Client
	logger    *slog.Logger
	BasePath  string // API endpoint base URL
	UserAgent string // optional additional User-Agent fragment

	Assetlinks *AssetlinksService

	Statements *StatementsService
}

func (s *Service) userAgent() string {
	if s.UserAgent == "" {
		return googleapi.UserAgent
	}
	return googleapi.UserAgent + " " + s.UserAgent
}

func NewAssetlinksService(s *Service) *AssetlinksService {
	rs := &AssetlinksService{s: s}
	return rs
}

type AssetlinksService struct {
	s *Service
}

func NewStatementsService(s *Service) *StatementsService {
	rs := &StatementsService{s: s}
	return rs
}

type StatementsService struct {
	s *Service
}

// AndroidAppAsset: Describes an android app asset.
type AndroidAppAsset struct {
	// Certificate: Because there is no global enforcement of package name
	// uniqueness, we also require a signing certificate, which in combination with
	// the package name uniquely identifies an app. Some apps' signing keys are
	// rotated, so they may be signed by different keys over time. We treat these
	// as distinct assets, since we use (package name, cert) as the unique ID. This
	// should not normally pose any problems as both versions of the app will make
	// the same or similar statements. Other assets making statements about the app
	// will have to be updated when a key is rotated, however. (Note that the
	// syntaxes for publishing and querying for statements contain syntactic sugar
	// to easily let you specify apps that are known by multiple certificates.)
	// REQUIRED
	Certificate *CertificateInfo `json:"certificate,omitempty"`
	// PackageName: Android App assets are naturally identified by their Java
	// package name. For example, the Google Maps app uses the package name
	// `com.google.android.apps.maps`. REQUIRED
	PackageName string `json:"packageName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Certificate") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Certificate") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidAppAsset) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidAppAsset
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Asset: Uniquely identifies an asset. A digital asset is an identifiable and
// addressable online entity that typically provides some service or content.
// Examples of assets are websites, Android apps, Twitter feeds, and Plus
// Pages.
type Asset struct {
	// AndroidApp: Set if this is an Android App asset.
	AndroidApp *AndroidAppAsset `json:"androidApp,omitempty"`
	// Web: Set if this is a web asset.
	Web *WebAsset `json:"web,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AndroidApp") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidApp") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Asset) MarshalJSON() ([]byte, error) {
	type NoMethod Asset
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// BulkCheckRequest: Message used to check for the existence of multiple
// digital asset links within a single RPC.
type BulkCheckRequest struct {
	// DefaultRelation: If specified, will be used in any given template statement
	// that doesn’t specify a relation.
	DefaultRelation string `json:"defaultRelation,omitempty"`
	// DefaultSource: If specified, will be used in any given template statement
	// that doesn’t specify a source.
	DefaultSource *Asset `json:"defaultSource,omitempty"`
	// DefaultTarget: If specified, will be used in any given template statement
	// that doesn’t specify a target.
	DefaultTarget *Asset `json:"defaultTarget,omitempty"`
	// ReturnRelationExtensions: Same configuration as in CheckRequest; all
	// statement checks will use the same configuration.
	ReturnRelationExtensions bool `json:"returnRelationExtensions,omitempty"`
	// Statements: List of statements to check. For each statement, you can omit a
	// field if the corresponding default_* field below was supplied. Minimum 1
	// statement; maximum 1,000 statements. Any additional statements will be
	// ignored.
	Statements []*StatementTemplate `json:"statements,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DefaultRelation") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DefaultRelation") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s BulkCheckRequest) MarshalJSON() ([]byte, error) {
	type NoMethod BulkCheckRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// BulkCheckResponse: Response for BulkCheck call. Results are sent in a list
// in the same order in which they were sent. Individual check errors are
// described in the appropriate check_results entry. If the entire call fails,
// the response will include a bulk_error_code field describing the error.
type BulkCheckResponse struct {
	// BulkErrorCode: Error code for the entire request. Present only if the entire
	// request failed. Individual check errors will not trigger the presence of
	// this field.
	//
	// Possible values:
	//   "ERROR_CODE_UNSPECIFIED" - Default value, otherwise unused.
	//   "ERROR_CODE_INVALID_QUERY" - Unable to parse query.
	//   "ERROR_CODE_FETCH_ERROR" - Unable to fetch the asset links data.
	//   "ERROR_CODE_FAILED_SSL_VALIDATION" - Invalid HTTPS certificate .
	//   "ERROR_CODE_REDIRECT" - HTTP redirects (e.g, 301) are not allowed.
	//   "ERROR_CODE_TOO_LARGE" - Asset links data exceeds maximum size.
	//   "ERROR_CODE_MALFORMED_HTTP_RESPONSE" - Can't parse HTTP response.
	//   "ERROR_CODE_WRONG_CONTENT_TYPE" - HTTP Content-type should be
	// application/json.
	//   "ERROR_CODE_MALFORMED_CONTENT" - JSON content is malformed.
	//   "ERROR_CODE_SECURE_ASSET_INCLUDES_INSECURE" - A secure asset includes an
	// insecure asset (security downgrade).
	//   "ERROR_CODE_FETCH_BUDGET_EXHAUSTED" - Too many includes (maybe a loop).
	BulkErrorCode string `json:"bulkErrorCode,omitempty"`
	// CheckResults: List of results for each check request. Results are returned
	// in the same order in which they were sent in the request.
	CheckResults []*CheckResponse `json:"checkResults,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "BulkErrorCode") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BulkErrorCode") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s BulkCheckResponse) MarshalJSON() ([]byte, error) {
	type NoMethod BulkCheckResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CertificateInfo: Describes an X509 certificate.
type CertificateInfo struct {
	// Sha256Fingerprint: The uppercase SHA-265 fingerprint of the certificate.
	// From the PEM certificate, it can be acquired like this: $ keytool -printcert
	// -file $CERTFILE | grep SHA256: SHA256:
	// 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
	// 42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5 or like this: $ openssl x509 -in
	// $CERTFILE -noout -fingerprint -sha256 SHA256
	// Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
	// 16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5 In this example, the
	// contents of this field would be `14:6D:E9:83:C5:73:
	// 06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:
	// 44:E5`. If these tools are not available to you, you can convert the PEM
	// certificate into the DER format, compute the SHA-256 hash of that string and
	// represent the result as a hexstring (that is, uppercase hexadecimal
	// representations of each octet, separated by colons).
	Sha256Fingerprint string `json:"sha256Fingerprint,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Sha256Fingerprint") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Sha256Fingerprint") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CertificateInfo) MarshalJSON() ([]byte, error) {
	type NoMethod CertificateInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CheckResponse: Response message for the CheckAssetLinks call.
type CheckResponse struct {
	// DebugString: Human-readable message containing information intended to help
	// end users understand, reproduce and debug the result. The message will be in
	// English and we are currently not planning to offer any translations. Please
	// note that no guarantees are made about the contents or format of this
	// string. Any aspect of it may be subject to change without notice. You should
	// not attempt to programmatically parse this data. For programmatic access,
	// use the error_code field below.
	DebugString string `json:"debugString,omitempty"`
	// ErrorCode: Error codes that describe the result of the Check operation.
	// NOTE: Error codes may be populated even when `linked` is true. The error
	// codes do not necessarily imply that the request failed, but rather, specify
	// any errors encountered in the statements file(s) which may or may not impact
	// whether the server determines the requested source and target to be linked.
	//
	// Possible values:
	//   "ERROR_CODE_UNSPECIFIED" - Default value, otherwise unused.
	//   "ERROR_CODE_INVALID_QUERY" - Unable to parse query.
	//   "ERROR_CODE_FETCH_ERROR" - Unable to fetch the asset links data.
	//   "ERROR_CODE_FAILED_SSL_VALIDATION" - Invalid HTTPS certificate .
	//   "ERROR_CODE_REDIRECT" - HTTP redirects (e.g, 301) are not allowed.
	//   "ERROR_CODE_TOO_LARGE" - Asset links data exceeds maximum size.
	//   "ERROR_CODE_MALFORMED_HTTP_RESPONSE" - Can't parse HTTP response.
	//   "ERROR_CODE_WRONG_CONTENT_TYPE" - HTTP Content-type should be
	// application/json.
	//   "ERROR_CODE_MALFORMED_CONTENT" - JSON content is malformed.
	//   "ERROR_CODE_SECURE_ASSET_INCLUDES_INSECURE" - A secure asset includes an
	// insecure asset (security downgrade).
	//   "ERROR_CODE_FETCH_BUDGET_EXHAUSTED" - Too many includes (maybe a loop).
	ErrorCode []string `json:"errorCode,omitempty"`
	// Linked: Set to true if the assets specified in the request are linked by the
	// relation specified in the request.
	Linked bool `json:"linked,omitempty"`
	// MaxAge: From serving time, how much longer the response should be considered
	// valid barring further updates. REQUIRED
	MaxAge string `json:"maxAge,omitempty"`
	// RelationExtensions: Statements may specify relation level
	// extensions/payloads to express more details when declaring permissions to
	// grant from the source asset to the target asset. When requested, the API
	// will return relation_extensions specified in any and all statements linking
	// the requested source and target assets by the relation specified in the
	// request.
	RelationExtensions []googleapi.RawMessage `json:"relationExtensions,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "DebugString") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DebugString") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CheckResponse) MarshalJSON() ([]byte, error) {
	type NoMethod CheckResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListResponse: Response message for the List call.
type ListResponse struct {
	// DebugString: Human-readable message containing information intended to help
	// end users understand, reproduce and debug the result. The message will be in
	// English and we are currently not planning to offer any translations. Please
	// note that no guarantees are made about the contents or format of this
	// string. Any aspect of it may be subject to change without notice. You should
	// not attempt to programmatically parse this data. For programmatic access,
	// use the error_code field below.
	DebugString string `json:"debugString,omitempty"`
	// ErrorCode: Error codes that describe the result of the List operation.
	//
	// Possible values:
	//   "ERROR_CODE_UNSPECIFIED" - Default value, otherwise unused.
	//   "ERROR_CODE_INVALID_QUERY" - Unable to parse query.
	//   "ERROR_CODE_FETCH_ERROR" - Unable to fetch the asset links data.
	//   "ERROR_CODE_FAILED_SSL_VALIDATION" - Invalid HTTPS certificate .
	//   "ERROR_CODE_REDIRECT" - HTTP redirects (e.g, 301) are not allowed.
	//   "ERROR_CODE_TOO_LARGE" - Asset links data exceeds maximum size.
	//   "ERROR_CODE_MALFORMED_HTTP_RESPONSE" - Can't parse HTTP response.
	//   "ERROR_CODE_WRONG_CONTENT_TYPE" - HTTP Content-type should be
	// application/json.
	//   "ERROR_CODE_MALFORMED_CONTENT" - JSON content is malformed.
	//   "ERROR_CODE_SECURE_ASSET_INCLUDES_INSECURE" - A secure asset includes an
	// insecure asset (security downgrade).
	//   "ERROR_CODE_FETCH_BUDGET_EXHAUSTED" - Too many includes (maybe a loop).
	ErrorCode []string `json:"errorCode,omitempty"`
	// MaxAge: From serving time, how much longer the response should be considered
	// valid barring further updates. REQUIRED
	MaxAge string `json:"maxAge,omitempty"`
	// Statements: A list of all the matching statements that have been found.
	Statements []*Statement `json:"statements,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "DebugString") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DebugString") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Statement: Describes a reliable statement that has been made about the
// relationship between a source asset and a target asset. Statements are
// always made by the source asset, either directly or by delegating to a
// statement list that is stored elsewhere. For more detailed definitions of
// statements and assets, please refer to our API documentation landing page
// (/digital-asset-links/v1/getting-started).
type Statement struct {
	// Relation: The relation identifies the use of the statement as intended by
	// the source asset's owner (that is, the person or entity who issued the
	// statement). Every complete statement has a relation. We identify relations
	// with strings of the format `/`, where `` must be one of a set of pre-defined
	// purpose categories, and `` is a free-form lowercase alphanumeric string that
	// describes the specific use case of the statement. Refer to our API
	// documentation (/digital-asset-links/v1/relation-strings) for the current
	// list of supported relations. Example:
	// `delegate_permission/common.handle_all_urls` REQUIRED
	Relation string `json:"relation,omitempty"`
	// RelationExtensions: Statements may specify relation level
	// extensions/payloads to express more details when declaring permissions to
	// grant from the source asset to the target asset. These relation extensions
	// should be specified in the `relation_extensions` object, keyed by the
	// relation type they're associated with. { relation:
	// ["delegate_permission/common.handle_all_urls"], target: {...},
	// relation_extensions: { "delegate_permission/common.handle_all_urls": {
	// ...handle_all_urls specific payload specified here... } } } When requested,
	// and specified in the statement file, the API will return relation_extensions
	// associated with the statement's relation type. i.e. the API will only return
	// relation_extensions specified for
	// "delegate_permission/common.handle_all_urls" if this statement object's
	// relation type is "delegate_permission/common.handle_all_urls".
	RelationExtensions googleapi.RawMessage `json:"relationExtensions,omitempty"`
	// Source: Every statement has a source asset. REQUIRED
	Source *Asset `json:"source,omitempty"`
	// Target: Every statement has a target asset. REQUIRED
	Target *Asset `json:"target,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Relation") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Relation") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Statement) MarshalJSON() ([]byte, error) {
	type NoMethod Statement
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// StatementTemplate: A single statement to check in a bulk call using
// BulkCheck. See CheckRequest for details about each field.
type StatementTemplate struct {
	// Relation: The relationship being asserted between the source and target. If
	// omitted, you must specify a BulkCheckRequest.default_relation value to use
	// here.
	Relation string `json:"relation,omitempty"`
	// Source: The source asset that is asserting the statement. If omitted, you
	// must specify a BulkCheckRequest.default_source value to use here.
	Source *Asset `json:"source,omitempty"`
	// Target: The target that the source is declaring the relationship with. If
	// omitted, you must specify a BulkCheckRequest.default_target to use here.
	Target *Asset `json:"target,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Relation") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Relation") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s StatementTemplate) MarshalJSON() ([]byte, error) {
	type NoMethod StatementTemplate
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// WebAsset: Describes a web asset.
type WebAsset struct {
	// Site: Web assets are identified by a URL that contains only the scheme,
	// hostname and port parts. The format is http[s]://[:] Hostnames must be fully
	// qualified: they must end in a single period ("."). Only the schemes "http"
	// and "https" are currently allowed. Port numbers are given as a decimal
	// number, and they must be omitted if the standard port numbers are used: 80
	// for http and 443 for https. We call this limited URL the "site". All URLs
	// that share the same scheme, hostname and port are considered to be a part of
	// the site and thus belong to the web asset. Example: the asset with the site
	// `https://www.google.com` contains all these URLs: *
	// `https://www.google.com/` * `https://www.google.com:443/` *
	// `https://www.google.com/foo` * `https://www.google.com/foo?bar` *
	// `https://www.google.com/foo#bar` * `https://user@password:www.google.com/`
	// But it does not contain these URLs: * `http://www.google.com/` (wrong
	// scheme) * `https://google.com/` (hostname does not match) *
	// `https://www.google.com:444/` (port does not match) REQUIRED
	Site string `json:"site,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Site") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Site") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s WebAsset) MarshalJSON() ([]byte, error) {
	type NoMethod WebAsset
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type AssetlinksBulkCheckCall struct {
	s                *Service
	bulkcheckrequest *BulkCheckRequest
	urlParams_       gensupport.URLParams
	ctx_             context.Context
	header_          http.Header
}

// BulkCheck: Send a bundle of statement checks in a single RPC to minimize
// latency and service load. Statements need not be all for the same source
// and/or target. We recommend using this method when you need to check more
// than one statement in a short period of time.
func (r *AssetlinksService) BulkCheck(bulkcheckrequest *BulkCheckRequest) *AssetlinksBulkCheckCall {
	c := &AssetlinksBulkCheckCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.bulkcheckrequest = bulkcheckrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *AssetlinksBulkCheckCall) Fields(s ...googleapi.Field) *AssetlinksBulkCheckCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *AssetlinksBulkCheckCall) Context(ctx context.Context) *AssetlinksBulkCheckCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *AssetlinksBulkCheckCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *AssetlinksBulkCheckCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.bulkcheckrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/assetlinks:bulkCheck")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "digitalassetlinks.assetlinks.bulkCheck", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "digitalassetlinks.assetlinks.bulkCheck" call.
// Any non-2xx status code is an error. Response headers are in either
// *BulkCheckResponse.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *AssetlinksBulkCheckCall) Do(opts ...googleapi.CallOption) (*BulkCheckResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &BulkCheckResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "digitalassetlinks.assetlinks.bulkCheck", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type AssetlinksCheckCall struct {
	s            *Service
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Check: Determines whether the specified (directional) relationship exists
// between the specified source and target assets. The relation describes the
// intent of the link between the two assets as claimed by the source asset. An
// example for such relationships is the delegation of privileges or
// permissions. This command is most often used by infrastructure systems to
// check preconditions for an action. For example, a client may want to know if
// it is OK to send a web URL to a particular mobile app instead. The client
// can check for the relevant asset link from the website to the mobile app to
// decide if the operation should be allowed. A note about security: if you
// specify a secure asset as the source, such as an HTTPS website or an Android
// app, the API will ensure that any statements used to generate the response
// have been made in a secure way by the owner of that asset. Conversely, if
// the source asset is an insecure HTTP website (that is, the URL starts with
// `http://` instead of `https://`), the API cannot verify its statements
// securely, and it is not possible to ensure that the website's statements
// have not been altered by a third party. For more information, see the
// Digital Asset Links technical design specification
// (https://github.com/google/digitalassetlinks/blob/master/well-known/details.md).
func (r *AssetlinksService) Check() *AssetlinksCheckCall {
	c := &AssetlinksCheckCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	return c
}

// Relation sets the optional parameter "relation": Query string for the
// relation. We identify relations with strings of the format `/`, where “
// must be one of a set of pre-defined purpose categories, and “ is a
// free-form lowercase alphanumeric string that describes the specific use case
// of the statement. Refer to our API documentation
// (/digital-asset-links/v1/relation-strings) for the current list of supported
// relations. For a query to match an asset link, both the query's and the
// asset link's relation strings must match exactly. Example: A query with
// relation `delegate_permission/common.handle_all_urls` matches an asset link
// with relation `delegate_permission/common.handle_all_urls`.
func (c *AssetlinksCheckCall) Relation(relation string) *AssetlinksCheckCall {
	c.urlParams_.Set("relation", relation)
	return c
}

// ReturnRelationExtensions sets the optional parameter
// "returnRelationExtensions": Whether to return relation_extensions payloads
// specified in the source Digital Asset Links statements linking the requested
// source and target assets by the requested relation type. If this is set to
// `false` (default), relation_extensions specified will not be returned, even
// if they are specified in the DAL statement file. If set to `true`, the API
// will propagate any and all relation_extensions, across statements, linking
// the source and target assets by the requested relation type, if specified in
// the DAL statement file.
func (c *AssetlinksCheckCall) ReturnRelationExtensions(returnRelationExtensions bool) *AssetlinksCheckCall {
	c.urlParams_.Set("returnRelationExtensions", fmt.Sprint(returnRelationExtensions))
	return c
}

// SourceAndroidAppCertificateSha256Fingerprint sets the optional parameter
// "source.androidApp.certificate.sha256Fingerprint": The uppercase SHA-265
// fingerprint of the certificate. From the PEM certificate, it can be acquired
// like this: $ keytool -printcert -file $CERTFILE | grep SHA256: SHA256:
// 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
// 42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5 or like this: $ openssl x509 -in
// $CERTFILE -noout -fingerprint -sha256 SHA256
// Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
// 16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5 In this example, the
// contents of this field would be `14:6D:E9:83:C5:73:
// 06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:
// 44:E5`. If these tools are not available to you, you can convert the PEM
// certificate into the DER format, compute the SHA-256 hash of that string and
// represent the result as a hexstring (that is, uppercase hexadecimal
// representations of each octet, separated by colons).
func (c *AssetlinksCheckCall) SourceAndroidAppCertificateSha256Fingerprint(sourceAndroidAppCertificateSha256Fingerprint string) *AssetlinksCheckCall {
	c.urlParams_.Set("source.androidApp.certificate.sha256Fingerprint", sourceAndroidAppCertificateSha256Fingerprint)
	return c
}

// SourceAndroidAppPackageName sets the optional parameter
// "source.androidApp.packageName": Android App assets are naturally identified
// by their Java package name. For example, the Google Maps app uses the
// package name `com.google.android.apps.maps`. REQUIRED
func (c *AssetlinksCheckCall) SourceAndroidAppPackageName(sourceAndroidAppPackageName string) *AssetlinksCheckCall {
	c.urlParams_.Set("source.androidApp.packageName", sourceAndroidAppPackageName)
	return c
}

// SourceWebSite sets the optional parameter "source.web.site": Web assets are
// identified by a URL that contains only the scheme, hostname and port parts.
// The format is http[s]://[:] Hostnames must be fully qualified: they must end
// in a single period ("."). Only the schemes "http" and "https" are
// currently allowed. Port numbers are given as a decimal number, and they must
// be omitted if the standard port numbers are used: 80 for http and 443 for
// https. We call this limited URL the "site". All URLs that share the same
// scheme, hostname and port are considered to be a part of the site and thus
// belong to the web asset. Example: the asset with the site
// `https://www.google.com` contains all these URLs: *
// `https://www.google.com/` * `https://www.google.com:443/` *
// `https://www.google.com/foo` * `https://www.google.com/foo?bar` *
// `https://www.google.com/foo#bar` * `https://user@password:www.google.com/`
// But it does not contain these URLs: * `http://www.google.com/` (wrong
// scheme) * `https://google.com/` (hostname does not match) *
// `https://www.google.com:444/` (port does not match) REQUIRED
func (c *AssetlinksCheckCall) SourceWebSite(sourceWebSite string) *AssetlinksCheckCall {
	c.urlParams_.Set("source.web.site", sourceWebSite)
	return c
}

// TargetAndroidAppCertificateSha256Fingerprint sets the optional parameter
// "target.androidApp.certificate.sha256Fingerprint": The uppercase SHA-265
// fingerprint of the certificate. From the PEM certificate, it can be acquired
// like this: $ keytool -printcert -file $CERTFILE | grep SHA256: SHA256:
// 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
// 42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5 or like this: $ openssl x509 -in
// $CERTFILE -noout -fingerprint -sha256 SHA256
// Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
// 16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5 In this example, the
// contents of this field would be `14:6D:E9:83:C5:73:
// 06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:
// 44:E5`. If these tools are not available to you, you can convert the PEM
// certificate into the DER format, compute the SHA-256 hash of that string and
// represent the result as a hexstring (that is, uppercase hexadecimal
// representations of each octet, separated by colons).
func (c *AssetlinksCheckCall) TargetAndroidAppCertificateSha256Fingerprint(targetAndroidAppCertificateSha256Fingerprint string) *AssetlinksCheckCall {
	c.urlParams_.Set("target.androidApp.certificate.sha256Fingerprint", targetAndroidAppCertificateSha256Fingerprint)
	return c
}

// TargetAndroidAppPackageName sets the optional parameter
// "target.androidApp.packageName": Android App assets are naturally identified
// by their Java package name. For example, the Google Maps app uses the
// package name `com.google.android.apps.maps`. REQUIRED
func (c *AssetlinksCheckCall) TargetAndroidAppPackageName(targetAndroidAppPackageName string) *AssetlinksCheckCall {
	c.urlParams_.Set("target.androidApp.packageName", targetAndroidAppPackageName)
	return c
}

// TargetWebSite sets the optional parameter "target.web.site": Web assets are
// identified by a URL that contains only the scheme, hostname and port parts.
// The format is http[s]://[:] Hostnames must be fully qualified: they must end
// in a single period ("."). Only the schemes "http" and "https" are
// currently allowed. Port numbers are given as a decimal number, and they must
// be omitted if the standard port numbers are used: 80 for http and 443 for
// https. We call this limited URL the "site". All URLs that share the same
// scheme, hostname and port are considered to be a part of the site and thus
// belong to the web asset. Example: the asset with the site
// `https://www.google.com` contains all these URLs: *
// `https://www.google.com/` * `https://www.google.com:443/` *
// `https://www.google.com/foo` * `https://www.google.com/foo?bar` *
// `https://www.google.com/foo#bar` * `https://user@password:www.google.com/`
// But it does not contain these URLs: * `http://www.google.com/` (wrong
// scheme) * `https://google.com/` (hostname does not match) *
// `https://www.google.com:444/` (port does not match) REQUIRED
func (c *AssetlinksCheckCall) TargetWebSite(targetWebSite string) *AssetlinksCheckCall {
	c.urlParams_.Set("target.web.site", targetWebSite)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *AssetlinksCheckCall) Fields(s ...googleapi.Field) *AssetlinksCheckCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *AssetlinksCheckCall) IfNoneMatch(entityTag string) *AssetlinksCheckCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *AssetlinksCheckCall) Context(ctx context.Context) *AssetlinksCheckCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *AssetlinksCheckCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *AssetlinksCheckCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/assetlinks:check")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "digitalassetlinks.assetlinks.check", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "digitalassetlinks.assetlinks.check" call.
// Any non-2xx status code is an error. Response headers are in either
// *CheckResponse.ServerResponse.Header or (if a response was returned at all)
// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *AssetlinksCheckCall) Do(opts ...googleapi.CallOption) (*CheckResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &CheckResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "digitalassetlinks.assetlinks.check", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type StatementsListCall struct {
	s            *Service
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Retrieves a list of all statements from a given source that match the
// specified target and statement string. The API guarantees that all
// statements with secure source assets, such as HTTPS websites or Android
// apps, have been made in a secure way by the owner of those assets, as
// described in the Digital Asset Links technical design specification
// (https://github.com/google/digitalassetlinks/blob/master/well-known/details.md).
// Specifically, you should consider that for insecure websites (that is, where
// the URL starts with `http://` instead of `https://`), this guarantee cannot
// be made. The `List` command is most useful in cases where the API client
// wants to know all the ways in which two assets are related, or enumerate all
// the relationships from a particular source asset. Example: a feature that
// helps users navigate to related items. When a mobile app is running on a
// device, the feature would make it easy to navigate to the corresponding web
// site or Google+ profile.
func (r *StatementsService) List() *StatementsListCall {
	c := &StatementsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	return c
}

// Relation sets the optional parameter "relation": Use only associations that
// match the specified relation. See the `Statement` (#Statement) message for a
// detailed definition of relation strings. For a query to match a statement,
// one of the following must be true: * both the query's and the statement's
// relation strings match exactly, or * the query's relation string is empty or
// missing. Example: A query with relation
// `delegate_permission/common.handle_all_urls` matches an asset link with
// relation `delegate_permission/common.handle_all_urls`.
func (c *StatementsListCall) Relation(relation string) *StatementsListCall {
	c.urlParams_.Set("relation", relation)
	return c
}

// ReturnRelationExtensions sets the optional parameter
// "returnRelationExtensions": Whether to return any relation_extensions
// payloads specified in the source digital asset links statements. If this is
// set to `false` (default), relation_extensions specified will not be
// returned, even if they are specified in the DAL statement file. If set to
// `true`, the API will propagate relation_extensions associated with each
// statement's relation type, if specified in the DAL statement file.
func (c *StatementsListCall) ReturnRelationExtensions(returnRelationExtensions bool) *StatementsListCall {
	c.urlParams_.Set("returnRelationExtensions", fmt.Sprint(returnRelationExtensions))
	return c
}

// SourceAndroidAppCertificateSha256Fingerprint sets the optional parameter
// "source.androidApp.certificate.sha256Fingerprint": The uppercase SHA-265
// fingerprint of the certificate. From the PEM certificate, it can be acquired
// like this: $ keytool -printcert -file $CERTFILE | grep SHA256: SHA256:
// 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
// 42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5 or like this: $ openssl x509 -in
// $CERTFILE -noout -fingerprint -sha256 SHA256
// Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
// 16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5 In this example, the
// contents of this field would be `14:6D:E9:83:C5:73:
// 06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:
// 44:E5`. If these tools are not available to you, you can convert the PEM
// certificate into the DER format, compute the SHA-256 hash of that string and
// represent the result as a hexstring (that is, uppercase hexadecimal
// representations of each octet, separated by colons).
func (c *StatementsListCall) SourceAndroidAppCertificateSha256Fingerprint(sourceAndroidAppCertificateSha256Fingerprint string) *StatementsListCall {
	c.urlParams_.Set("source.androidApp.certificate.sha256Fingerprint", sourceAndroidAppCertificateSha256Fingerprint)
	return c
}

// SourceAndroidAppPackageName sets the optional parameter
// "source.androidApp.packageName": Android App assets are naturally identified
// by their Java package name. For example, the Google Maps app uses the
// package name `com.google.android.apps.maps`. REQUIRED
func (c *StatementsListCall) SourceAndroidAppPackageName(sourceAndroidAppPackageName string) *StatementsListCall {
	c.urlParams_.Set("source.androidApp.packageName", sourceAndroidAppPackageName)
	return c
}

// SourceWebSite sets the optional parameter "source.web.site": Web assets are
// identified by a URL that contains only the scheme, hostname and port parts.
// The format is http[s]://[:] Hostnames must be fully qualified: they must end
// in a single period ("."). Only the schemes "http" and "https" are
// currently allowed. Port numbers are given as a decimal number, and they must
// be omitted if the standard port numbers are used: 80 for http and 443 for
// https. We call this limited URL the "site". All URLs that share the same
// scheme, hostname and port are considered to be a part of the site and thus
// belong to the web asset. Example: the asset with the site
// `https://www.google.com` contains all these URLs: *
// `https://www.google.com/` * `https://www.google.com:443/` *
// `https://www.google.com/foo` * `https://www.google.com/foo?bar` *
// `https://www.google.com/foo#bar` * `https://user@password:www.google.com/`
// But it does not contain these URLs: * `http://www.google.com/` (wrong
// scheme) * `https://google.com/` (hostname does not match) *
// `https://www.google.com:444/` (port does not match) REQUIRED
func (c *StatementsListCall) SourceWebSite(sourceWebSite string) *StatementsListCall {
	c.urlParams_.Set("source.web.site", sourceWebSite)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *StatementsListCall) Fields(s ...googleapi.Field) *StatementsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *StatementsListCall) IfNoneMatch(entityTag string) *StatementsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *StatementsListCall) Context(ctx context.Context) *StatementsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *StatementsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *StatementsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/statements:list")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "digitalassetlinks.statements.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "digitalassetlinks.statements.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListResponse.ServerResponse.Header or (if a response was returned at all)
// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *StatementsListCall) Do(opts ...googleapi.CallOption) (*ListResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "digitalassetlinks.statements.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}
