text: // Copyright YEAR 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 additionalpropsobjs provides access to the Example API.
  //
  // Creating a client
  //
  // Usage example:
  //
  //   import "google.golang.org/api/additionalpropsobjs/v1"
  //   ...
  //   ctx := context.Background()
  //   additionalpropsobjsService, err := additionalpropsobjs.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 option.WithAPIKey:
  //
  //   additionalpropsobjsService, err := additionalpropsobjs.NewService(ctx, option.WithAPIKey("AIza..."))
  //
  // To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource:
  //
  //   config := &oauth2.Config{...}
  //   // ...
  //   token, err := config.Exchange(ctx, ...)
  //   additionalpropsobjsService, err := additionalpropsobjs.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
  //
  // See https://godoc.org/google.golang.org/api/option/ for details on options.
  package additionalpropsobjs // import "google.golang.org/api/additionalpropsobjs/v1"
  
  import (
  	"bytes"
  	"context"
  	"encoding/json"
  	"errors"
  	"fmt"
  	"io"
  	"net/http"
  	"net/url"
  	"strconv"
  	"strings"
  
  	gensupport "google.golang.org/api/gensupport"
  	googleapi "google.golang.org/api/googleapi"
  	option "google.golang.org/api/option"
  	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
  
  const apiId = "additionalpropsobjs:v1"
  const apiName = "additionalpropsobjs"
  const apiVersion = "v1"
  const basePath = "https://www.googleapis.com/discovery/v1/apis"
  
  // NewService creates a new Service.
  func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {
  	client, endpoint, err := htransport.NewClient(ctx, opts...)
  	if err != nil {
  		return nil, err
  	}
  	s, err := New(client)
  	if err != nil {
  		return nil, err
  	}
  	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")
  	}
  	s := &Service{client: client, BasePath: basePath}
  	return s, nil
  }
  
  type Service struct {
  	client    *http.Client
  	BasePath  string // API endpoint base URL
  	UserAgent string // optional additional User-Agent fragment
  }
  
  func (s *Service) userAgent() string {
  	if s.UserAgent == "" {
  		return googleapi.UserAgent
  	}
  	return googleapi.UserAgent + " " + s.UserAgent
  }
  
  type GeoJsonGeometry map[string]interface{}
  
  func (t GeoJsonGeometry) Type() string {
  	return googleapi.VariantType(t)
  }
  
  func (t GeoJsonGeometry) GeometryCollection() (r GeoJsonGeometryCollection, ok bool) {
  	if t.Type() != "GeometryCollection" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  func (t GeoJsonGeometry) LineString() (r GeoJsonLineString, ok bool) {
  	if t.Type() != "LineString" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  func (t GeoJsonGeometry) MultiLineString() (r GeoJsonMultiLineString, ok bool) {
  	if t.Type() != "MultiLineString" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  func (t GeoJsonGeometry) MultiPoint() (r GeoJsonMultiPoint, ok bool) {
  	if t.Type() != "MultiPoint" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  func (t GeoJsonGeometry) MultiPolygon() (r GeoJsonMultiPolygon, ok bool) {
  	if t.Type() != "MultiPolygon" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  func (t GeoJsonGeometry) Point() (r GeoJsonPoint, ok bool) {
  	if t.Type() != "Point" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  func (t GeoJsonGeometry) Polygon() (r GeoJsonPolygon, ok bool) {
  	if t.Type() != "Polygon" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  // GeoJsonGeometryCollection: A heterogenous collection of
  // GeoJsonGeometry objects.
  type GeoJsonGeometryCollection struct {
  	// Geometries: An array of geometry objects. There must be at least 2
  	// different types of geometries in the array.
  	Geometries []GeoJsonGeometry `json:"geometries,omitempty"`
  
  	// Type: Identifies this object as a GeoJsonGeometryCollection.
  	//
  	// Possible values:
  	//   "GeometryCollection"
  	Type string `json:"type,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "Geometries") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "Geometries") to include in
  	// API requests with the JSON null value. By default, fields with empty
  	// values are omitted from API requests. However, any field with an
  	// empty value appearing in NullFields will be sent to the server as
  	// null. It is an error if a field in this list has a non-empty value.
  	// This may be used to include null fields in Patch requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *GeoJsonGeometryCollection) MarshalJSON() ([]byte, error) {
  	type NoMethod GeoJsonGeometryCollection
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  type GeoJsonLineString struct {
  	// Coordinates: An array of two or more positions, representing a line.
  	Coordinates [][]float64 `json:"coordinates,omitempty"`
  
  	// Type: Identifies this object as a GeoJsonLineString.
  	//
  	// Possible values:
  	//   "LineString"
  	Type string `json:"type,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "Coordinates") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "Coordinates") to include
  	// in API requests with the JSON null value. By default, fields with
  	// empty values are omitted from API requests. However, any field with
  	// an empty value appearing in NullFields will be sent to the server as
  	// null. It is an error if a field in this list has a non-empty value.
  	// This may be used to include null fields in Patch requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *GeoJsonLineString) MarshalJSON() ([]byte, error) {
  	type NoMethod GeoJsonLineString
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  // GeoJsonMultiLineString: Multi Line String
  type GeoJsonMultiLineString struct {
  	// Coordinates: An array of at least two GeoJsonLineString coordinate
  	// arrays.
  	Coordinates [][][]float64 `json:"coordinates,omitempty"`
  
  	// Type: Identifies this object as a GeoJsonMultiLineString.
  	//
  	// Possible values:
  	//   "MultiLineString"
  	Type string `json:"type,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "Coordinates") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "Coordinates") to include
  	// in API requests with the JSON null value. By default, fields with
  	// empty values are omitted from API requests. However, any field with
  	// an empty value appearing in NullFields will be sent to the server as
  	// null. It is an error if a field in this list has a non-empty value.
  	// This may be used to include null fields in Patch requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *GeoJsonMultiLineString) MarshalJSON() ([]byte, error) {
  	type NoMethod GeoJsonMultiLineString
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  type GeoJsonMultiPoint struct {
  	// Coordinates: An array of at least two GeoJsonPoint coordinate arrays.
  	Coordinates [][]float64 `json:"coordinates,omitempty"`
  
  	// Type: Identifies this object as a GeoJsonMultiPoint.
  	//
  	// Possible values:
  	//   "MultiPoint"
  	Type string `json:"type,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "Coordinates") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "Coordinates") to include
  	// in API requests with the JSON null value. By default, fields with
  	// empty values are omitted from API requests. However, any field with
  	// an empty value appearing in NullFields will be sent to the server as
  	// null. It is an error if a field in this list has a non-empty value.
  	// This may be used to include null fields in Patch requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *GeoJsonMultiPoint) MarshalJSON() ([]byte, error) {
  	type NoMethod GeoJsonMultiPoint
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  type GeoJsonMultiPolygon struct {
  	// Coordinates: An array of at least two GeoJsonPolygon coordinate
  	// arrays.
  	Coordinates [][][][]float64 `json:"coordinates,omitempty"`
  
  	// Type: Identifies this object as a GeoJsonMultiPolygon.
  	//
  	// Possible values:
  	//   "MultiPolygon"
  	Type string `json:"type,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "Coordinates") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "Coordinates") to include
  	// in API requests with the JSON null value. By default, fields with
  	// empty values are omitted from API requests. However, any field with
  	// an empty value appearing in NullFields will be sent to the server as
  	// null. It is an error if a field in this list has a non-empty value.
  	// This may be used to include null fields in Patch requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *GeoJsonMultiPolygon) MarshalJSON() ([]byte, error) {
  	type NoMethod GeoJsonMultiPolygon
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  type GeoJsonPoint struct {
  	// Coordinates: A single GeoJsonPosition, specifying the location of the
  	// point.
  	Coordinates []float64 `json:"coordinates,omitempty"`
  
  	// Type: Identifies this object as a GeoJsonPoint.
  	//
  	// Possible values:
  	//   "Point"
  	Type string `json:"type,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "Coordinates") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "Coordinates") to include
  	// in API requests with the JSON null value. By default, fields with
  	// empty values are omitted from API requests. However, any field with
  	// an empty value appearing in NullFields will be sent to the server as
  	// null. It is an error if a field in this list has a non-empty value.
  	// This may be used to include null fields in Patch requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *GeoJsonPoint) MarshalJSON() ([]byte, error) {
  	type NoMethod GeoJsonPoint
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  type GeoJsonPolygon struct {
  	// Coordinates: An array of LinearRings, each of which is an array of
  	// four or more GeoJsonPositions. The first and last coordinates in each
  	// LinearRing must be the same. For polygons with multiple rings, the
  	// first LinearRing is the external ring, with subsequent rings being
  	// interior rings (i.e. hole). All LinearRings must contain
  	// GeoJsonPositions in counter-clockwise order.
  	Coordinates [][][]float64 `json:"coordinates,omitempty"`
  
  	// Type: Identifies this object as a GeoJsonPolygon.
  	//
  	// Possible values:
  	//   "Polygon"
  	Type string `json:"type,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "Coordinates") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "Coordinates") to include
  	// in API requests with the JSON null value. By default, fields with
  	// empty values are omitted from API requests. However, any field with
  	// an empty value appearing in NullFields will be sent to the server as
  	// null. It is an error if a field in this list has a non-empty value.
  	// This may be used to include null fields in Patch requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *GeoJsonPolygon) MarshalJSON() ([]byte, error) {
  	type NoMethod GeoJsonPolygon
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  type MapFolder struct {
  	Contents []MapItem `json:"contents,omitempty"`
  
  	// DefaultViewport: An array of four numbers (west, south, east, north)
  	// which defines the rectangular bounding box of the default viewport.
  	// The numbers represent latitude and longitude in decimal degrees.
  	DefaultViewport []float64 `json:"defaultViewport,omitempty"`
  
  	// Expandable: The expandability setting of this MapFolder. If true, the
  	// folder can be expanded.
  	Expandable bool `json:"expandable,omitempty"`
  
  	// Key: A user defined alias for this MapFolder, specific to this Map.
  	Key string `json:"key,omitempty"`
  
  	// Name: The name of this MapFolder.
  	Name string `json:"name,omitempty"`
  
  	// Type: Identifies this object as a MapFolder.
  	//
  	// Possible values:
  	//   "folder"
  	Type string `json:"type,omitempty"`
  
  	// Visibility: The visibility setting of this MapFolder. One of
  	// "defaultOn" or "defaultOff".
  	Visibility string `json:"visibility,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "Contents") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "Contents") to include in
  	// API requests with the JSON null value. By default, fields with empty
  	// values are omitted from API requests. However, any field with an
  	// empty value appearing in NullFields will be sent to the server as
  	// null. It is an error if a field in this list has a non-empty value.
  	// This may be used to include null fields in Patch requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *MapFolder) MarshalJSON() ([]byte, error) {
  	type NoMethod MapFolder
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  type MapItem map[string]interface{}
  
  func (t MapItem) Type() string {
  	return googleapi.VariantType(t)
  }
  
  func (t MapItem) Folder() (r MapFolder, ok bool) {
  	if t.Type() != "Folder" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  func (t MapItem) KmlLink() (r MapKmlLink, ok bool) {
  	if t.Type() != "KmlLink" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  func (t MapItem) Layer() (r MapLayer, ok bool) {
  	if t.Type() != "Layer" {
  		return r, false
  	}
  	ok = googleapi.ConvertVariant(map[string]interface{}(t), &r)
  	return r, ok
  }
  
  type MapKmlLink struct {
  	// DefaultViewport: An array of four numbers (west, south, east, north)
  	// which defines the rectangular bounding box of the default viewport.
  	// The numbers represent latitude and longitude in decimal degrees.
  	DefaultViewport []float64 `json:"defaultViewport,omitempty"`
  
  	// KmlUrl: The URL to the KML file represented by this MapKmlLink.
  	KmlUrl string `json:"kmlUrl,omitempty"`
  
  	// Name: The name of this MapKmlLink.
  	Name string `json:"name,omitempty"`
  
  	// Type: Identifies this object as a MapKmlLink.
  	//
  	// Possible values:
  	//   "kmlLink"
  	Type string `json:"type,omitempty"`
  
  	// Visibility: The visibility setting of this MapKmlLink. One of
  	// "defaultOn" or "defaultOff".
  	Visibility string `json:"visibility,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "DefaultViewport") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "DefaultViewport") to
  	// include in API requests with the JSON null value. By default, fields
  	// with empty values are omitted from API requests. However, any field
  	// with an empty value appearing in NullFields will be sent to the
  	// server as null. It is an error if a field in this list has a
  	// non-empty value. This may be used to include null fields in Patch
  	// requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *MapKmlLink) MarshalJSON() ([]byte, error) {
  	type NoMethod MapKmlLink
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  
  type MapLayer struct {
  	// DefaultViewport: An array of four numbers (west, south, east, north)
  	// which defines the rectangular bounding box of the default viewport.
  	// The numbers represent latitude and longitude in decimal degrees.
  	DefaultViewport []float64 `json:"defaultViewport,omitempty"`
  
  	// Id: The ID of this MapLayer. This ID can be used to request more
  	// details about the layer.
  	Id string `json:"id,omitempty"`
  
  	// Key: A user defined alias for this MapLayer, specific to this Map.
  	Key string `json:"key,omitempty"`
  
  	// Name: The name of this MapLayer.
  	Name string `json:"name,omitempty"`
  
  	// Type: Identifies this object as a MapLayer.
  	//
  	// Possible values:
  	//   "layer"
  	Type string `json:"type,omitempty"`
  
  	// Visibility: The visibility setting of this MapLayer. One of
  	// "defaultOn" or "defaultOff".
  	Visibility string `json:"visibility,omitempty"`
  
  	// ForceSendFields is a list of field names (e.g. "DefaultViewport") to
  	// unconditionally include in API requests. By default, fields with
  	// empty values are omitted from API requests. However, any non-pointer,
  	// non-interface field appearing in ForceSendFields will be sent to the
  	// server regardless of whether the field is empty or not. This may be
  	// used to include empty fields in Patch requests.
  	ForceSendFields []string `json:"-"`
  
  	// NullFields is a list of field names (e.g. "DefaultViewport") to
  	// include in API requests with the JSON null value. By default, fields
  	// with empty values are omitted from API requests. However, any field
  	// with an empty value appearing in NullFields will be sent to the
  	// server as null. It is an error if a field in this list has a
  	// non-empty value. This may be used to include null fields in Patch
  	// requests.
  	NullFields []string `json:"-"`
  }
  
  func (s *MapLayer) MarshalJSON() ([]byte, error) {
  	type NoMethod MapLayer
  	raw := NoMethod(*s)
  	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
  }
  