1package localsearch
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License. See License.txt in the project root for license information.
5//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"encoding/json"
11	"github.com/Azure/go-autorest/autorest"
12)
13
14// The package's fully qualified name.
15const fqdn = "github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v1.0/localsearch"
16
17// BasicAction defines an action.
18type BasicAction interface {
19	AsSearchAction() (*SearchAction, bool)
20	AsAction() (*Action, bool)
21}
22
23// Action defines an action.
24type Action struct {
25	// Location - READ-ONLY
26	Location *[]Place `json:"location,omitempty"`
27	// Result - READ-ONLY; The result produced in the action.
28	Result *[]BasicThing `json:"result,omitempty"`
29	// DisplayName - READ-ONLY; A display name for the action.
30	DisplayName *string `json:"displayName,omitempty"`
31	// IsTopAction - READ-ONLY; A Boolean representing whether this result is the top action.
32	IsTopAction *bool `json:"isTopAction,omitempty"`
33	// ServiceURL - READ-ONLY; Use this URL to get additional data to determine how to take the appropriate action. For example, the serviceUrl might return JSON along with an image URL.
34	ServiceURL *string `json:"serviceUrl,omitempty"`
35	// ThumbnailURL - READ-ONLY; The URL to a thumbnail of the item.
36	ThumbnailURL *string `json:"thumbnailUrl,omitempty"`
37	// About - READ-ONLY; For internal use only.
38	About *[]BasicThing `json:"about,omitempty"`
39	// Mentions - READ-ONLY; For internal use only.
40	Mentions *[]BasicThing `json:"mentions,omitempty"`
41	// Provider - READ-ONLY; The source of the creative work.
42	Provider *[]BasicThing `json:"provider,omitempty"`
43	// Creator - READ-ONLY
44	Creator BasicThing `json:"creator,omitempty"`
45	// Text - READ-ONLY; Text content of this creative work
46	Text *string `json:"text,omitempty"`
47	// DiscussionURL - READ-ONLY
48	DiscussionURL *string `json:"discussionUrl,omitempty"`
49	// CommentCount - READ-ONLY
50	CommentCount *int32 `json:"commentCount,omitempty"`
51	// MainEntity - READ-ONLY
52	MainEntity BasicThing `json:"mainEntity,omitempty"`
53	// HeadLine - READ-ONLY
54	HeadLine *string `json:"headLine,omitempty"`
55	// CopyrightHolder - READ-ONLY
56	CopyrightHolder BasicThing `json:"copyrightHolder,omitempty"`
57	// CopyrightYear - READ-ONLY
58	CopyrightYear *int32 `json:"copyrightYear,omitempty"`
59	// Disclaimer - READ-ONLY
60	Disclaimer *string `json:"disclaimer,omitempty"`
61	// IsAccessibleForFree - READ-ONLY
62	IsAccessibleForFree *bool `json:"isAccessibleForFree,omitempty"`
63	// Genre - READ-ONLY
64	Genre *[]string `json:"genre,omitempty"`
65	// IsFamilyFriendly - READ-ONLY
66	IsFamilyFriendly *bool `json:"isFamilyFriendly,omitempty"`
67	// Name - READ-ONLY; The name of the thing represented by this object.
68	Name *string `json:"name,omitempty"`
69	// URL - READ-ONLY; The URL to get more information about the thing represented by this object.
70	URL *string `json:"url,omitempty"`
71	// EntityPresentationInfo - READ-ONLY; Additional information about the entity such as hints that you can use to determine the entity's type. To determine the entity's type, use the entityScenario and entityTypeHint fields.
72	EntityPresentationInfo BasicEntitiesEntityPresentationInfo `json:"entityPresentationInfo,omitempty"`
73	// ReadLink - READ-ONLY; The URL that returns this resource.
74	ReadLink *string `json:"readLink,omitempty"`
75	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
76	WebSearchURL *string `json:"webSearchUrl,omitempty"`
77	// PotentialAction - READ-ONLY
78	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
79	// ImmediateAction - READ-ONLY
80	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
81	// PreferredClickthroughURL - READ-ONLY
82	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
83	// AdaptiveCard - READ-ONLY
84	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
85	// ID - READ-ONLY; A String identifier.
86	ID *string `json:"id,omitempty"`
87	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
88	Type TypeBasicResponseBase `json:"_type,omitempty"`
89}
90
91func unmarshalBasicAction(body []byte) (BasicAction, error) {
92	var m map[string]interface{}
93	err := json.Unmarshal(body, &m)
94	if err != nil {
95		return nil, err
96	}
97
98	switch m["_type"] {
99	case string(TypeSearchAction):
100		var sa SearchAction
101		err := json.Unmarshal(body, &sa)
102		return sa, err
103	default:
104		var a Action
105		err := json.Unmarshal(body, &a)
106		return a, err
107	}
108}
109func unmarshalBasicActionArray(body []byte) ([]BasicAction, error) {
110	var rawMessages []*json.RawMessage
111	err := json.Unmarshal(body, &rawMessages)
112	if err != nil {
113		return nil, err
114	}
115
116	aArray := make([]BasicAction, len(rawMessages))
117
118	for index, rawMessage := range rawMessages {
119		a, err := unmarshalBasicAction(*rawMessage)
120		if err != nil {
121			return nil, err
122		}
123		aArray[index] = a
124	}
125	return aArray, nil
126}
127
128// MarshalJSON is the custom marshaler for Action.
129func (a Action) MarshalJSON() ([]byte, error) {
130	a.Type = TypeAction
131	objectMap := make(map[string]interface{})
132	if a.Type != "" {
133		objectMap["_type"] = a.Type
134	}
135	return json.Marshal(objectMap)
136}
137
138// AsThing is the BasicResponseBase implementation for Action.
139func (a Action) AsThing() (*Thing, bool) {
140	return nil, false
141}
142
143// AsBasicThing is the BasicResponseBase implementation for Action.
144func (a Action) AsBasicThing() (BasicThing, bool) {
145	return &a, true
146}
147
148// AsPlaces is the BasicResponseBase implementation for Action.
149func (a Action) AsPlaces() (*Places, bool) {
150	return nil, false
151}
152
153// AsSearchResultsAnswer is the BasicResponseBase implementation for Action.
154func (a Action) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
155	return nil, false
156}
157
158// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for Action.
159func (a Action) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
160	return nil, false
161}
162
163// AsSearchResponse is the BasicResponseBase implementation for Action.
164func (a Action) AsSearchResponse() (*SearchResponse, bool) {
165	return nil, false
166}
167
168// AsPostalAddress is the BasicResponseBase implementation for Action.
169func (a Action) AsPostalAddress() (*PostalAddress, bool) {
170	return nil, false
171}
172
173// AsPlace is the BasicResponseBase implementation for Action.
174func (a Action) AsPlace() (*Place, bool) {
175	return nil, false
176}
177
178// AsAction is the BasicResponseBase implementation for Action.
179func (a Action) AsAction() (*Action, bool) {
180	return &a, true
181}
182
183// AsBasicAction is the BasicResponseBase implementation for Action.
184func (a Action) AsBasicAction() (BasicAction, bool) {
185	return &a, true
186}
187
188// AsResponse is the BasicResponseBase implementation for Action.
189func (a Action) AsResponse() (*Response, bool) {
190	return nil, false
191}
192
193// AsBasicResponse is the BasicResponseBase implementation for Action.
194func (a Action) AsBasicResponse() (BasicResponse, bool) {
195	return &a, true
196}
197
198// AsIdentifiable is the BasicResponseBase implementation for Action.
199func (a Action) AsIdentifiable() (*Identifiable, bool) {
200	return nil, false
201}
202
203// AsBasicIdentifiable is the BasicResponseBase implementation for Action.
204func (a Action) AsBasicIdentifiable() (BasicIdentifiable, bool) {
205	return &a, true
206}
207
208// AsAnswer is the BasicResponseBase implementation for Action.
209func (a Action) AsAnswer() (*Answer, bool) {
210	return nil, false
211}
212
213// AsBasicAnswer is the BasicResponseBase implementation for Action.
214func (a Action) AsBasicAnswer() (BasicAnswer, bool) {
215	return nil, false
216}
217
218// AsErrorResponse is the BasicResponseBase implementation for Action.
219func (a Action) AsErrorResponse() (*ErrorResponse, bool) {
220	return nil, false
221}
222
223// AsCreativeWork is the BasicResponseBase implementation for Action.
224func (a Action) AsCreativeWork() (*CreativeWork, bool) {
225	return nil, false
226}
227
228// AsBasicCreativeWork is the BasicResponseBase implementation for Action.
229func (a Action) AsBasicCreativeWork() (BasicCreativeWork, bool) {
230	return &a, true
231}
232
233// AsIntangible is the BasicResponseBase implementation for Action.
234func (a Action) AsIntangible() (*Intangible, bool) {
235	return nil, false
236}
237
238// AsBasicIntangible is the BasicResponseBase implementation for Action.
239func (a Action) AsBasicIntangible() (BasicIntangible, bool) {
240	return nil, false
241}
242
243// AsSearchAction is the BasicResponseBase implementation for Action.
244func (a Action) AsSearchAction() (*SearchAction, bool) {
245	return nil, false
246}
247
248// AsStructuredValue is the BasicResponseBase implementation for Action.
249func (a Action) AsStructuredValue() (*StructuredValue, bool) {
250	return nil, false
251}
252
253// AsBasicStructuredValue is the BasicResponseBase implementation for Action.
254func (a Action) AsBasicStructuredValue() (BasicStructuredValue, bool) {
255	return nil, false
256}
257
258// AsResponseBase is the BasicResponseBase implementation for Action.
259func (a Action) AsResponseBase() (*ResponseBase, bool) {
260	return nil, false
261}
262
263// AsBasicResponseBase is the BasicResponseBase implementation for Action.
264func (a Action) AsBasicResponseBase() (BasicResponseBase, bool) {
265	return &a, true
266}
267
268// UnmarshalJSON is the custom unmarshaler for Action struct.
269func (a *Action) UnmarshalJSON(body []byte) error {
270	var m map[string]*json.RawMessage
271	err := json.Unmarshal(body, &m)
272	if err != nil {
273		return err
274	}
275	for k, v := range m {
276		switch k {
277		case "location":
278			if v != nil {
279				var location []Place
280				err = json.Unmarshal(*v, &location)
281				if err != nil {
282					return err
283				}
284				a.Location = &location
285			}
286		case "result":
287			if v != nil {
288				resultVar, err := unmarshalBasicThingArray(*v)
289				if err != nil {
290					return err
291				}
292				a.Result = &resultVar
293			}
294		case "displayName":
295			if v != nil {
296				var displayName string
297				err = json.Unmarshal(*v, &displayName)
298				if err != nil {
299					return err
300				}
301				a.DisplayName = &displayName
302			}
303		case "isTopAction":
304			if v != nil {
305				var isTopAction bool
306				err = json.Unmarshal(*v, &isTopAction)
307				if err != nil {
308					return err
309				}
310				a.IsTopAction = &isTopAction
311			}
312		case "serviceUrl":
313			if v != nil {
314				var serviceURL string
315				err = json.Unmarshal(*v, &serviceURL)
316				if err != nil {
317					return err
318				}
319				a.ServiceURL = &serviceURL
320			}
321		case "thumbnailUrl":
322			if v != nil {
323				var thumbnailURL string
324				err = json.Unmarshal(*v, &thumbnailURL)
325				if err != nil {
326					return err
327				}
328				a.ThumbnailURL = &thumbnailURL
329			}
330		case "about":
331			if v != nil {
332				about, err := unmarshalBasicThingArray(*v)
333				if err != nil {
334					return err
335				}
336				a.About = &about
337			}
338		case "mentions":
339			if v != nil {
340				mentions, err := unmarshalBasicThingArray(*v)
341				if err != nil {
342					return err
343				}
344				a.Mentions = &mentions
345			}
346		case "provider":
347			if v != nil {
348				provider, err := unmarshalBasicThingArray(*v)
349				if err != nil {
350					return err
351				}
352				a.Provider = &provider
353			}
354		case "creator":
355			if v != nil {
356				creator, err := unmarshalBasicThing(*v)
357				if err != nil {
358					return err
359				}
360				a.Creator = creator
361			}
362		case "text":
363			if v != nil {
364				var textVar string
365				err = json.Unmarshal(*v, &textVar)
366				if err != nil {
367					return err
368				}
369				a.Text = &textVar
370			}
371		case "discussionUrl":
372			if v != nil {
373				var discussionURL string
374				err = json.Unmarshal(*v, &discussionURL)
375				if err != nil {
376					return err
377				}
378				a.DiscussionURL = &discussionURL
379			}
380		case "commentCount":
381			if v != nil {
382				var commentCount int32
383				err = json.Unmarshal(*v, &commentCount)
384				if err != nil {
385					return err
386				}
387				a.CommentCount = &commentCount
388			}
389		case "mainEntity":
390			if v != nil {
391				mainEntity, err := unmarshalBasicThing(*v)
392				if err != nil {
393					return err
394				}
395				a.MainEntity = mainEntity
396			}
397		case "headLine":
398			if v != nil {
399				var headLine string
400				err = json.Unmarshal(*v, &headLine)
401				if err != nil {
402					return err
403				}
404				a.HeadLine = &headLine
405			}
406		case "copyrightHolder":
407			if v != nil {
408				copyrightHolder, err := unmarshalBasicThing(*v)
409				if err != nil {
410					return err
411				}
412				a.CopyrightHolder = copyrightHolder
413			}
414		case "copyrightYear":
415			if v != nil {
416				var copyrightYear int32
417				err = json.Unmarshal(*v, &copyrightYear)
418				if err != nil {
419					return err
420				}
421				a.CopyrightYear = &copyrightYear
422			}
423		case "disclaimer":
424			if v != nil {
425				var disclaimer string
426				err = json.Unmarshal(*v, &disclaimer)
427				if err != nil {
428					return err
429				}
430				a.Disclaimer = &disclaimer
431			}
432		case "isAccessibleForFree":
433			if v != nil {
434				var isAccessibleForFree bool
435				err = json.Unmarshal(*v, &isAccessibleForFree)
436				if err != nil {
437					return err
438				}
439				a.IsAccessibleForFree = &isAccessibleForFree
440			}
441		case "genre":
442			if v != nil {
443				var genre []string
444				err = json.Unmarshal(*v, &genre)
445				if err != nil {
446					return err
447				}
448				a.Genre = &genre
449			}
450		case "isFamilyFriendly":
451			if v != nil {
452				var isFamilyFriendly bool
453				err = json.Unmarshal(*v, &isFamilyFriendly)
454				if err != nil {
455					return err
456				}
457				a.IsFamilyFriendly = &isFamilyFriendly
458			}
459		case "name":
460			if v != nil {
461				var name string
462				err = json.Unmarshal(*v, &name)
463				if err != nil {
464					return err
465				}
466				a.Name = &name
467			}
468		case "url":
469			if v != nil {
470				var URL string
471				err = json.Unmarshal(*v, &URL)
472				if err != nil {
473					return err
474				}
475				a.URL = &URL
476			}
477		case "entityPresentationInfo":
478			if v != nil {
479				entityPresentationInfo, err := unmarshalBasicEntitiesEntityPresentationInfo(*v)
480				if err != nil {
481					return err
482				}
483				a.EntityPresentationInfo = entityPresentationInfo
484			}
485		case "readLink":
486			if v != nil {
487				var readLink string
488				err = json.Unmarshal(*v, &readLink)
489				if err != nil {
490					return err
491				}
492				a.ReadLink = &readLink
493			}
494		case "webSearchUrl":
495			if v != nil {
496				var webSearchURL string
497				err = json.Unmarshal(*v, &webSearchURL)
498				if err != nil {
499					return err
500				}
501				a.WebSearchURL = &webSearchURL
502			}
503		case "potentialAction":
504			if v != nil {
505				potentialAction, err := unmarshalBasicActionArray(*v)
506				if err != nil {
507					return err
508				}
509				a.PotentialAction = &potentialAction
510			}
511		case "immediateAction":
512			if v != nil {
513				immediateAction, err := unmarshalBasicActionArray(*v)
514				if err != nil {
515					return err
516				}
517				a.ImmediateAction = &immediateAction
518			}
519		case "preferredClickthroughUrl":
520			if v != nil {
521				var preferredClickthroughURL string
522				err = json.Unmarshal(*v, &preferredClickthroughURL)
523				if err != nil {
524					return err
525				}
526				a.PreferredClickthroughURL = &preferredClickthroughURL
527			}
528		case "adaptiveCard":
529			if v != nil {
530				var adaptiveCard string
531				err = json.Unmarshal(*v, &adaptiveCard)
532				if err != nil {
533					return err
534				}
535				a.AdaptiveCard = &adaptiveCard
536			}
537		case "id":
538			if v != nil {
539				var ID string
540				err = json.Unmarshal(*v, &ID)
541				if err != nil {
542					return err
543				}
544				a.ID = &ID
545			}
546		case "_type":
547			if v != nil {
548				var typeVar TypeBasicResponseBase
549				err = json.Unmarshal(*v, &typeVar)
550				if err != nil {
551					return err
552				}
553				a.Type = typeVar
554			}
555		}
556	}
557
558	return nil
559}
560
561// BasicAnswer defines an answer.
562type BasicAnswer interface {
563	AsPlaces() (*Places, bool)
564	AsSearchResultsAnswer() (*SearchResultsAnswer, bool)
565	AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool)
566	AsAnswer() (*Answer, bool)
567}
568
569// Answer defines an answer.
570type Answer struct {
571	// ReadLink - READ-ONLY; The URL that returns this resource.
572	ReadLink *string `json:"readLink,omitempty"`
573	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
574	WebSearchURL *string `json:"webSearchUrl,omitempty"`
575	// PotentialAction - READ-ONLY
576	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
577	// ImmediateAction - READ-ONLY
578	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
579	// PreferredClickthroughURL - READ-ONLY
580	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
581	// AdaptiveCard - READ-ONLY
582	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
583	// ID - READ-ONLY; A String identifier.
584	ID *string `json:"id,omitempty"`
585	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
586	Type TypeBasicResponseBase `json:"_type,omitempty"`
587}
588
589func unmarshalBasicAnswer(body []byte) (BasicAnswer, error) {
590	var m map[string]interface{}
591	err := json.Unmarshal(body, &m)
592	if err != nil {
593		return nil, err
594	}
595
596	switch m["_type"] {
597	case string(TypePlaces):
598		var p Places
599		err := json.Unmarshal(body, &p)
600		return p, err
601	case string(TypeSearchResultsAnswer):
602		var sra SearchResultsAnswer
603		err := json.Unmarshal(body, &sra)
604		return sra, err
605	default:
606		var a Answer
607		err := json.Unmarshal(body, &a)
608		return a, err
609	}
610}
611func unmarshalBasicAnswerArray(body []byte) ([]BasicAnswer, error) {
612	var rawMessages []*json.RawMessage
613	err := json.Unmarshal(body, &rawMessages)
614	if err != nil {
615		return nil, err
616	}
617
618	aArray := make([]BasicAnswer, len(rawMessages))
619
620	for index, rawMessage := range rawMessages {
621		a, err := unmarshalBasicAnswer(*rawMessage)
622		if err != nil {
623			return nil, err
624		}
625		aArray[index] = a
626	}
627	return aArray, nil
628}
629
630// MarshalJSON is the custom marshaler for Answer.
631func (a Answer) MarshalJSON() ([]byte, error) {
632	a.Type = TypeAnswer
633	objectMap := make(map[string]interface{})
634	if a.Type != "" {
635		objectMap["_type"] = a.Type
636	}
637	return json.Marshal(objectMap)
638}
639
640// AsThing is the BasicResponseBase implementation for Answer.
641func (a Answer) AsThing() (*Thing, bool) {
642	return nil, false
643}
644
645// AsBasicThing is the BasicResponseBase implementation for Answer.
646func (a Answer) AsBasicThing() (BasicThing, bool) {
647	return nil, false
648}
649
650// AsPlaces is the BasicResponseBase implementation for Answer.
651func (a Answer) AsPlaces() (*Places, bool) {
652	return nil, false
653}
654
655// AsSearchResultsAnswer is the BasicResponseBase implementation for Answer.
656func (a Answer) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
657	return nil, false
658}
659
660// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for Answer.
661func (a Answer) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
662	return nil, false
663}
664
665// AsSearchResponse is the BasicResponseBase implementation for Answer.
666func (a Answer) AsSearchResponse() (*SearchResponse, bool) {
667	return nil, false
668}
669
670// AsPostalAddress is the BasicResponseBase implementation for Answer.
671func (a Answer) AsPostalAddress() (*PostalAddress, bool) {
672	return nil, false
673}
674
675// AsPlace is the BasicResponseBase implementation for Answer.
676func (a Answer) AsPlace() (*Place, bool) {
677	return nil, false
678}
679
680// AsAction is the BasicResponseBase implementation for Answer.
681func (a Answer) AsAction() (*Action, bool) {
682	return nil, false
683}
684
685// AsBasicAction is the BasicResponseBase implementation for Answer.
686func (a Answer) AsBasicAction() (BasicAction, bool) {
687	return nil, false
688}
689
690// AsResponse is the BasicResponseBase implementation for Answer.
691func (a Answer) AsResponse() (*Response, bool) {
692	return nil, false
693}
694
695// AsBasicResponse is the BasicResponseBase implementation for Answer.
696func (a Answer) AsBasicResponse() (BasicResponse, bool) {
697	return &a, true
698}
699
700// AsIdentifiable is the BasicResponseBase implementation for Answer.
701func (a Answer) AsIdentifiable() (*Identifiable, bool) {
702	return nil, false
703}
704
705// AsBasicIdentifiable is the BasicResponseBase implementation for Answer.
706func (a Answer) AsBasicIdentifiable() (BasicIdentifiable, bool) {
707	return &a, true
708}
709
710// AsAnswer is the BasicResponseBase implementation for Answer.
711func (a Answer) AsAnswer() (*Answer, bool) {
712	return &a, true
713}
714
715// AsBasicAnswer is the BasicResponseBase implementation for Answer.
716func (a Answer) AsBasicAnswer() (BasicAnswer, bool) {
717	return &a, true
718}
719
720// AsErrorResponse is the BasicResponseBase implementation for Answer.
721func (a Answer) AsErrorResponse() (*ErrorResponse, bool) {
722	return nil, false
723}
724
725// AsCreativeWork is the BasicResponseBase implementation for Answer.
726func (a Answer) AsCreativeWork() (*CreativeWork, bool) {
727	return nil, false
728}
729
730// AsBasicCreativeWork is the BasicResponseBase implementation for Answer.
731func (a Answer) AsBasicCreativeWork() (BasicCreativeWork, bool) {
732	return nil, false
733}
734
735// AsIntangible is the BasicResponseBase implementation for Answer.
736func (a Answer) AsIntangible() (*Intangible, bool) {
737	return nil, false
738}
739
740// AsBasicIntangible is the BasicResponseBase implementation for Answer.
741func (a Answer) AsBasicIntangible() (BasicIntangible, bool) {
742	return nil, false
743}
744
745// AsSearchAction is the BasicResponseBase implementation for Answer.
746func (a Answer) AsSearchAction() (*SearchAction, bool) {
747	return nil, false
748}
749
750// AsStructuredValue is the BasicResponseBase implementation for Answer.
751func (a Answer) AsStructuredValue() (*StructuredValue, bool) {
752	return nil, false
753}
754
755// AsBasicStructuredValue is the BasicResponseBase implementation for Answer.
756func (a Answer) AsBasicStructuredValue() (BasicStructuredValue, bool) {
757	return nil, false
758}
759
760// AsResponseBase is the BasicResponseBase implementation for Answer.
761func (a Answer) AsResponseBase() (*ResponseBase, bool) {
762	return nil, false
763}
764
765// AsBasicResponseBase is the BasicResponseBase implementation for Answer.
766func (a Answer) AsBasicResponseBase() (BasicResponseBase, bool) {
767	return &a, true
768}
769
770// UnmarshalJSON is the custom unmarshaler for Answer struct.
771func (a *Answer) UnmarshalJSON(body []byte) error {
772	var m map[string]*json.RawMessage
773	err := json.Unmarshal(body, &m)
774	if err != nil {
775		return err
776	}
777	for k, v := range m {
778		switch k {
779		case "readLink":
780			if v != nil {
781				var readLink string
782				err = json.Unmarshal(*v, &readLink)
783				if err != nil {
784					return err
785				}
786				a.ReadLink = &readLink
787			}
788		case "webSearchUrl":
789			if v != nil {
790				var webSearchURL string
791				err = json.Unmarshal(*v, &webSearchURL)
792				if err != nil {
793					return err
794				}
795				a.WebSearchURL = &webSearchURL
796			}
797		case "potentialAction":
798			if v != nil {
799				potentialAction, err := unmarshalBasicActionArray(*v)
800				if err != nil {
801					return err
802				}
803				a.PotentialAction = &potentialAction
804			}
805		case "immediateAction":
806			if v != nil {
807				immediateAction, err := unmarshalBasicActionArray(*v)
808				if err != nil {
809					return err
810				}
811				a.ImmediateAction = &immediateAction
812			}
813		case "preferredClickthroughUrl":
814			if v != nil {
815				var preferredClickthroughURL string
816				err = json.Unmarshal(*v, &preferredClickthroughURL)
817				if err != nil {
818					return err
819				}
820				a.PreferredClickthroughURL = &preferredClickthroughURL
821			}
822		case "adaptiveCard":
823			if v != nil {
824				var adaptiveCard string
825				err = json.Unmarshal(*v, &adaptiveCard)
826				if err != nil {
827					return err
828				}
829				a.AdaptiveCard = &adaptiveCard
830			}
831		case "id":
832			if v != nil {
833				var ID string
834				err = json.Unmarshal(*v, &ID)
835				if err != nil {
836					return err
837				}
838				a.ID = &ID
839			}
840		case "_type":
841			if v != nil {
842				var typeVar TypeBasicResponseBase
843				err = json.Unmarshal(*v, &typeVar)
844				if err != nil {
845					return err
846				}
847				a.Type = typeVar
848			}
849		}
850	}
851
852	return nil
853}
854
855// BasicCreativeWork the most generic kind of creative work, including books, movies, photographs, software programs,
856// etc.
857type BasicCreativeWork interface {
858	AsAction() (*Action, bool)
859	AsBasicAction() (BasicAction, bool)
860	AsSearchAction() (*SearchAction, bool)
861	AsCreativeWork() (*CreativeWork, bool)
862}
863
864// CreativeWork the most generic kind of creative work, including books, movies, photographs, software
865// programs, etc.
866type CreativeWork struct {
867	// ThumbnailURL - READ-ONLY; The URL to a thumbnail of the item.
868	ThumbnailURL *string `json:"thumbnailUrl,omitempty"`
869	// About - READ-ONLY; For internal use only.
870	About *[]BasicThing `json:"about,omitempty"`
871	// Mentions - READ-ONLY; For internal use only.
872	Mentions *[]BasicThing `json:"mentions,omitempty"`
873	// Provider - READ-ONLY; The source of the creative work.
874	Provider *[]BasicThing `json:"provider,omitempty"`
875	// Creator - READ-ONLY
876	Creator BasicThing `json:"creator,omitempty"`
877	// Text - READ-ONLY; Text content of this creative work
878	Text *string `json:"text,omitempty"`
879	// DiscussionURL - READ-ONLY
880	DiscussionURL *string `json:"discussionUrl,omitempty"`
881	// CommentCount - READ-ONLY
882	CommentCount *int32 `json:"commentCount,omitempty"`
883	// MainEntity - READ-ONLY
884	MainEntity BasicThing `json:"mainEntity,omitempty"`
885	// HeadLine - READ-ONLY
886	HeadLine *string `json:"headLine,omitempty"`
887	// CopyrightHolder - READ-ONLY
888	CopyrightHolder BasicThing `json:"copyrightHolder,omitempty"`
889	// CopyrightYear - READ-ONLY
890	CopyrightYear *int32 `json:"copyrightYear,omitempty"`
891	// Disclaimer - READ-ONLY
892	Disclaimer *string `json:"disclaimer,omitempty"`
893	// IsAccessibleForFree - READ-ONLY
894	IsAccessibleForFree *bool `json:"isAccessibleForFree,omitempty"`
895	// Genre - READ-ONLY
896	Genre *[]string `json:"genre,omitempty"`
897	// IsFamilyFriendly - READ-ONLY
898	IsFamilyFriendly *bool `json:"isFamilyFriendly,omitempty"`
899	// Name - READ-ONLY; The name of the thing represented by this object.
900	Name *string `json:"name,omitempty"`
901	// URL - READ-ONLY; The URL to get more information about the thing represented by this object.
902	URL *string `json:"url,omitempty"`
903	// EntityPresentationInfo - READ-ONLY; Additional information about the entity such as hints that you can use to determine the entity's type. To determine the entity's type, use the entityScenario and entityTypeHint fields.
904	EntityPresentationInfo BasicEntitiesEntityPresentationInfo `json:"entityPresentationInfo,omitempty"`
905	// ReadLink - READ-ONLY; The URL that returns this resource.
906	ReadLink *string `json:"readLink,omitempty"`
907	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
908	WebSearchURL *string `json:"webSearchUrl,omitempty"`
909	// PotentialAction - READ-ONLY
910	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
911	// ImmediateAction - READ-ONLY
912	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
913	// PreferredClickthroughURL - READ-ONLY
914	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
915	// AdaptiveCard - READ-ONLY
916	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
917	// ID - READ-ONLY; A String identifier.
918	ID *string `json:"id,omitempty"`
919	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
920	Type TypeBasicResponseBase `json:"_type,omitempty"`
921}
922
923func unmarshalBasicCreativeWork(body []byte) (BasicCreativeWork, error) {
924	var m map[string]interface{}
925	err := json.Unmarshal(body, &m)
926	if err != nil {
927		return nil, err
928	}
929
930	switch m["_type"] {
931	case string(TypeAction):
932		var a Action
933		err := json.Unmarshal(body, &a)
934		return a, err
935	case string(TypeSearchAction):
936		var sa SearchAction
937		err := json.Unmarshal(body, &sa)
938		return sa, err
939	default:
940		var cw CreativeWork
941		err := json.Unmarshal(body, &cw)
942		return cw, err
943	}
944}
945func unmarshalBasicCreativeWorkArray(body []byte) ([]BasicCreativeWork, error) {
946	var rawMessages []*json.RawMessage
947	err := json.Unmarshal(body, &rawMessages)
948	if err != nil {
949		return nil, err
950	}
951
952	cwArray := make([]BasicCreativeWork, len(rawMessages))
953
954	for index, rawMessage := range rawMessages {
955		cw, err := unmarshalBasicCreativeWork(*rawMessage)
956		if err != nil {
957			return nil, err
958		}
959		cwArray[index] = cw
960	}
961	return cwArray, nil
962}
963
964// MarshalJSON is the custom marshaler for CreativeWork.
965func (cw CreativeWork) MarshalJSON() ([]byte, error) {
966	cw.Type = TypeCreativeWork
967	objectMap := make(map[string]interface{})
968	if cw.Type != "" {
969		objectMap["_type"] = cw.Type
970	}
971	return json.Marshal(objectMap)
972}
973
974// AsThing is the BasicResponseBase implementation for CreativeWork.
975func (cw CreativeWork) AsThing() (*Thing, bool) {
976	return nil, false
977}
978
979// AsBasicThing is the BasicResponseBase implementation for CreativeWork.
980func (cw CreativeWork) AsBasicThing() (BasicThing, bool) {
981	return &cw, true
982}
983
984// AsPlaces is the BasicResponseBase implementation for CreativeWork.
985func (cw CreativeWork) AsPlaces() (*Places, bool) {
986	return nil, false
987}
988
989// AsSearchResultsAnswer is the BasicResponseBase implementation for CreativeWork.
990func (cw CreativeWork) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
991	return nil, false
992}
993
994// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for CreativeWork.
995func (cw CreativeWork) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
996	return nil, false
997}
998
999// AsSearchResponse is the BasicResponseBase implementation for CreativeWork.
1000func (cw CreativeWork) AsSearchResponse() (*SearchResponse, bool) {
1001	return nil, false
1002}
1003
1004// AsPostalAddress is the BasicResponseBase implementation for CreativeWork.
1005func (cw CreativeWork) AsPostalAddress() (*PostalAddress, bool) {
1006	return nil, false
1007}
1008
1009// AsPlace is the BasicResponseBase implementation for CreativeWork.
1010func (cw CreativeWork) AsPlace() (*Place, bool) {
1011	return nil, false
1012}
1013
1014// AsAction is the BasicResponseBase implementation for CreativeWork.
1015func (cw CreativeWork) AsAction() (*Action, bool) {
1016	return nil, false
1017}
1018
1019// AsBasicAction is the BasicResponseBase implementation for CreativeWork.
1020func (cw CreativeWork) AsBasicAction() (BasicAction, bool) {
1021	return nil, false
1022}
1023
1024// AsResponse is the BasicResponseBase implementation for CreativeWork.
1025func (cw CreativeWork) AsResponse() (*Response, bool) {
1026	return nil, false
1027}
1028
1029// AsBasicResponse is the BasicResponseBase implementation for CreativeWork.
1030func (cw CreativeWork) AsBasicResponse() (BasicResponse, bool) {
1031	return &cw, true
1032}
1033
1034// AsIdentifiable is the BasicResponseBase implementation for CreativeWork.
1035func (cw CreativeWork) AsIdentifiable() (*Identifiable, bool) {
1036	return nil, false
1037}
1038
1039// AsBasicIdentifiable is the BasicResponseBase implementation for CreativeWork.
1040func (cw CreativeWork) AsBasicIdentifiable() (BasicIdentifiable, bool) {
1041	return &cw, true
1042}
1043
1044// AsAnswer is the BasicResponseBase implementation for CreativeWork.
1045func (cw CreativeWork) AsAnswer() (*Answer, bool) {
1046	return nil, false
1047}
1048
1049// AsBasicAnswer is the BasicResponseBase implementation for CreativeWork.
1050func (cw CreativeWork) AsBasicAnswer() (BasicAnswer, bool) {
1051	return nil, false
1052}
1053
1054// AsErrorResponse is the BasicResponseBase implementation for CreativeWork.
1055func (cw CreativeWork) AsErrorResponse() (*ErrorResponse, bool) {
1056	return nil, false
1057}
1058
1059// AsCreativeWork is the BasicResponseBase implementation for CreativeWork.
1060func (cw CreativeWork) AsCreativeWork() (*CreativeWork, bool) {
1061	return &cw, true
1062}
1063
1064// AsBasicCreativeWork is the BasicResponseBase implementation for CreativeWork.
1065func (cw CreativeWork) AsBasicCreativeWork() (BasicCreativeWork, bool) {
1066	return &cw, true
1067}
1068
1069// AsIntangible is the BasicResponseBase implementation for CreativeWork.
1070func (cw CreativeWork) AsIntangible() (*Intangible, bool) {
1071	return nil, false
1072}
1073
1074// AsBasicIntangible is the BasicResponseBase implementation for CreativeWork.
1075func (cw CreativeWork) AsBasicIntangible() (BasicIntangible, bool) {
1076	return nil, false
1077}
1078
1079// AsSearchAction is the BasicResponseBase implementation for CreativeWork.
1080func (cw CreativeWork) AsSearchAction() (*SearchAction, bool) {
1081	return nil, false
1082}
1083
1084// AsStructuredValue is the BasicResponseBase implementation for CreativeWork.
1085func (cw CreativeWork) AsStructuredValue() (*StructuredValue, bool) {
1086	return nil, false
1087}
1088
1089// AsBasicStructuredValue is the BasicResponseBase implementation for CreativeWork.
1090func (cw CreativeWork) AsBasicStructuredValue() (BasicStructuredValue, bool) {
1091	return nil, false
1092}
1093
1094// AsResponseBase is the BasicResponseBase implementation for CreativeWork.
1095func (cw CreativeWork) AsResponseBase() (*ResponseBase, bool) {
1096	return nil, false
1097}
1098
1099// AsBasicResponseBase is the BasicResponseBase implementation for CreativeWork.
1100func (cw CreativeWork) AsBasicResponseBase() (BasicResponseBase, bool) {
1101	return &cw, true
1102}
1103
1104// UnmarshalJSON is the custom unmarshaler for CreativeWork struct.
1105func (cw *CreativeWork) UnmarshalJSON(body []byte) error {
1106	var m map[string]*json.RawMessage
1107	err := json.Unmarshal(body, &m)
1108	if err != nil {
1109		return err
1110	}
1111	for k, v := range m {
1112		switch k {
1113		case "thumbnailUrl":
1114			if v != nil {
1115				var thumbnailURL string
1116				err = json.Unmarshal(*v, &thumbnailURL)
1117				if err != nil {
1118					return err
1119				}
1120				cw.ThumbnailURL = &thumbnailURL
1121			}
1122		case "about":
1123			if v != nil {
1124				about, err := unmarshalBasicThingArray(*v)
1125				if err != nil {
1126					return err
1127				}
1128				cw.About = &about
1129			}
1130		case "mentions":
1131			if v != nil {
1132				mentions, err := unmarshalBasicThingArray(*v)
1133				if err != nil {
1134					return err
1135				}
1136				cw.Mentions = &mentions
1137			}
1138		case "provider":
1139			if v != nil {
1140				provider, err := unmarshalBasicThingArray(*v)
1141				if err != nil {
1142					return err
1143				}
1144				cw.Provider = &provider
1145			}
1146		case "creator":
1147			if v != nil {
1148				creator, err := unmarshalBasicThing(*v)
1149				if err != nil {
1150					return err
1151				}
1152				cw.Creator = creator
1153			}
1154		case "text":
1155			if v != nil {
1156				var textVar string
1157				err = json.Unmarshal(*v, &textVar)
1158				if err != nil {
1159					return err
1160				}
1161				cw.Text = &textVar
1162			}
1163		case "discussionUrl":
1164			if v != nil {
1165				var discussionURL string
1166				err = json.Unmarshal(*v, &discussionURL)
1167				if err != nil {
1168					return err
1169				}
1170				cw.DiscussionURL = &discussionURL
1171			}
1172		case "commentCount":
1173			if v != nil {
1174				var commentCount int32
1175				err = json.Unmarshal(*v, &commentCount)
1176				if err != nil {
1177					return err
1178				}
1179				cw.CommentCount = &commentCount
1180			}
1181		case "mainEntity":
1182			if v != nil {
1183				mainEntity, err := unmarshalBasicThing(*v)
1184				if err != nil {
1185					return err
1186				}
1187				cw.MainEntity = mainEntity
1188			}
1189		case "headLine":
1190			if v != nil {
1191				var headLine string
1192				err = json.Unmarshal(*v, &headLine)
1193				if err != nil {
1194					return err
1195				}
1196				cw.HeadLine = &headLine
1197			}
1198		case "copyrightHolder":
1199			if v != nil {
1200				copyrightHolder, err := unmarshalBasicThing(*v)
1201				if err != nil {
1202					return err
1203				}
1204				cw.CopyrightHolder = copyrightHolder
1205			}
1206		case "copyrightYear":
1207			if v != nil {
1208				var copyrightYear int32
1209				err = json.Unmarshal(*v, &copyrightYear)
1210				if err != nil {
1211					return err
1212				}
1213				cw.CopyrightYear = &copyrightYear
1214			}
1215		case "disclaimer":
1216			if v != nil {
1217				var disclaimer string
1218				err = json.Unmarshal(*v, &disclaimer)
1219				if err != nil {
1220					return err
1221				}
1222				cw.Disclaimer = &disclaimer
1223			}
1224		case "isAccessibleForFree":
1225			if v != nil {
1226				var isAccessibleForFree bool
1227				err = json.Unmarshal(*v, &isAccessibleForFree)
1228				if err != nil {
1229					return err
1230				}
1231				cw.IsAccessibleForFree = &isAccessibleForFree
1232			}
1233		case "genre":
1234			if v != nil {
1235				var genre []string
1236				err = json.Unmarshal(*v, &genre)
1237				if err != nil {
1238					return err
1239				}
1240				cw.Genre = &genre
1241			}
1242		case "isFamilyFriendly":
1243			if v != nil {
1244				var isFamilyFriendly bool
1245				err = json.Unmarshal(*v, &isFamilyFriendly)
1246				if err != nil {
1247					return err
1248				}
1249				cw.IsFamilyFriendly = &isFamilyFriendly
1250			}
1251		case "name":
1252			if v != nil {
1253				var name string
1254				err = json.Unmarshal(*v, &name)
1255				if err != nil {
1256					return err
1257				}
1258				cw.Name = &name
1259			}
1260		case "url":
1261			if v != nil {
1262				var URL string
1263				err = json.Unmarshal(*v, &URL)
1264				if err != nil {
1265					return err
1266				}
1267				cw.URL = &URL
1268			}
1269		case "entityPresentationInfo":
1270			if v != nil {
1271				entityPresentationInfo, err := unmarshalBasicEntitiesEntityPresentationInfo(*v)
1272				if err != nil {
1273					return err
1274				}
1275				cw.EntityPresentationInfo = entityPresentationInfo
1276			}
1277		case "readLink":
1278			if v != nil {
1279				var readLink string
1280				err = json.Unmarshal(*v, &readLink)
1281				if err != nil {
1282					return err
1283				}
1284				cw.ReadLink = &readLink
1285			}
1286		case "webSearchUrl":
1287			if v != nil {
1288				var webSearchURL string
1289				err = json.Unmarshal(*v, &webSearchURL)
1290				if err != nil {
1291					return err
1292				}
1293				cw.WebSearchURL = &webSearchURL
1294			}
1295		case "potentialAction":
1296			if v != nil {
1297				potentialAction, err := unmarshalBasicActionArray(*v)
1298				if err != nil {
1299					return err
1300				}
1301				cw.PotentialAction = &potentialAction
1302			}
1303		case "immediateAction":
1304			if v != nil {
1305				immediateAction, err := unmarshalBasicActionArray(*v)
1306				if err != nil {
1307					return err
1308				}
1309				cw.ImmediateAction = &immediateAction
1310			}
1311		case "preferredClickthroughUrl":
1312			if v != nil {
1313				var preferredClickthroughURL string
1314				err = json.Unmarshal(*v, &preferredClickthroughURL)
1315				if err != nil {
1316					return err
1317				}
1318				cw.PreferredClickthroughURL = &preferredClickthroughURL
1319			}
1320		case "adaptiveCard":
1321			if v != nil {
1322				var adaptiveCard string
1323				err = json.Unmarshal(*v, &adaptiveCard)
1324				if err != nil {
1325					return err
1326				}
1327				cw.AdaptiveCard = &adaptiveCard
1328			}
1329		case "id":
1330			if v != nil {
1331				var ID string
1332				err = json.Unmarshal(*v, &ID)
1333				if err != nil {
1334					return err
1335				}
1336				cw.ID = &ID
1337			}
1338		case "_type":
1339			if v != nil {
1340				var typeVar TypeBasicResponseBase
1341				err = json.Unmarshal(*v, &typeVar)
1342				if err != nil {
1343					return err
1344				}
1345				cw.Type = typeVar
1346			}
1347		}
1348	}
1349
1350	return nil
1351}
1352
1353// BasicEntitiesEntityPresentationInfo defines additional information about an entity such as type hints.
1354type BasicEntitiesEntityPresentationInfo interface {
1355	AsEntitiesEntityPresentationInfo() (*EntitiesEntityPresentationInfo, bool)
1356}
1357
1358// EntitiesEntityPresentationInfo defines additional information about an entity such as type hints.
1359type EntitiesEntityPresentationInfo struct {
1360	// EntityScenario - The supported scenario. Possible values include: 'DominantEntity', 'DisambiguationItem', 'ListItem'
1361	EntityScenario EntityScenario `json:"entityScenario,omitempty"`
1362	// EntityTypeHints - READ-ONLY; A list of hints that indicate the entity's type. The list could contain a single hint such as Movie or a list of hints such as Place, LocalBusiness, Restaurant. Each successive hint in the array narrows the entity's type.
1363	EntityTypeHints *[]EntityType `json:"entityTypeHints,omitempty"`
1364	// EntityTypeDisplayHint - READ-ONLY; A display version of the entity hint. For example, if entityTypeHints is Artist, this field may be set to American Singer.
1365	EntityTypeDisplayHint *string `json:"entityTypeDisplayHint,omitempty"`
1366	// Query - READ-ONLY
1367	Query *string `json:"query,omitempty"`
1368	// EntitySubTypeHints - READ-ONLY
1369	EntitySubTypeHints *[]string `json:"entitySubTypeHints,omitempty"`
1370	// Type - Possible values include: 'TypeEntitiesEntityPresentationInfo'
1371	Type TypeBasicEntitiesEntityPresentationInfo `json:"_type,omitempty"`
1372}
1373
1374func unmarshalBasicEntitiesEntityPresentationInfo(body []byte) (BasicEntitiesEntityPresentationInfo, error) {
1375	var m map[string]interface{}
1376	err := json.Unmarshal(body, &m)
1377	if err != nil {
1378		return nil, err
1379	}
1380
1381	switch m["_type"] {
1382	default:
1383		var eepi EntitiesEntityPresentationInfo
1384		err := json.Unmarshal(body, &eepi)
1385		return eepi, err
1386	}
1387}
1388func unmarshalBasicEntitiesEntityPresentationInfoArray(body []byte) ([]BasicEntitiesEntityPresentationInfo, error) {
1389	var rawMessages []*json.RawMessage
1390	err := json.Unmarshal(body, &rawMessages)
1391	if err != nil {
1392		return nil, err
1393	}
1394
1395	eepiArray := make([]BasicEntitiesEntityPresentationInfo, len(rawMessages))
1396
1397	for index, rawMessage := range rawMessages {
1398		eepi, err := unmarshalBasicEntitiesEntityPresentationInfo(*rawMessage)
1399		if err != nil {
1400			return nil, err
1401		}
1402		eepiArray[index] = eepi
1403	}
1404	return eepiArray, nil
1405}
1406
1407// MarshalJSON is the custom marshaler for EntitiesEntityPresentationInfo.
1408func (eepi EntitiesEntityPresentationInfo) MarshalJSON() ([]byte, error) {
1409	eepi.Type = TypeEntitiesEntityPresentationInfo
1410	objectMap := make(map[string]interface{})
1411	if eepi.EntityScenario != "" {
1412		objectMap["entityScenario"] = eepi.EntityScenario
1413	}
1414	if eepi.Type != "" {
1415		objectMap["_type"] = eepi.Type
1416	}
1417	return json.Marshal(objectMap)
1418}
1419
1420// AsEntitiesEntityPresentationInfo is the BasicEntitiesEntityPresentationInfo implementation for EntitiesEntityPresentationInfo.
1421func (eepi EntitiesEntityPresentationInfo) AsEntitiesEntityPresentationInfo() (*EntitiesEntityPresentationInfo, bool) {
1422	return &eepi, true
1423}
1424
1425// AsBasicEntitiesEntityPresentationInfo is the BasicEntitiesEntityPresentationInfo implementation for EntitiesEntityPresentationInfo.
1426func (eepi EntitiesEntityPresentationInfo) AsBasicEntitiesEntityPresentationInfo() (BasicEntitiesEntityPresentationInfo, bool) {
1427	return &eepi, true
1428}
1429
1430// BasicError defines the error that occurred.
1431type BasicError interface {
1432	AsError() (*Error, bool)
1433}
1434
1435// Error defines the error that occurred.
1436type Error struct {
1437	// Code - The error code that identifies the category of error. Possible values include: 'None', 'ServerError', 'InvalidRequest', 'RateLimitExceeded', 'InvalidAuthorization', 'InsufficientAuthorization'
1438	Code ErrorCode `json:"code,omitempty"`
1439	// SubCode - READ-ONLY; The error code that further helps to identify the error. Possible values include: 'UnexpectedError', 'ResourceError', 'NotImplemented', 'ParameterMissing', 'ParameterInvalidValue', 'HTTPNotAllowed', 'Blocked', 'AuthorizationMissing', 'AuthorizationRedundancy', 'AuthorizationDisabled', 'AuthorizationExpired'
1440	SubCode ErrorSubCode `json:"subCode,omitempty"`
1441	// Message - A description of the error.
1442	Message *string `json:"message,omitempty"`
1443	// MoreDetails - READ-ONLY; A description that provides additional information about the error.
1444	MoreDetails *string `json:"moreDetails,omitempty"`
1445	// Parameter - READ-ONLY; The parameter in the request that caused the error.
1446	Parameter *string `json:"parameter,omitempty"`
1447	// Value - READ-ONLY; The parameter's value in the request that was not valid.
1448	Value *string `json:"value,omitempty"`
1449	// Type - Possible values include: 'TypeError'
1450	Type TypeBasicError `json:"_type,omitempty"`
1451}
1452
1453func unmarshalBasicError(body []byte) (BasicError, error) {
1454	var m map[string]interface{}
1455	err := json.Unmarshal(body, &m)
1456	if err != nil {
1457		return nil, err
1458	}
1459
1460	switch m["_type"] {
1461	default:
1462		var e Error
1463		err := json.Unmarshal(body, &e)
1464		return e, err
1465	}
1466}
1467func unmarshalBasicErrorArray(body []byte) ([]BasicError, error) {
1468	var rawMessages []*json.RawMessage
1469	err := json.Unmarshal(body, &rawMessages)
1470	if err != nil {
1471		return nil, err
1472	}
1473
1474	eArray := make([]BasicError, len(rawMessages))
1475
1476	for index, rawMessage := range rawMessages {
1477		e, err := unmarshalBasicError(*rawMessage)
1478		if err != nil {
1479			return nil, err
1480		}
1481		eArray[index] = e
1482	}
1483	return eArray, nil
1484}
1485
1486// MarshalJSON is the custom marshaler for Error.
1487func (e Error) MarshalJSON() ([]byte, error) {
1488	e.Type = TypeError
1489	objectMap := make(map[string]interface{})
1490	if e.Code != "" {
1491		objectMap["code"] = e.Code
1492	}
1493	if e.Message != nil {
1494		objectMap["message"] = e.Message
1495	}
1496	if e.Type != "" {
1497		objectMap["_type"] = e.Type
1498	}
1499	return json.Marshal(objectMap)
1500}
1501
1502// AsError is the BasicError implementation for Error.
1503func (e Error) AsError() (*Error, bool) {
1504	return &e, true
1505}
1506
1507// AsBasicError is the BasicError implementation for Error.
1508func (e Error) AsBasicError() (BasicError, bool) {
1509	return &e, true
1510}
1511
1512// ErrorResponse the top-level response that represents a failed request.
1513type ErrorResponse struct {
1514	// Errors - A list of errors that describe the reasons why the request failed.
1515	Errors *[]BasicError `json:"errors,omitempty"`
1516	// ReadLink - READ-ONLY; The URL that returns this resource.
1517	ReadLink *string `json:"readLink,omitempty"`
1518	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
1519	WebSearchURL *string `json:"webSearchUrl,omitempty"`
1520	// PotentialAction - READ-ONLY
1521	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
1522	// ImmediateAction - READ-ONLY
1523	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
1524	// PreferredClickthroughURL - READ-ONLY
1525	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
1526	// AdaptiveCard - READ-ONLY
1527	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
1528	// ID - READ-ONLY; A String identifier.
1529	ID *string `json:"id,omitempty"`
1530	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
1531	Type TypeBasicResponseBase `json:"_type,omitempty"`
1532}
1533
1534// MarshalJSON is the custom marshaler for ErrorResponse.
1535func (er ErrorResponse) MarshalJSON() ([]byte, error) {
1536	er.Type = TypeErrorResponse
1537	objectMap := make(map[string]interface{})
1538	if er.Errors != nil {
1539		objectMap["errors"] = er.Errors
1540	}
1541	if er.Type != "" {
1542		objectMap["_type"] = er.Type
1543	}
1544	return json.Marshal(objectMap)
1545}
1546
1547// AsThing is the BasicResponseBase implementation for ErrorResponse.
1548func (er ErrorResponse) AsThing() (*Thing, bool) {
1549	return nil, false
1550}
1551
1552// AsBasicThing is the BasicResponseBase implementation for ErrorResponse.
1553func (er ErrorResponse) AsBasicThing() (BasicThing, bool) {
1554	return nil, false
1555}
1556
1557// AsPlaces is the BasicResponseBase implementation for ErrorResponse.
1558func (er ErrorResponse) AsPlaces() (*Places, bool) {
1559	return nil, false
1560}
1561
1562// AsSearchResultsAnswer is the BasicResponseBase implementation for ErrorResponse.
1563func (er ErrorResponse) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
1564	return nil, false
1565}
1566
1567// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for ErrorResponse.
1568func (er ErrorResponse) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
1569	return nil, false
1570}
1571
1572// AsSearchResponse is the BasicResponseBase implementation for ErrorResponse.
1573func (er ErrorResponse) AsSearchResponse() (*SearchResponse, bool) {
1574	return nil, false
1575}
1576
1577// AsPostalAddress is the BasicResponseBase implementation for ErrorResponse.
1578func (er ErrorResponse) AsPostalAddress() (*PostalAddress, bool) {
1579	return nil, false
1580}
1581
1582// AsPlace is the BasicResponseBase implementation for ErrorResponse.
1583func (er ErrorResponse) AsPlace() (*Place, bool) {
1584	return nil, false
1585}
1586
1587// AsAction is the BasicResponseBase implementation for ErrorResponse.
1588func (er ErrorResponse) AsAction() (*Action, bool) {
1589	return nil, false
1590}
1591
1592// AsBasicAction is the BasicResponseBase implementation for ErrorResponse.
1593func (er ErrorResponse) AsBasicAction() (BasicAction, bool) {
1594	return nil, false
1595}
1596
1597// AsResponse is the BasicResponseBase implementation for ErrorResponse.
1598func (er ErrorResponse) AsResponse() (*Response, bool) {
1599	return nil, false
1600}
1601
1602// AsBasicResponse is the BasicResponseBase implementation for ErrorResponse.
1603func (er ErrorResponse) AsBasicResponse() (BasicResponse, bool) {
1604	return &er, true
1605}
1606
1607// AsIdentifiable is the BasicResponseBase implementation for ErrorResponse.
1608func (er ErrorResponse) AsIdentifiable() (*Identifiable, bool) {
1609	return nil, false
1610}
1611
1612// AsBasicIdentifiable is the BasicResponseBase implementation for ErrorResponse.
1613func (er ErrorResponse) AsBasicIdentifiable() (BasicIdentifiable, bool) {
1614	return &er, true
1615}
1616
1617// AsAnswer is the BasicResponseBase implementation for ErrorResponse.
1618func (er ErrorResponse) AsAnswer() (*Answer, bool) {
1619	return nil, false
1620}
1621
1622// AsBasicAnswer is the BasicResponseBase implementation for ErrorResponse.
1623func (er ErrorResponse) AsBasicAnswer() (BasicAnswer, bool) {
1624	return nil, false
1625}
1626
1627// AsErrorResponse is the BasicResponseBase implementation for ErrorResponse.
1628func (er ErrorResponse) AsErrorResponse() (*ErrorResponse, bool) {
1629	return &er, true
1630}
1631
1632// AsCreativeWork is the BasicResponseBase implementation for ErrorResponse.
1633func (er ErrorResponse) AsCreativeWork() (*CreativeWork, bool) {
1634	return nil, false
1635}
1636
1637// AsBasicCreativeWork is the BasicResponseBase implementation for ErrorResponse.
1638func (er ErrorResponse) AsBasicCreativeWork() (BasicCreativeWork, bool) {
1639	return nil, false
1640}
1641
1642// AsIntangible is the BasicResponseBase implementation for ErrorResponse.
1643func (er ErrorResponse) AsIntangible() (*Intangible, bool) {
1644	return nil, false
1645}
1646
1647// AsBasicIntangible is the BasicResponseBase implementation for ErrorResponse.
1648func (er ErrorResponse) AsBasicIntangible() (BasicIntangible, bool) {
1649	return nil, false
1650}
1651
1652// AsSearchAction is the BasicResponseBase implementation for ErrorResponse.
1653func (er ErrorResponse) AsSearchAction() (*SearchAction, bool) {
1654	return nil, false
1655}
1656
1657// AsStructuredValue is the BasicResponseBase implementation for ErrorResponse.
1658func (er ErrorResponse) AsStructuredValue() (*StructuredValue, bool) {
1659	return nil, false
1660}
1661
1662// AsBasicStructuredValue is the BasicResponseBase implementation for ErrorResponse.
1663func (er ErrorResponse) AsBasicStructuredValue() (BasicStructuredValue, bool) {
1664	return nil, false
1665}
1666
1667// AsResponseBase is the BasicResponseBase implementation for ErrorResponse.
1668func (er ErrorResponse) AsResponseBase() (*ResponseBase, bool) {
1669	return nil, false
1670}
1671
1672// AsBasicResponseBase is the BasicResponseBase implementation for ErrorResponse.
1673func (er ErrorResponse) AsBasicResponseBase() (BasicResponseBase, bool) {
1674	return &er, true
1675}
1676
1677// UnmarshalJSON is the custom unmarshaler for ErrorResponse struct.
1678func (er *ErrorResponse) UnmarshalJSON(body []byte) error {
1679	var m map[string]*json.RawMessage
1680	err := json.Unmarshal(body, &m)
1681	if err != nil {
1682		return err
1683	}
1684	for k, v := range m {
1685		switch k {
1686		case "errors":
1687			if v != nil {
1688				errorsVar, err := unmarshalBasicErrorArray(*v)
1689				if err != nil {
1690					return err
1691				}
1692				er.Errors = &errorsVar
1693			}
1694		case "readLink":
1695			if v != nil {
1696				var readLink string
1697				err = json.Unmarshal(*v, &readLink)
1698				if err != nil {
1699					return err
1700				}
1701				er.ReadLink = &readLink
1702			}
1703		case "webSearchUrl":
1704			if v != nil {
1705				var webSearchURL string
1706				err = json.Unmarshal(*v, &webSearchURL)
1707				if err != nil {
1708					return err
1709				}
1710				er.WebSearchURL = &webSearchURL
1711			}
1712		case "potentialAction":
1713			if v != nil {
1714				potentialAction, err := unmarshalBasicActionArray(*v)
1715				if err != nil {
1716					return err
1717				}
1718				er.PotentialAction = &potentialAction
1719			}
1720		case "immediateAction":
1721			if v != nil {
1722				immediateAction, err := unmarshalBasicActionArray(*v)
1723				if err != nil {
1724					return err
1725				}
1726				er.ImmediateAction = &immediateAction
1727			}
1728		case "preferredClickthroughUrl":
1729			if v != nil {
1730				var preferredClickthroughURL string
1731				err = json.Unmarshal(*v, &preferredClickthroughURL)
1732				if err != nil {
1733					return err
1734				}
1735				er.PreferredClickthroughURL = &preferredClickthroughURL
1736			}
1737		case "adaptiveCard":
1738			if v != nil {
1739				var adaptiveCard string
1740				err = json.Unmarshal(*v, &adaptiveCard)
1741				if err != nil {
1742					return err
1743				}
1744				er.AdaptiveCard = &adaptiveCard
1745			}
1746		case "id":
1747			if v != nil {
1748				var ID string
1749				err = json.Unmarshal(*v, &ID)
1750				if err != nil {
1751					return err
1752				}
1753				er.ID = &ID
1754			}
1755		case "_type":
1756			if v != nil {
1757				var typeVar TypeBasicResponseBase
1758				err = json.Unmarshal(*v, &typeVar)
1759				if err != nil {
1760					return err
1761				}
1762				er.Type = typeVar
1763			}
1764		}
1765	}
1766
1767	return nil
1768}
1769
1770// BasicGeoCoordinates ...
1771type BasicGeoCoordinates interface {
1772	AsGeoCoordinates() (*GeoCoordinates, bool)
1773}
1774
1775// GeoCoordinates ...
1776type GeoCoordinates struct {
1777	Latitude  *float64 `json:"latitude,omitempty"`
1778	Longitude *float64 `json:"longitude,omitempty"`
1779	// Elevation - READ-ONLY
1780	Elevation *float64 `json:"elevation,omitempty"`
1781	// Type - Possible values include: 'TypeGeoCoordinates'
1782	Type TypeBasicGeoCoordinates `json:"_type,omitempty"`
1783}
1784
1785func unmarshalBasicGeoCoordinates(body []byte) (BasicGeoCoordinates, error) {
1786	var m map[string]interface{}
1787	err := json.Unmarshal(body, &m)
1788	if err != nil {
1789		return nil, err
1790	}
1791
1792	switch m["_type"] {
1793	default:
1794		var gc GeoCoordinates
1795		err := json.Unmarshal(body, &gc)
1796		return gc, err
1797	}
1798}
1799func unmarshalBasicGeoCoordinatesArray(body []byte) ([]BasicGeoCoordinates, error) {
1800	var rawMessages []*json.RawMessage
1801	err := json.Unmarshal(body, &rawMessages)
1802	if err != nil {
1803		return nil, err
1804	}
1805
1806	gcArray := make([]BasicGeoCoordinates, len(rawMessages))
1807
1808	for index, rawMessage := range rawMessages {
1809		gc, err := unmarshalBasicGeoCoordinates(*rawMessage)
1810		if err != nil {
1811			return nil, err
1812		}
1813		gcArray[index] = gc
1814	}
1815	return gcArray, nil
1816}
1817
1818// MarshalJSON is the custom marshaler for GeoCoordinates.
1819func (gc GeoCoordinates) MarshalJSON() ([]byte, error) {
1820	gc.Type = TypeGeoCoordinates
1821	objectMap := make(map[string]interface{})
1822	if gc.Latitude != nil {
1823		objectMap["latitude"] = gc.Latitude
1824	}
1825	if gc.Longitude != nil {
1826		objectMap["longitude"] = gc.Longitude
1827	}
1828	if gc.Type != "" {
1829		objectMap["_type"] = gc.Type
1830	}
1831	return json.Marshal(objectMap)
1832}
1833
1834// AsGeoCoordinates is the BasicGeoCoordinates implementation for GeoCoordinates.
1835func (gc GeoCoordinates) AsGeoCoordinates() (*GeoCoordinates, bool) {
1836	return &gc, true
1837}
1838
1839// AsBasicGeoCoordinates is the BasicGeoCoordinates implementation for GeoCoordinates.
1840func (gc GeoCoordinates) AsBasicGeoCoordinates() (BasicGeoCoordinates, bool) {
1841	return &gc, true
1842}
1843
1844// BasicIdentifiable defines the identity of a resource.
1845type BasicIdentifiable interface {
1846	AsThing() (*Thing, bool)
1847	AsBasicThing() (BasicThing, bool)
1848	AsPlaces() (*Places, bool)
1849	AsSearchResultsAnswer() (*SearchResultsAnswer, bool)
1850	AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool)
1851	AsSearchResponse() (*SearchResponse, bool)
1852	AsPostalAddress() (*PostalAddress, bool)
1853	AsPlace() (*Place, bool)
1854	AsAction() (*Action, bool)
1855	AsBasicAction() (BasicAction, bool)
1856	AsResponse() (*Response, bool)
1857	AsBasicResponse() (BasicResponse, bool)
1858	AsAnswer() (*Answer, bool)
1859	AsBasicAnswer() (BasicAnswer, bool)
1860	AsErrorResponse() (*ErrorResponse, bool)
1861	AsCreativeWork() (*CreativeWork, bool)
1862	AsBasicCreativeWork() (BasicCreativeWork, bool)
1863	AsIntangible() (*Intangible, bool)
1864	AsBasicIntangible() (BasicIntangible, bool)
1865	AsSearchAction() (*SearchAction, bool)
1866	AsStructuredValue() (*StructuredValue, bool)
1867	AsBasicStructuredValue() (BasicStructuredValue, bool)
1868	AsIdentifiable() (*Identifiable, bool)
1869}
1870
1871// Identifiable defines the identity of a resource.
1872type Identifiable struct {
1873	// ID - READ-ONLY; A String identifier.
1874	ID *string `json:"id,omitempty"`
1875	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
1876	Type TypeBasicResponseBase `json:"_type,omitempty"`
1877}
1878
1879func unmarshalBasicIdentifiable(body []byte) (BasicIdentifiable, error) {
1880	var m map[string]interface{}
1881	err := json.Unmarshal(body, &m)
1882	if err != nil {
1883		return nil, err
1884	}
1885
1886	switch m["_type"] {
1887	case string(TypeThing):
1888		var t Thing
1889		err := json.Unmarshal(body, &t)
1890		return t, err
1891	case string(TypePlaces):
1892		var p Places
1893		err := json.Unmarshal(body, &p)
1894		return p, err
1895	case string(TypeSearchResultsAnswer):
1896		var sra SearchResultsAnswer
1897		err := json.Unmarshal(body, &sra)
1898		return sra, err
1899	case string(TypeSearchResponse):
1900		var sr SearchResponse
1901		err := json.Unmarshal(body, &sr)
1902		return sr, err
1903	case string(TypePostalAddress):
1904		var pa PostalAddress
1905		err := json.Unmarshal(body, &pa)
1906		return pa, err
1907	case string(TypePlace):
1908		var p Place
1909		err := json.Unmarshal(body, &p)
1910		return p, err
1911	case string(TypeAction):
1912		var a Action
1913		err := json.Unmarshal(body, &a)
1914		return a, err
1915	case string(TypeResponse):
1916		var r Response
1917		err := json.Unmarshal(body, &r)
1918		return r, err
1919	case string(TypeAnswer):
1920		var a Answer
1921		err := json.Unmarshal(body, &a)
1922		return a, err
1923	case string(TypeErrorResponse):
1924		var er ErrorResponse
1925		err := json.Unmarshal(body, &er)
1926		return er, err
1927	case string(TypeCreativeWork):
1928		var cw CreativeWork
1929		err := json.Unmarshal(body, &cw)
1930		return cw, err
1931	case string(TypeIntangible):
1932		var i Intangible
1933		err := json.Unmarshal(body, &i)
1934		return i, err
1935	case string(TypeSearchAction):
1936		var sa SearchAction
1937		err := json.Unmarshal(body, &sa)
1938		return sa, err
1939	case string(TypeStructuredValue):
1940		var sv StructuredValue
1941		err := json.Unmarshal(body, &sv)
1942		return sv, err
1943	default:
1944		var i Identifiable
1945		err := json.Unmarshal(body, &i)
1946		return i, err
1947	}
1948}
1949func unmarshalBasicIdentifiableArray(body []byte) ([]BasicIdentifiable, error) {
1950	var rawMessages []*json.RawMessage
1951	err := json.Unmarshal(body, &rawMessages)
1952	if err != nil {
1953		return nil, err
1954	}
1955
1956	iArray := make([]BasicIdentifiable, len(rawMessages))
1957
1958	for index, rawMessage := range rawMessages {
1959		i, err := unmarshalBasicIdentifiable(*rawMessage)
1960		if err != nil {
1961			return nil, err
1962		}
1963		iArray[index] = i
1964	}
1965	return iArray, nil
1966}
1967
1968// MarshalJSON is the custom marshaler for Identifiable.
1969func (i Identifiable) MarshalJSON() ([]byte, error) {
1970	i.Type = TypeIdentifiable
1971	objectMap := make(map[string]interface{})
1972	if i.Type != "" {
1973		objectMap["_type"] = i.Type
1974	}
1975	return json.Marshal(objectMap)
1976}
1977
1978// AsThing is the BasicResponseBase implementation for Identifiable.
1979func (i Identifiable) AsThing() (*Thing, bool) {
1980	return nil, false
1981}
1982
1983// AsBasicThing is the BasicResponseBase implementation for Identifiable.
1984func (i Identifiable) AsBasicThing() (BasicThing, bool) {
1985	return nil, false
1986}
1987
1988// AsPlaces is the BasicResponseBase implementation for Identifiable.
1989func (i Identifiable) AsPlaces() (*Places, bool) {
1990	return nil, false
1991}
1992
1993// AsSearchResultsAnswer is the BasicResponseBase implementation for Identifiable.
1994func (i Identifiable) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
1995	return nil, false
1996}
1997
1998// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for Identifiable.
1999func (i Identifiable) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
2000	return nil, false
2001}
2002
2003// AsSearchResponse is the BasicResponseBase implementation for Identifiable.
2004func (i Identifiable) AsSearchResponse() (*SearchResponse, bool) {
2005	return nil, false
2006}
2007
2008// AsPostalAddress is the BasicResponseBase implementation for Identifiable.
2009func (i Identifiable) AsPostalAddress() (*PostalAddress, bool) {
2010	return nil, false
2011}
2012
2013// AsPlace is the BasicResponseBase implementation for Identifiable.
2014func (i Identifiable) AsPlace() (*Place, bool) {
2015	return nil, false
2016}
2017
2018// AsAction is the BasicResponseBase implementation for Identifiable.
2019func (i Identifiable) AsAction() (*Action, bool) {
2020	return nil, false
2021}
2022
2023// AsBasicAction is the BasicResponseBase implementation for Identifiable.
2024func (i Identifiable) AsBasicAction() (BasicAction, bool) {
2025	return nil, false
2026}
2027
2028// AsResponse is the BasicResponseBase implementation for Identifiable.
2029func (i Identifiable) AsResponse() (*Response, bool) {
2030	return nil, false
2031}
2032
2033// AsBasicResponse is the BasicResponseBase implementation for Identifiable.
2034func (i Identifiable) AsBasicResponse() (BasicResponse, bool) {
2035	return nil, false
2036}
2037
2038// AsIdentifiable is the BasicResponseBase implementation for Identifiable.
2039func (i Identifiable) AsIdentifiable() (*Identifiable, bool) {
2040	return &i, true
2041}
2042
2043// AsBasicIdentifiable is the BasicResponseBase implementation for Identifiable.
2044func (i Identifiable) AsBasicIdentifiable() (BasicIdentifiable, bool) {
2045	return &i, true
2046}
2047
2048// AsAnswer is the BasicResponseBase implementation for Identifiable.
2049func (i Identifiable) AsAnswer() (*Answer, bool) {
2050	return nil, false
2051}
2052
2053// AsBasicAnswer is the BasicResponseBase implementation for Identifiable.
2054func (i Identifiable) AsBasicAnswer() (BasicAnswer, bool) {
2055	return nil, false
2056}
2057
2058// AsErrorResponse is the BasicResponseBase implementation for Identifiable.
2059func (i Identifiable) AsErrorResponse() (*ErrorResponse, bool) {
2060	return nil, false
2061}
2062
2063// AsCreativeWork is the BasicResponseBase implementation for Identifiable.
2064func (i Identifiable) AsCreativeWork() (*CreativeWork, bool) {
2065	return nil, false
2066}
2067
2068// AsBasicCreativeWork is the BasicResponseBase implementation for Identifiable.
2069func (i Identifiable) AsBasicCreativeWork() (BasicCreativeWork, bool) {
2070	return nil, false
2071}
2072
2073// AsIntangible is the BasicResponseBase implementation for Identifiable.
2074func (i Identifiable) AsIntangible() (*Intangible, bool) {
2075	return nil, false
2076}
2077
2078// AsBasicIntangible is the BasicResponseBase implementation for Identifiable.
2079func (i Identifiable) AsBasicIntangible() (BasicIntangible, bool) {
2080	return nil, false
2081}
2082
2083// AsSearchAction is the BasicResponseBase implementation for Identifiable.
2084func (i Identifiable) AsSearchAction() (*SearchAction, bool) {
2085	return nil, false
2086}
2087
2088// AsStructuredValue is the BasicResponseBase implementation for Identifiable.
2089func (i Identifiable) AsStructuredValue() (*StructuredValue, bool) {
2090	return nil, false
2091}
2092
2093// AsBasicStructuredValue is the BasicResponseBase implementation for Identifiable.
2094func (i Identifiable) AsBasicStructuredValue() (BasicStructuredValue, bool) {
2095	return nil, false
2096}
2097
2098// AsResponseBase is the BasicResponseBase implementation for Identifiable.
2099func (i Identifiable) AsResponseBase() (*ResponseBase, bool) {
2100	return nil, false
2101}
2102
2103// AsBasicResponseBase is the BasicResponseBase implementation for Identifiable.
2104func (i Identifiable) AsBasicResponseBase() (BasicResponseBase, bool) {
2105	return &i, true
2106}
2107
2108// BasicIntangible a utility class that serves as the umbrella for a number of 'intangible' things such as quantities,
2109// structured values, etc.
2110type BasicIntangible interface {
2111	AsPostalAddress() (*PostalAddress, bool)
2112	AsStructuredValue() (*StructuredValue, bool)
2113	AsBasicStructuredValue() (BasicStructuredValue, bool)
2114	AsIntangible() (*Intangible, bool)
2115}
2116
2117// Intangible a utility class that serves as the umbrella for a number of 'intangible' things such as
2118// quantities, structured values, etc.
2119type Intangible struct {
2120	// Name - READ-ONLY; The name of the thing represented by this object.
2121	Name *string `json:"name,omitempty"`
2122	// URL - READ-ONLY; The URL to get more information about the thing represented by this object.
2123	URL *string `json:"url,omitempty"`
2124	// EntityPresentationInfo - READ-ONLY; Additional information about the entity such as hints that you can use to determine the entity's type. To determine the entity's type, use the entityScenario and entityTypeHint fields.
2125	EntityPresentationInfo BasicEntitiesEntityPresentationInfo `json:"entityPresentationInfo,omitempty"`
2126	// ReadLink - READ-ONLY; The URL that returns this resource.
2127	ReadLink *string `json:"readLink,omitempty"`
2128	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
2129	WebSearchURL *string `json:"webSearchUrl,omitempty"`
2130	// PotentialAction - READ-ONLY
2131	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
2132	// ImmediateAction - READ-ONLY
2133	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
2134	// PreferredClickthroughURL - READ-ONLY
2135	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
2136	// AdaptiveCard - READ-ONLY
2137	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
2138	// ID - READ-ONLY; A String identifier.
2139	ID *string `json:"id,omitempty"`
2140	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
2141	Type TypeBasicResponseBase `json:"_type,omitempty"`
2142}
2143
2144func unmarshalBasicIntangible(body []byte) (BasicIntangible, error) {
2145	var m map[string]interface{}
2146	err := json.Unmarshal(body, &m)
2147	if err != nil {
2148		return nil, err
2149	}
2150
2151	switch m["_type"] {
2152	case string(TypePostalAddress):
2153		var pa PostalAddress
2154		err := json.Unmarshal(body, &pa)
2155		return pa, err
2156	case string(TypeStructuredValue):
2157		var sv StructuredValue
2158		err := json.Unmarshal(body, &sv)
2159		return sv, err
2160	default:
2161		var i Intangible
2162		err := json.Unmarshal(body, &i)
2163		return i, err
2164	}
2165}
2166func unmarshalBasicIntangibleArray(body []byte) ([]BasicIntangible, error) {
2167	var rawMessages []*json.RawMessage
2168	err := json.Unmarshal(body, &rawMessages)
2169	if err != nil {
2170		return nil, err
2171	}
2172
2173	iArray := make([]BasicIntangible, len(rawMessages))
2174
2175	for index, rawMessage := range rawMessages {
2176		i, err := unmarshalBasicIntangible(*rawMessage)
2177		if err != nil {
2178			return nil, err
2179		}
2180		iArray[index] = i
2181	}
2182	return iArray, nil
2183}
2184
2185// MarshalJSON is the custom marshaler for Intangible.
2186func (i Intangible) MarshalJSON() ([]byte, error) {
2187	i.Type = TypeIntangible
2188	objectMap := make(map[string]interface{})
2189	if i.Type != "" {
2190		objectMap["_type"] = i.Type
2191	}
2192	return json.Marshal(objectMap)
2193}
2194
2195// AsThing is the BasicResponseBase implementation for Intangible.
2196func (i Intangible) AsThing() (*Thing, bool) {
2197	return nil, false
2198}
2199
2200// AsBasicThing is the BasicResponseBase implementation for Intangible.
2201func (i Intangible) AsBasicThing() (BasicThing, bool) {
2202	return &i, true
2203}
2204
2205// AsPlaces is the BasicResponseBase implementation for Intangible.
2206func (i Intangible) AsPlaces() (*Places, bool) {
2207	return nil, false
2208}
2209
2210// AsSearchResultsAnswer is the BasicResponseBase implementation for Intangible.
2211func (i Intangible) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
2212	return nil, false
2213}
2214
2215// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for Intangible.
2216func (i Intangible) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
2217	return nil, false
2218}
2219
2220// AsSearchResponse is the BasicResponseBase implementation for Intangible.
2221func (i Intangible) AsSearchResponse() (*SearchResponse, bool) {
2222	return nil, false
2223}
2224
2225// AsPostalAddress is the BasicResponseBase implementation for Intangible.
2226func (i Intangible) AsPostalAddress() (*PostalAddress, bool) {
2227	return nil, false
2228}
2229
2230// AsPlace is the BasicResponseBase implementation for Intangible.
2231func (i Intangible) AsPlace() (*Place, bool) {
2232	return nil, false
2233}
2234
2235// AsAction is the BasicResponseBase implementation for Intangible.
2236func (i Intangible) AsAction() (*Action, bool) {
2237	return nil, false
2238}
2239
2240// AsBasicAction is the BasicResponseBase implementation for Intangible.
2241func (i Intangible) AsBasicAction() (BasicAction, bool) {
2242	return nil, false
2243}
2244
2245// AsResponse is the BasicResponseBase implementation for Intangible.
2246func (i Intangible) AsResponse() (*Response, bool) {
2247	return nil, false
2248}
2249
2250// AsBasicResponse is the BasicResponseBase implementation for Intangible.
2251func (i Intangible) AsBasicResponse() (BasicResponse, bool) {
2252	return &i, true
2253}
2254
2255// AsIdentifiable is the BasicResponseBase implementation for Intangible.
2256func (i Intangible) AsIdentifiable() (*Identifiable, bool) {
2257	return nil, false
2258}
2259
2260// AsBasicIdentifiable is the BasicResponseBase implementation for Intangible.
2261func (i Intangible) AsBasicIdentifiable() (BasicIdentifiable, bool) {
2262	return &i, true
2263}
2264
2265// AsAnswer is the BasicResponseBase implementation for Intangible.
2266func (i Intangible) AsAnswer() (*Answer, bool) {
2267	return nil, false
2268}
2269
2270// AsBasicAnswer is the BasicResponseBase implementation for Intangible.
2271func (i Intangible) AsBasicAnswer() (BasicAnswer, bool) {
2272	return nil, false
2273}
2274
2275// AsErrorResponse is the BasicResponseBase implementation for Intangible.
2276func (i Intangible) AsErrorResponse() (*ErrorResponse, bool) {
2277	return nil, false
2278}
2279
2280// AsCreativeWork is the BasicResponseBase implementation for Intangible.
2281func (i Intangible) AsCreativeWork() (*CreativeWork, bool) {
2282	return nil, false
2283}
2284
2285// AsBasicCreativeWork is the BasicResponseBase implementation for Intangible.
2286func (i Intangible) AsBasicCreativeWork() (BasicCreativeWork, bool) {
2287	return nil, false
2288}
2289
2290// AsIntangible is the BasicResponseBase implementation for Intangible.
2291func (i Intangible) AsIntangible() (*Intangible, bool) {
2292	return &i, true
2293}
2294
2295// AsBasicIntangible is the BasicResponseBase implementation for Intangible.
2296func (i Intangible) AsBasicIntangible() (BasicIntangible, bool) {
2297	return &i, true
2298}
2299
2300// AsSearchAction is the BasicResponseBase implementation for Intangible.
2301func (i Intangible) AsSearchAction() (*SearchAction, bool) {
2302	return nil, false
2303}
2304
2305// AsStructuredValue is the BasicResponseBase implementation for Intangible.
2306func (i Intangible) AsStructuredValue() (*StructuredValue, bool) {
2307	return nil, false
2308}
2309
2310// AsBasicStructuredValue is the BasicResponseBase implementation for Intangible.
2311func (i Intangible) AsBasicStructuredValue() (BasicStructuredValue, bool) {
2312	return nil, false
2313}
2314
2315// AsResponseBase is the BasicResponseBase implementation for Intangible.
2316func (i Intangible) AsResponseBase() (*ResponseBase, bool) {
2317	return nil, false
2318}
2319
2320// AsBasicResponseBase is the BasicResponseBase implementation for Intangible.
2321func (i Intangible) AsBasicResponseBase() (BasicResponseBase, bool) {
2322	return &i, true
2323}
2324
2325// UnmarshalJSON is the custom unmarshaler for Intangible struct.
2326func (i *Intangible) UnmarshalJSON(body []byte) error {
2327	var m map[string]*json.RawMessage
2328	err := json.Unmarshal(body, &m)
2329	if err != nil {
2330		return err
2331	}
2332	for k, v := range m {
2333		switch k {
2334		case "name":
2335			if v != nil {
2336				var name string
2337				err = json.Unmarshal(*v, &name)
2338				if err != nil {
2339					return err
2340				}
2341				i.Name = &name
2342			}
2343		case "url":
2344			if v != nil {
2345				var URL string
2346				err = json.Unmarshal(*v, &URL)
2347				if err != nil {
2348					return err
2349				}
2350				i.URL = &URL
2351			}
2352		case "entityPresentationInfo":
2353			if v != nil {
2354				entityPresentationInfo, err := unmarshalBasicEntitiesEntityPresentationInfo(*v)
2355				if err != nil {
2356					return err
2357				}
2358				i.EntityPresentationInfo = entityPresentationInfo
2359			}
2360		case "readLink":
2361			if v != nil {
2362				var readLink string
2363				err = json.Unmarshal(*v, &readLink)
2364				if err != nil {
2365					return err
2366				}
2367				i.ReadLink = &readLink
2368			}
2369		case "webSearchUrl":
2370			if v != nil {
2371				var webSearchURL string
2372				err = json.Unmarshal(*v, &webSearchURL)
2373				if err != nil {
2374					return err
2375				}
2376				i.WebSearchURL = &webSearchURL
2377			}
2378		case "potentialAction":
2379			if v != nil {
2380				potentialAction, err := unmarshalBasicActionArray(*v)
2381				if err != nil {
2382					return err
2383				}
2384				i.PotentialAction = &potentialAction
2385			}
2386		case "immediateAction":
2387			if v != nil {
2388				immediateAction, err := unmarshalBasicActionArray(*v)
2389				if err != nil {
2390					return err
2391				}
2392				i.ImmediateAction = &immediateAction
2393			}
2394		case "preferredClickthroughUrl":
2395			if v != nil {
2396				var preferredClickthroughURL string
2397				err = json.Unmarshal(*v, &preferredClickthroughURL)
2398				if err != nil {
2399					return err
2400				}
2401				i.PreferredClickthroughURL = &preferredClickthroughURL
2402			}
2403		case "adaptiveCard":
2404			if v != nil {
2405				var adaptiveCard string
2406				err = json.Unmarshal(*v, &adaptiveCard)
2407				if err != nil {
2408					return err
2409				}
2410				i.AdaptiveCard = &adaptiveCard
2411			}
2412		case "id":
2413			if v != nil {
2414				var ID string
2415				err = json.Unmarshal(*v, &ID)
2416				if err != nil {
2417					return err
2418				}
2419				i.ID = &ID
2420			}
2421		case "_type":
2422			if v != nil {
2423				var typeVar TypeBasicResponseBase
2424				err = json.Unmarshal(*v, &typeVar)
2425				if err != nil {
2426					return err
2427				}
2428				i.Type = typeVar
2429			}
2430		}
2431	}
2432
2433	return nil
2434}
2435
2436// Place defines information about a local entity, such as a restaurant or hotel.
2437type Place struct {
2438	// Geo - READ-ONLY
2439	Geo BasicGeoCoordinates `json:"geo,omitempty"`
2440	// RoutablePoint - READ-ONLY
2441	RoutablePoint BasicGeoCoordinates `json:"routablePoint,omitempty"`
2442	// Address - READ-ONLY; The postal address of where the entity is located
2443	Address *PostalAddress `json:"address,omitempty"`
2444	// Telephone - READ-ONLY; The entity's telephone number
2445	Telephone *string `json:"telephone,omitempty"`
2446	// Name - READ-ONLY; The name of the thing represented by this object.
2447	Name *string `json:"name,omitempty"`
2448	// URL - READ-ONLY; The URL to get more information about the thing represented by this object.
2449	URL *string `json:"url,omitempty"`
2450	// EntityPresentationInfo - READ-ONLY; Additional information about the entity such as hints that you can use to determine the entity's type. To determine the entity's type, use the entityScenario and entityTypeHint fields.
2451	EntityPresentationInfo BasicEntitiesEntityPresentationInfo `json:"entityPresentationInfo,omitempty"`
2452	// ReadLink - READ-ONLY; The URL that returns this resource.
2453	ReadLink *string `json:"readLink,omitempty"`
2454	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
2455	WebSearchURL *string `json:"webSearchUrl,omitempty"`
2456	// PotentialAction - READ-ONLY
2457	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
2458	// ImmediateAction - READ-ONLY
2459	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
2460	// PreferredClickthroughURL - READ-ONLY
2461	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
2462	// AdaptiveCard - READ-ONLY
2463	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
2464	// ID - READ-ONLY; A String identifier.
2465	ID *string `json:"id,omitempty"`
2466	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
2467	Type TypeBasicResponseBase `json:"_type,omitempty"`
2468}
2469
2470// MarshalJSON is the custom marshaler for Place.
2471func (p Place) MarshalJSON() ([]byte, error) {
2472	p.Type = TypePlace
2473	objectMap := make(map[string]interface{})
2474	if p.Type != "" {
2475		objectMap["_type"] = p.Type
2476	}
2477	return json.Marshal(objectMap)
2478}
2479
2480// AsThing is the BasicResponseBase implementation for Place.
2481func (p Place) AsThing() (*Thing, bool) {
2482	return nil, false
2483}
2484
2485// AsBasicThing is the BasicResponseBase implementation for Place.
2486func (p Place) AsBasicThing() (BasicThing, bool) {
2487	return &p, true
2488}
2489
2490// AsPlaces is the BasicResponseBase implementation for Place.
2491func (p Place) AsPlaces() (*Places, bool) {
2492	return nil, false
2493}
2494
2495// AsSearchResultsAnswer is the BasicResponseBase implementation for Place.
2496func (p Place) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
2497	return nil, false
2498}
2499
2500// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for Place.
2501func (p Place) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
2502	return nil, false
2503}
2504
2505// AsSearchResponse is the BasicResponseBase implementation for Place.
2506func (p Place) AsSearchResponse() (*SearchResponse, bool) {
2507	return nil, false
2508}
2509
2510// AsPostalAddress is the BasicResponseBase implementation for Place.
2511func (p Place) AsPostalAddress() (*PostalAddress, bool) {
2512	return nil, false
2513}
2514
2515// AsPlace is the BasicResponseBase implementation for Place.
2516func (p Place) AsPlace() (*Place, bool) {
2517	return &p, true
2518}
2519
2520// AsAction is the BasicResponseBase implementation for Place.
2521func (p Place) AsAction() (*Action, bool) {
2522	return nil, false
2523}
2524
2525// AsBasicAction is the BasicResponseBase implementation for Place.
2526func (p Place) AsBasicAction() (BasicAction, bool) {
2527	return nil, false
2528}
2529
2530// AsResponse is the BasicResponseBase implementation for Place.
2531func (p Place) AsResponse() (*Response, bool) {
2532	return nil, false
2533}
2534
2535// AsBasicResponse is the BasicResponseBase implementation for Place.
2536func (p Place) AsBasicResponse() (BasicResponse, bool) {
2537	return &p, true
2538}
2539
2540// AsIdentifiable is the BasicResponseBase implementation for Place.
2541func (p Place) AsIdentifiable() (*Identifiable, bool) {
2542	return nil, false
2543}
2544
2545// AsBasicIdentifiable is the BasicResponseBase implementation for Place.
2546func (p Place) AsBasicIdentifiable() (BasicIdentifiable, bool) {
2547	return &p, true
2548}
2549
2550// AsAnswer is the BasicResponseBase implementation for Place.
2551func (p Place) AsAnswer() (*Answer, bool) {
2552	return nil, false
2553}
2554
2555// AsBasicAnswer is the BasicResponseBase implementation for Place.
2556func (p Place) AsBasicAnswer() (BasicAnswer, bool) {
2557	return nil, false
2558}
2559
2560// AsErrorResponse is the BasicResponseBase implementation for Place.
2561func (p Place) AsErrorResponse() (*ErrorResponse, bool) {
2562	return nil, false
2563}
2564
2565// AsCreativeWork is the BasicResponseBase implementation for Place.
2566func (p Place) AsCreativeWork() (*CreativeWork, bool) {
2567	return nil, false
2568}
2569
2570// AsBasicCreativeWork is the BasicResponseBase implementation for Place.
2571func (p Place) AsBasicCreativeWork() (BasicCreativeWork, bool) {
2572	return nil, false
2573}
2574
2575// AsIntangible is the BasicResponseBase implementation for Place.
2576func (p Place) AsIntangible() (*Intangible, bool) {
2577	return nil, false
2578}
2579
2580// AsBasicIntangible is the BasicResponseBase implementation for Place.
2581func (p Place) AsBasicIntangible() (BasicIntangible, bool) {
2582	return nil, false
2583}
2584
2585// AsSearchAction is the BasicResponseBase implementation for Place.
2586func (p Place) AsSearchAction() (*SearchAction, bool) {
2587	return nil, false
2588}
2589
2590// AsStructuredValue is the BasicResponseBase implementation for Place.
2591func (p Place) AsStructuredValue() (*StructuredValue, bool) {
2592	return nil, false
2593}
2594
2595// AsBasicStructuredValue is the BasicResponseBase implementation for Place.
2596func (p Place) AsBasicStructuredValue() (BasicStructuredValue, bool) {
2597	return nil, false
2598}
2599
2600// AsResponseBase is the BasicResponseBase implementation for Place.
2601func (p Place) AsResponseBase() (*ResponseBase, bool) {
2602	return nil, false
2603}
2604
2605// AsBasicResponseBase is the BasicResponseBase implementation for Place.
2606func (p Place) AsBasicResponseBase() (BasicResponseBase, bool) {
2607	return &p, true
2608}
2609
2610// UnmarshalJSON is the custom unmarshaler for Place struct.
2611func (p *Place) UnmarshalJSON(body []byte) error {
2612	var m map[string]*json.RawMessage
2613	err := json.Unmarshal(body, &m)
2614	if err != nil {
2615		return err
2616	}
2617	for k, v := range m {
2618		switch k {
2619		case "geo":
2620			if v != nil {
2621				geo, err := unmarshalBasicGeoCoordinates(*v)
2622				if err != nil {
2623					return err
2624				}
2625				p.Geo = geo
2626			}
2627		case "routablePoint":
2628			if v != nil {
2629				routablePoint, err := unmarshalBasicGeoCoordinates(*v)
2630				if err != nil {
2631					return err
2632				}
2633				p.RoutablePoint = routablePoint
2634			}
2635		case "address":
2636			if v != nil {
2637				var address PostalAddress
2638				err = json.Unmarshal(*v, &address)
2639				if err != nil {
2640					return err
2641				}
2642				p.Address = &address
2643			}
2644		case "telephone":
2645			if v != nil {
2646				var telephone string
2647				err = json.Unmarshal(*v, &telephone)
2648				if err != nil {
2649					return err
2650				}
2651				p.Telephone = &telephone
2652			}
2653		case "name":
2654			if v != nil {
2655				var name string
2656				err = json.Unmarshal(*v, &name)
2657				if err != nil {
2658					return err
2659				}
2660				p.Name = &name
2661			}
2662		case "url":
2663			if v != nil {
2664				var URL string
2665				err = json.Unmarshal(*v, &URL)
2666				if err != nil {
2667					return err
2668				}
2669				p.URL = &URL
2670			}
2671		case "entityPresentationInfo":
2672			if v != nil {
2673				entityPresentationInfo, err := unmarshalBasicEntitiesEntityPresentationInfo(*v)
2674				if err != nil {
2675					return err
2676				}
2677				p.EntityPresentationInfo = entityPresentationInfo
2678			}
2679		case "readLink":
2680			if v != nil {
2681				var readLink string
2682				err = json.Unmarshal(*v, &readLink)
2683				if err != nil {
2684					return err
2685				}
2686				p.ReadLink = &readLink
2687			}
2688		case "webSearchUrl":
2689			if v != nil {
2690				var webSearchURL string
2691				err = json.Unmarshal(*v, &webSearchURL)
2692				if err != nil {
2693					return err
2694				}
2695				p.WebSearchURL = &webSearchURL
2696			}
2697		case "potentialAction":
2698			if v != nil {
2699				potentialAction, err := unmarshalBasicActionArray(*v)
2700				if err != nil {
2701					return err
2702				}
2703				p.PotentialAction = &potentialAction
2704			}
2705		case "immediateAction":
2706			if v != nil {
2707				immediateAction, err := unmarshalBasicActionArray(*v)
2708				if err != nil {
2709					return err
2710				}
2711				p.ImmediateAction = &immediateAction
2712			}
2713		case "preferredClickthroughUrl":
2714			if v != nil {
2715				var preferredClickthroughURL string
2716				err = json.Unmarshal(*v, &preferredClickthroughURL)
2717				if err != nil {
2718					return err
2719				}
2720				p.PreferredClickthroughURL = &preferredClickthroughURL
2721			}
2722		case "adaptiveCard":
2723			if v != nil {
2724				var adaptiveCard string
2725				err = json.Unmarshal(*v, &adaptiveCard)
2726				if err != nil {
2727					return err
2728				}
2729				p.AdaptiveCard = &adaptiveCard
2730			}
2731		case "id":
2732			if v != nil {
2733				var ID string
2734				err = json.Unmarshal(*v, &ID)
2735				if err != nil {
2736					return err
2737				}
2738				p.ID = &ID
2739			}
2740		case "_type":
2741			if v != nil {
2742				var typeVar TypeBasicResponseBase
2743				err = json.Unmarshal(*v, &typeVar)
2744				if err != nil {
2745					return err
2746				}
2747				p.Type = typeVar
2748			}
2749		}
2750	}
2751
2752	return nil
2753}
2754
2755// Places defines a local entity answer.
2756type Places struct {
2757	// Value - A list of local entities, such as restaurants or hotels.
2758	Value *[]BasicThing `json:"value,omitempty"`
2759	// QueryContext - READ-ONLY
2760	QueryContext BasicQueryContext `json:"queryContext,omitempty"`
2761	// TotalEstimatedMatches - READ-ONLY; The estimated number of webpages that are relevant to the query. Use this number along with the count and offset query parameters to page the results.
2762	TotalEstimatedMatches *int64 `json:"totalEstimatedMatches,omitempty"`
2763	// IsFamilyFriendly - READ-ONLY
2764	IsFamilyFriendly *bool `json:"isFamilyFriendly,omitempty"`
2765	// ReadLink - READ-ONLY; The URL that returns this resource.
2766	ReadLink *string `json:"readLink,omitempty"`
2767	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
2768	WebSearchURL *string `json:"webSearchUrl,omitempty"`
2769	// PotentialAction - READ-ONLY
2770	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
2771	// ImmediateAction - READ-ONLY
2772	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
2773	// PreferredClickthroughURL - READ-ONLY
2774	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
2775	// AdaptiveCard - READ-ONLY
2776	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
2777	// ID - READ-ONLY; A String identifier.
2778	ID *string `json:"id,omitempty"`
2779	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
2780	Type TypeBasicResponseBase `json:"_type,omitempty"`
2781}
2782
2783// MarshalJSON is the custom marshaler for Places.
2784func (p Places) MarshalJSON() ([]byte, error) {
2785	p.Type = TypePlaces
2786	objectMap := make(map[string]interface{})
2787	if p.Value != nil {
2788		objectMap["value"] = p.Value
2789	}
2790	if p.Type != "" {
2791		objectMap["_type"] = p.Type
2792	}
2793	return json.Marshal(objectMap)
2794}
2795
2796// AsThing is the BasicResponseBase implementation for Places.
2797func (p Places) AsThing() (*Thing, bool) {
2798	return nil, false
2799}
2800
2801// AsBasicThing is the BasicResponseBase implementation for Places.
2802func (p Places) AsBasicThing() (BasicThing, bool) {
2803	return nil, false
2804}
2805
2806// AsPlaces is the BasicResponseBase implementation for Places.
2807func (p Places) AsPlaces() (*Places, bool) {
2808	return &p, true
2809}
2810
2811// AsSearchResultsAnswer is the BasicResponseBase implementation for Places.
2812func (p Places) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
2813	return nil, false
2814}
2815
2816// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for Places.
2817func (p Places) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
2818	return &p, true
2819}
2820
2821// AsSearchResponse is the BasicResponseBase implementation for Places.
2822func (p Places) AsSearchResponse() (*SearchResponse, bool) {
2823	return nil, false
2824}
2825
2826// AsPostalAddress is the BasicResponseBase implementation for Places.
2827func (p Places) AsPostalAddress() (*PostalAddress, bool) {
2828	return nil, false
2829}
2830
2831// AsPlace is the BasicResponseBase implementation for Places.
2832func (p Places) AsPlace() (*Place, bool) {
2833	return nil, false
2834}
2835
2836// AsAction is the BasicResponseBase implementation for Places.
2837func (p Places) AsAction() (*Action, bool) {
2838	return nil, false
2839}
2840
2841// AsBasicAction is the BasicResponseBase implementation for Places.
2842func (p Places) AsBasicAction() (BasicAction, bool) {
2843	return nil, false
2844}
2845
2846// AsResponse is the BasicResponseBase implementation for Places.
2847func (p Places) AsResponse() (*Response, bool) {
2848	return nil, false
2849}
2850
2851// AsBasicResponse is the BasicResponseBase implementation for Places.
2852func (p Places) AsBasicResponse() (BasicResponse, bool) {
2853	return &p, true
2854}
2855
2856// AsIdentifiable is the BasicResponseBase implementation for Places.
2857func (p Places) AsIdentifiable() (*Identifiable, bool) {
2858	return nil, false
2859}
2860
2861// AsBasicIdentifiable is the BasicResponseBase implementation for Places.
2862func (p Places) AsBasicIdentifiable() (BasicIdentifiable, bool) {
2863	return &p, true
2864}
2865
2866// AsAnswer is the BasicResponseBase implementation for Places.
2867func (p Places) AsAnswer() (*Answer, bool) {
2868	return nil, false
2869}
2870
2871// AsBasicAnswer is the BasicResponseBase implementation for Places.
2872func (p Places) AsBasicAnswer() (BasicAnswer, bool) {
2873	return &p, true
2874}
2875
2876// AsErrorResponse is the BasicResponseBase implementation for Places.
2877func (p Places) AsErrorResponse() (*ErrorResponse, bool) {
2878	return nil, false
2879}
2880
2881// AsCreativeWork is the BasicResponseBase implementation for Places.
2882func (p Places) AsCreativeWork() (*CreativeWork, bool) {
2883	return nil, false
2884}
2885
2886// AsBasicCreativeWork is the BasicResponseBase implementation for Places.
2887func (p Places) AsBasicCreativeWork() (BasicCreativeWork, bool) {
2888	return nil, false
2889}
2890
2891// AsIntangible is the BasicResponseBase implementation for Places.
2892func (p Places) AsIntangible() (*Intangible, bool) {
2893	return nil, false
2894}
2895
2896// AsBasicIntangible is the BasicResponseBase implementation for Places.
2897func (p Places) AsBasicIntangible() (BasicIntangible, bool) {
2898	return nil, false
2899}
2900
2901// AsSearchAction is the BasicResponseBase implementation for Places.
2902func (p Places) AsSearchAction() (*SearchAction, bool) {
2903	return nil, false
2904}
2905
2906// AsStructuredValue is the BasicResponseBase implementation for Places.
2907func (p Places) AsStructuredValue() (*StructuredValue, bool) {
2908	return nil, false
2909}
2910
2911// AsBasicStructuredValue is the BasicResponseBase implementation for Places.
2912func (p Places) AsBasicStructuredValue() (BasicStructuredValue, bool) {
2913	return nil, false
2914}
2915
2916// AsResponseBase is the BasicResponseBase implementation for Places.
2917func (p Places) AsResponseBase() (*ResponseBase, bool) {
2918	return nil, false
2919}
2920
2921// AsBasicResponseBase is the BasicResponseBase implementation for Places.
2922func (p Places) AsBasicResponseBase() (BasicResponseBase, bool) {
2923	return &p, true
2924}
2925
2926// UnmarshalJSON is the custom unmarshaler for Places struct.
2927func (p *Places) UnmarshalJSON(body []byte) error {
2928	var m map[string]*json.RawMessage
2929	err := json.Unmarshal(body, &m)
2930	if err != nil {
2931		return err
2932	}
2933	for k, v := range m {
2934		switch k {
2935		case "value":
2936			if v != nil {
2937				value, err := unmarshalBasicThingArray(*v)
2938				if err != nil {
2939					return err
2940				}
2941				p.Value = &value
2942			}
2943		case "queryContext":
2944			if v != nil {
2945				queryContext, err := unmarshalBasicQueryContext(*v)
2946				if err != nil {
2947					return err
2948				}
2949				p.QueryContext = queryContext
2950			}
2951		case "totalEstimatedMatches":
2952			if v != nil {
2953				var totalEstimatedMatches int64
2954				err = json.Unmarshal(*v, &totalEstimatedMatches)
2955				if err != nil {
2956					return err
2957				}
2958				p.TotalEstimatedMatches = &totalEstimatedMatches
2959			}
2960		case "isFamilyFriendly":
2961			if v != nil {
2962				var isFamilyFriendly bool
2963				err = json.Unmarshal(*v, &isFamilyFriendly)
2964				if err != nil {
2965					return err
2966				}
2967				p.IsFamilyFriendly = &isFamilyFriendly
2968			}
2969		case "readLink":
2970			if v != nil {
2971				var readLink string
2972				err = json.Unmarshal(*v, &readLink)
2973				if err != nil {
2974					return err
2975				}
2976				p.ReadLink = &readLink
2977			}
2978		case "webSearchUrl":
2979			if v != nil {
2980				var webSearchURL string
2981				err = json.Unmarshal(*v, &webSearchURL)
2982				if err != nil {
2983					return err
2984				}
2985				p.WebSearchURL = &webSearchURL
2986			}
2987		case "potentialAction":
2988			if v != nil {
2989				potentialAction, err := unmarshalBasicActionArray(*v)
2990				if err != nil {
2991					return err
2992				}
2993				p.PotentialAction = &potentialAction
2994			}
2995		case "immediateAction":
2996			if v != nil {
2997				immediateAction, err := unmarshalBasicActionArray(*v)
2998				if err != nil {
2999					return err
3000				}
3001				p.ImmediateAction = &immediateAction
3002			}
3003		case "preferredClickthroughUrl":
3004			if v != nil {
3005				var preferredClickthroughURL string
3006				err = json.Unmarshal(*v, &preferredClickthroughURL)
3007				if err != nil {
3008					return err
3009				}
3010				p.PreferredClickthroughURL = &preferredClickthroughURL
3011			}
3012		case "adaptiveCard":
3013			if v != nil {
3014				var adaptiveCard string
3015				err = json.Unmarshal(*v, &adaptiveCard)
3016				if err != nil {
3017					return err
3018				}
3019				p.AdaptiveCard = &adaptiveCard
3020			}
3021		case "id":
3022			if v != nil {
3023				var ID string
3024				err = json.Unmarshal(*v, &ID)
3025				if err != nil {
3026					return err
3027				}
3028				p.ID = &ID
3029			}
3030		case "_type":
3031			if v != nil {
3032				var typeVar TypeBasicResponseBase
3033				err = json.Unmarshal(*v, &typeVar)
3034				if err != nil {
3035					return err
3036				}
3037				p.Type = typeVar
3038			}
3039		}
3040	}
3041
3042	return nil
3043}
3044
3045// PostalAddress defines a postal address.
3046type PostalAddress struct {
3047	// StreetAddress - READ-ONLY
3048	StreetAddress *string `json:"streetAddress,omitempty"`
3049	// AddressLocality - READ-ONLY; The city where the street address is located. For example, Seattle.
3050	AddressLocality *string `json:"addressLocality,omitempty"`
3051	// AddressSubregion - READ-ONLY
3052	AddressSubregion *string `json:"addressSubregion,omitempty"`
3053	// AddressRegion - READ-ONLY; The state or province code where the street address is located. This could be the two-letter code. For example, WA, or the full name , Washington.
3054	AddressRegion *string `json:"addressRegion,omitempty"`
3055	// PostalCode - READ-ONLY; The zip code or postal code where the street address is located. For example, 98052.
3056	PostalCode *string `json:"postalCode,omitempty"`
3057	// PostOfficeBoxNumber - READ-ONLY
3058	PostOfficeBoxNumber *string `json:"postOfficeBoxNumber,omitempty"`
3059	// AddressCountry - READ-ONLY; The country/region where the street address is located. This could be the two-letter ISO code. For example, US, or the full name, United States.
3060	AddressCountry *string `json:"addressCountry,omitempty"`
3061	// CountryIso - READ-ONLY; The two letter ISO code of this country. For example, US.
3062	CountryIso *string `json:"countryIso,omitempty"`
3063	// Neighborhood - READ-ONLY; The neighborhood where the street address is located. For example, Westlake.
3064	Neighborhood *string `json:"neighborhood,omitempty"`
3065	// AddressRegionAbbreviation - READ-ONLY; Region Abbreviation. For example, WA.
3066	AddressRegionAbbreviation *string `json:"addressRegionAbbreviation,omitempty"`
3067	// Text - READ-ONLY; The complete address. For example, 2100 Westlake Ave N, Bellevue, WA 98052.
3068	Text *string `json:"text,omitempty"`
3069	// HouseNumber - READ-ONLY
3070	HouseNumber *string `json:"houseNumber,omitempty"`
3071	// StreetName - READ-ONLY
3072	StreetName *string `json:"streetName,omitempty"`
3073	// FormattingRuleID - READ-ONLY
3074	FormattingRuleID *string `json:"formattingRuleId,omitempty"`
3075	// Name - READ-ONLY; The name of the thing represented by this object.
3076	Name *string `json:"name,omitempty"`
3077	// URL - READ-ONLY; The URL to get more information about the thing represented by this object.
3078	URL *string `json:"url,omitempty"`
3079	// EntityPresentationInfo - READ-ONLY; Additional information about the entity such as hints that you can use to determine the entity's type. To determine the entity's type, use the entityScenario and entityTypeHint fields.
3080	EntityPresentationInfo BasicEntitiesEntityPresentationInfo `json:"entityPresentationInfo,omitempty"`
3081	// ReadLink - READ-ONLY; The URL that returns this resource.
3082	ReadLink *string `json:"readLink,omitempty"`
3083	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
3084	WebSearchURL *string `json:"webSearchUrl,omitempty"`
3085	// PotentialAction - READ-ONLY
3086	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
3087	// ImmediateAction - READ-ONLY
3088	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
3089	// PreferredClickthroughURL - READ-ONLY
3090	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
3091	// AdaptiveCard - READ-ONLY
3092	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
3093	// ID - READ-ONLY; A String identifier.
3094	ID *string `json:"id,omitempty"`
3095	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
3096	Type TypeBasicResponseBase `json:"_type,omitempty"`
3097}
3098
3099// MarshalJSON is the custom marshaler for PostalAddress.
3100func (pa PostalAddress) MarshalJSON() ([]byte, error) {
3101	pa.Type = TypePostalAddress
3102	objectMap := make(map[string]interface{})
3103	if pa.Type != "" {
3104		objectMap["_type"] = pa.Type
3105	}
3106	return json.Marshal(objectMap)
3107}
3108
3109// AsThing is the BasicResponseBase implementation for PostalAddress.
3110func (pa PostalAddress) AsThing() (*Thing, bool) {
3111	return nil, false
3112}
3113
3114// AsBasicThing is the BasicResponseBase implementation for PostalAddress.
3115func (pa PostalAddress) AsBasicThing() (BasicThing, bool) {
3116	return &pa, true
3117}
3118
3119// AsPlaces is the BasicResponseBase implementation for PostalAddress.
3120func (pa PostalAddress) AsPlaces() (*Places, bool) {
3121	return nil, false
3122}
3123
3124// AsSearchResultsAnswer is the BasicResponseBase implementation for PostalAddress.
3125func (pa PostalAddress) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
3126	return nil, false
3127}
3128
3129// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for PostalAddress.
3130func (pa PostalAddress) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
3131	return nil, false
3132}
3133
3134// AsSearchResponse is the BasicResponseBase implementation for PostalAddress.
3135func (pa PostalAddress) AsSearchResponse() (*SearchResponse, bool) {
3136	return nil, false
3137}
3138
3139// AsPostalAddress is the BasicResponseBase implementation for PostalAddress.
3140func (pa PostalAddress) AsPostalAddress() (*PostalAddress, bool) {
3141	return &pa, true
3142}
3143
3144// AsPlace is the BasicResponseBase implementation for PostalAddress.
3145func (pa PostalAddress) AsPlace() (*Place, bool) {
3146	return nil, false
3147}
3148
3149// AsAction is the BasicResponseBase implementation for PostalAddress.
3150func (pa PostalAddress) AsAction() (*Action, bool) {
3151	return nil, false
3152}
3153
3154// AsBasicAction is the BasicResponseBase implementation for PostalAddress.
3155func (pa PostalAddress) AsBasicAction() (BasicAction, bool) {
3156	return nil, false
3157}
3158
3159// AsResponse is the BasicResponseBase implementation for PostalAddress.
3160func (pa PostalAddress) AsResponse() (*Response, bool) {
3161	return nil, false
3162}
3163
3164// AsBasicResponse is the BasicResponseBase implementation for PostalAddress.
3165func (pa PostalAddress) AsBasicResponse() (BasicResponse, bool) {
3166	return &pa, true
3167}
3168
3169// AsIdentifiable is the BasicResponseBase implementation for PostalAddress.
3170func (pa PostalAddress) AsIdentifiable() (*Identifiable, bool) {
3171	return nil, false
3172}
3173
3174// AsBasicIdentifiable is the BasicResponseBase implementation for PostalAddress.
3175func (pa PostalAddress) AsBasicIdentifiable() (BasicIdentifiable, bool) {
3176	return &pa, true
3177}
3178
3179// AsAnswer is the BasicResponseBase implementation for PostalAddress.
3180func (pa PostalAddress) AsAnswer() (*Answer, bool) {
3181	return nil, false
3182}
3183
3184// AsBasicAnswer is the BasicResponseBase implementation for PostalAddress.
3185func (pa PostalAddress) AsBasicAnswer() (BasicAnswer, bool) {
3186	return nil, false
3187}
3188
3189// AsErrorResponse is the BasicResponseBase implementation for PostalAddress.
3190func (pa PostalAddress) AsErrorResponse() (*ErrorResponse, bool) {
3191	return nil, false
3192}
3193
3194// AsCreativeWork is the BasicResponseBase implementation for PostalAddress.
3195func (pa PostalAddress) AsCreativeWork() (*CreativeWork, bool) {
3196	return nil, false
3197}
3198
3199// AsBasicCreativeWork is the BasicResponseBase implementation for PostalAddress.
3200func (pa PostalAddress) AsBasicCreativeWork() (BasicCreativeWork, bool) {
3201	return nil, false
3202}
3203
3204// AsIntangible is the BasicResponseBase implementation for PostalAddress.
3205func (pa PostalAddress) AsIntangible() (*Intangible, bool) {
3206	return nil, false
3207}
3208
3209// AsBasicIntangible is the BasicResponseBase implementation for PostalAddress.
3210func (pa PostalAddress) AsBasicIntangible() (BasicIntangible, bool) {
3211	return &pa, true
3212}
3213
3214// AsSearchAction is the BasicResponseBase implementation for PostalAddress.
3215func (pa PostalAddress) AsSearchAction() (*SearchAction, bool) {
3216	return nil, false
3217}
3218
3219// AsStructuredValue is the BasicResponseBase implementation for PostalAddress.
3220func (pa PostalAddress) AsStructuredValue() (*StructuredValue, bool) {
3221	return nil, false
3222}
3223
3224// AsBasicStructuredValue is the BasicResponseBase implementation for PostalAddress.
3225func (pa PostalAddress) AsBasicStructuredValue() (BasicStructuredValue, bool) {
3226	return &pa, true
3227}
3228
3229// AsResponseBase is the BasicResponseBase implementation for PostalAddress.
3230func (pa PostalAddress) AsResponseBase() (*ResponseBase, bool) {
3231	return nil, false
3232}
3233
3234// AsBasicResponseBase is the BasicResponseBase implementation for PostalAddress.
3235func (pa PostalAddress) AsBasicResponseBase() (BasicResponseBase, bool) {
3236	return &pa, true
3237}
3238
3239// UnmarshalJSON is the custom unmarshaler for PostalAddress struct.
3240func (pa *PostalAddress) UnmarshalJSON(body []byte) error {
3241	var m map[string]*json.RawMessage
3242	err := json.Unmarshal(body, &m)
3243	if err != nil {
3244		return err
3245	}
3246	for k, v := range m {
3247		switch k {
3248		case "streetAddress":
3249			if v != nil {
3250				var streetAddress string
3251				err = json.Unmarshal(*v, &streetAddress)
3252				if err != nil {
3253					return err
3254				}
3255				pa.StreetAddress = &streetAddress
3256			}
3257		case "addressLocality":
3258			if v != nil {
3259				var addressLocality string
3260				err = json.Unmarshal(*v, &addressLocality)
3261				if err != nil {
3262					return err
3263				}
3264				pa.AddressLocality = &addressLocality
3265			}
3266		case "addressSubregion":
3267			if v != nil {
3268				var addressSubregion string
3269				err = json.Unmarshal(*v, &addressSubregion)
3270				if err != nil {
3271					return err
3272				}
3273				pa.AddressSubregion = &addressSubregion
3274			}
3275		case "addressRegion":
3276			if v != nil {
3277				var addressRegion string
3278				err = json.Unmarshal(*v, &addressRegion)
3279				if err != nil {
3280					return err
3281				}
3282				pa.AddressRegion = &addressRegion
3283			}
3284		case "postalCode":
3285			if v != nil {
3286				var postalCode string
3287				err = json.Unmarshal(*v, &postalCode)
3288				if err != nil {
3289					return err
3290				}
3291				pa.PostalCode = &postalCode
3292			}
3293		case "postOfficeBoxNumber":
3294			if v != nil {
3295				var postOfficeBoxNumber string
3296				err = json.Unmarshal(*v, &postOfficeBoxNumber)
3297				if err != nil {
3298					return err
3299				}
3300				pa.PostOfficeBoxNumber = &postOfficeBoxNumber
3301			}
3302		case "addressCountry":
3303			if v != nil {
3304				var addressCountry string
3305				err = json.Unmarshal(*v, &addressCountry)
3306				if err != nil {
3307					return err
3308				}
3309				pa.AddressCountry = &addressCountry
3310			}
3311		case "countryIso":
3312			if v != nil {
3313				var countryIso string
3314				err = json.Unmarshal(*v, &countryIso)
3315				if err != nil {
3316					return err
3317				}
3318				pa.CountryIso = &countryIso
3319			}
3320		case "neighborhood":
3321			if v != nil {
3322				var neighborhood string
3323				err = json.Unmarshal(*v, &neighborhood)
3324				if err != nil {
3325					return err
3326				}
3327				pa.Neighborhood = &neighborhood
3328			}
3329		case "addressRegionAbbreviation":
3330			if v != nil {
3331				var addressRegionAbbreviation string
3332				err = json.Unmarshal(*v, &addressRegionAbbreviation)
3333				if err != nil {
3334					return err
3335				}
3336				pa.AddressRegionAbbreviation = &addressRegionAbbreviation
3337			}
3338		case "text":
3339			if v != nil {
3340				var textVar string
3341				err = json.Unmarshal(*v, &textVar)
3342				if err != nil {
3343					return err
3344				}
3345				pa.Text = &textVar
3346			}
3347		case "houseNumber":
3348			if v != nil {
3349				var houseNumber string
3350				err = json.Unmarshal(*v, &houseNumber)
3351				if err != nil {
3352					return err
3353				}
3354				pa.HouseNumber = &houseNumber
3355			}
3356		case "streetName":
3357			if v != nil {
3358				var streetName string
3359				err = json.Unmarshal(*v, &streetName)
3360				if err != nil {
3361					return err
3362				}
3363				pa.StreetName = &streetName
3364			}
3365		case "formattingRuleId":
3366			if v != nil {
3367				var formattingRuleID string
3368				err = json.Unmarshal(*v, &formattingRuleID)
3369				if err != nil {
3370					return err
3371				}
3372				pa.FormattingRuleID = &formattingRuleID
3373			}
3374		case "name":
3375			if v != nil {
3376				var name string
3377				err = json.Unmarshal(*v, &name)
3378				if err != nil {
3379					return err
3380				}
3381				pa.Name = &name
3382			}
3383		case "url":
3384			if v != nil {
3385				var URL string
3386				err = json.Unmarshal(*v, &URL)
3387				if err != nil {
3388					return err
3389				}
3390				pa.URL = &URL
3391			}
3392		case "entityPresentationInfo":
3393			if v != nil {
3394				entityPresentationInfo, err := unmarshalBasicEntitiesEntityPresentationInfo(*v)
3395				if err != nil {
3396					return err
3397				}
3398				pa.EntityPresentationInfo = entityPresentationInfo
3399			}
3400		case "readLink":
3401			if v != nil {
3402				var readLink string
3403				err = json.Unmarshal(*v, &readLink)
3404				if err != nil {
3405					return err
3406				}
3407				pa.ReadLink = &readLink
3408			}
3409		case "webSearchUrl":
3410			if v != nil {
3411				var webSearchURL string
3412				err = json.Unmarshal(*v, &webSearchURL)
3413				if err != nil {
3414					return err
3415				}
3416				pa.WebSearchURL = &webSearchURL
3417			}
3418		case "potentialAction":
3419			if v != nil {
3420				potentialAction, err := unmarshalBasicActionArray(*v)
3421				if err != nil {
3422					return err
3423				}
3424				pa.PotentialAction = &potentialAction
3425			}
3426		case "immediateAction":
3427			if v != nil {
3428				immediateAction, err := unmarshalBasicActionArray(*v)
3429				if err != nil {
3430					return err
3431				}
3432				pa.ImmediateAction = &immediateAction
3433			}
3434		case "preferredClickthroughUrl":
3435			if v != nil {
3436				var preferredClickthroughURL string
3437				err = json.Unmarshal(*v, &preferredClickthroughURL)
3438				if err != nil {
3439					return err
3440				}
3441				pa.PreferredClickthroughURL = &preferredClickthroughURL
3442			}
3443		case "adaptiveCard":
3444			if v != nil {
3445				var adaptiveCard string
3446				err = json.Unmarshal(*v, &adaptiveCard)
3447				if err != nil {
3448					return err
3449				}
3450				pa.AdaptiveCard = &adaptiveCard
3451			}
3452		case "id":
3453			if v != nil {
3454				var ID string
3455				err = json.Unmarshal(*v, &ID)
3456				if err != nil {
3457					return err
3458				}
3459				pa.ID = &ID
3460			}
3461		case "_type":
3462			if v != nil {
3463				var typeVar TypeBasicResponseBase
3464				err = json.Unmarshal(*v, &typeVar)
3465				if err != nil {
3466					return err
3467				}
3468				pa.Type = typeVar
3469			}
3470		}
3471	}
3472
3473	return nil
3474}
3475
3476// BasicQueryContext defines the query context that Bing used for the request.
3477type BasicQueryContext interface {
3478	AsQueryContext() (*QueryContext, bool)
3479}
3480
3481// QueryContext defines the query context that Bing used for the request.
3482type QueryContext struct {
3483	// OriginalQuery - The query string as specified in the request.
3484	OriginalQuery *string `json:"originalQuery,omitempty"`
3485	// AlteredQuery - READ-ONLY; The query string used by Bing to perform the query. Bing uses the altered query string if the original query string contained spelling mistakes. For example, if the query string is "saling downwind", the altered query string will be "sailing downwind". This field is included only if the original query string contains a spelling mistake.
3486	AlteredQuery *string `json:"alteredQuery,omitempty"`
3487	// AlterationDisplayQuery - READ-ONLY; AlteredQuery that is formatted for display purpose. The query string in the AlterationDisplayQuery can be html-escaped and can contain hit-highlighting characters
3488	AlterationDisplayQuery *string `json:"alterationDisplayQuery,omitempty"`
3489	// AlterationOverrideQuery - READ-ONLY; The query string to use to force Bing to use the original string. For example, if the query string is "saling downwind", the override query string will be "+saling downwind". Remember to encode the query string which results in "%2Bsaling+downwind". This field is included only if the original query string contains a spelling mistake.
3490	AlterationOverrideQuery *string `json:"alterationOverrideQuery,omitempty"`
3491	// AdultIntent - READ-ONLY; A Boolean value that indicates whether the specified query has adult intent. The value is true if the query has adult intent; otherwise, false.
3492	AdultIntent *bool `json:"adultIntent,omitempty"`
3493	// AskUserForLocation - READ-ONLY; A Boolean value that indicates whether Bing requires the user's location to provide accurate results. If you specified the user's location by using the X-MSEdge-ClientIP and X-Search-Location headers, you can ignore this field. For location aware queries, such as "today's weather" or "restaurants near me" that need the user's location to provide accurate results, this field is set to true. For location aware queries that include the location (for example, "Seattle weather"), this field is set to false. This field is also set to false for queries that are not location aware, such as "best sellers".
3494	AskUserForLocation *bool `json:"askUserForLocation,omitempty"`
3495	// IsTransactional - READ-ONLY
3496	IsTransactional *bool `json:"isTransactional,omitempty"`
3497	// Type - Possible values include: 'TypeQueryContext'
3498	Type Type `json:"_type,omitempty"`
3499}
3500
3501func unmarshalBasicQueryContext(body []byte) (BasicQueryContext, error) {
3502	var m map[string]interface{}
3503	err := json.Unmarshal(body, &m)
3504	if err != nil {
3505		return nil, err
3506	}
3507
3508	switch m["_type"] {
3509	default:
3510		var qc QueryContext
3511		err := json.Unmarshal(body, &qc)
3512		return qc, err
3513	}
3514}
3515func unmarshalBasicQueryContextArray(body []byte) ([]BasicQueryContext, error) {
3516	var rawMessages []*json.RawMessage
3517	err := json.Unmarshal(body, &rawMessages)
3518	if err != nil {
3519		return nil, err
3520	}
3521
3522	qcArray := make([]BasicQueryContext, len(rawMessages))
3523
3524	for index, rawMessage := range rawMessages {
3525		qc, err := unmarshalBasicQueryContext(*rawMessage)
3526		if err != nil {
3527			return nil, err
3528		}
3529		qcArray[index] = qc
3530	}
3531	return qcArray, nil
3532}
3533
3534// MarshalJSON is the custom marshaler for QueryContext.
3535func (qc QueryContext) MarshalJSON() ([]byte, error) {
3536	qc.Type = TypeQueryContext
3537	objectMap := make(map[string]interface{})
3538	if qc.OriginalQuery != nil {
3539		objectMap["originalQuery"] = qc.OriginalQuery
3540	}
3541	if qc.Type != "" {
3542		objectMap["_type"] = qc.Type
3543	}
3544	return json.Marshal(objectMap)
3545}
3546
3547// AsQueryContext is the BasicQueryContext implementation for QueryContext.
3548func (qc QueryContext) AsQueryContext() (*QueryContext, bool) {
3549	return &qc, true
3550}
3551
3552// AsBasicQueryContext is the BasicQueryContext implementation for QueryContext.
3553func (qc QueryContext) AsBasicQueryContext() (BasicQueryContext, bool) {
3554	return &qc, true
3555}
3556
3557// BasicResponse defines a response. All schemas that return at the root of the response must inherit from this object.
3558type BasicResponse interface {
3559	AsThing() (*Thing, bool)
3560	AsBasicThing() (BasicThing, bool)
3561	AsPlaces() (*Places, bool)
3562	AsSearchResultsAnswer() (*SearchResultsAnswer, bool)
3563	AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool)
3564	AsSearchResponse() (*SearchResponse, bool)
3565	AsPostalAddress() (*PostalAddress, bool)
3566	AsPlace() (*Place, bool)
3567	AsAction() (*Action, bool)
3568	AsBasicAction() (BasicAction, bool)
3569	AsAnswer() (*Answer, bool)
3570	AsBasicAnswer() (BasicAnswer, bool)
3571	AsErrorResponse() (*ErrorResponse, bool)
3572	AsCreativeWork() (*CreativeWork, bool)
3573	AsBasicCreativeWork() (BasicCreativeWork, bool)
3574	AsIntangible() (*Intangible, bool)
3575	AsBasicIntangible() (BasicIntangible, bool)
3576	AsSearchAction() (*SearchAction, bool)
3577	AsStructuredValue() (*StructuredValue, bool)
3578	AsBasicStructuredValue() (BasicStructuredValue, bool)
3579	AsResponse() (*Response, bool)
3580}
3581
3582// Response defines a response. All schemas that return at the root of the response must inherit from this
3583// object.
3584type Response struct {
3585	// ReadLink - READ-ONLY; The URL that returns this resource.
3586	ReadLink *string `json:"readLink,omitempty"`
3587	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
3588	WebSearchURL *string `json:"webSearchUrl,omitempty"`
3589	// PotentialAction - READ-ONLY
3590	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
3591	// ImmediateAction - READ-ONLY
3592	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
3593	// PreferredClickthroughURL - READ-ONLY
3594	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
3595	// AdaptiveCard - READ-ONLY
3596	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
3597	// ID - READ-ONLY; A String identifier.
3598	ID *string `json:"id,omitempty"`
3599	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
3600	Type TypeBasicResponseBase `json:"_type,omitempty"`
3601}
3602
3603func unmarshalBasicResponse(body []byte) (BasicResponse, error) {
3604	var m map[string]interface{}
3605	err := json.Unmarshal(body, &m)
3606	if err != nil {
3607		return nil, err
3608	}
3609
3610	switch m["_type"] {
3611	case string(TypeThing):
3612		var t Thing
3613		err := json.Unmarshal(body, &t)
3614		return t, err
3615	case string(TypePlaces):
3616		var p Places
3617		err := json.Unmarshal(body, &p)
3618		return p, err
3619	case string(TypeSearchResultsAnswer):
3620		var sra SearchResultsAnswer
3621		err := json.Unmarshal(body, &sra)
3622		return sra, err
3623	case string(TypeSearchResponse):
3624		var sr SearchResponse
3625		err := json.Unmarshal(body, &sr)
3626		return sr, err
3627	case string(TypePostalAddress):
3628		var pa PostalAddress
3629		err := json.Unmarshal(body, &pa)
3630		return pa, err
3631	case string(TypePlace):
3632		var p Place
3633		err := json.Unmarshal(body, &p)
3634		return p, err
3635	case string(TypeAction):
3636		var a Action
3637		err := json.Unmarshal(body, &a)
3638		return a, err
3639	case string(TypeAnswer):
3640		var a Answer
3641		err := json.Unmarshal(body, &a)
3642		return a, err
3643	case string(TypeErrorResponse):
3644		var er ErrorResponse
3645		err := json.Unmarshal(body, &er)
3646		return er, err
3647	case string(TypeCreativeWork):
3648		var cw CreativeWork
3649		err := json.Unmarshal(body, &cw)
3650		return cw, err
3651	case string(TypeIntangible):
3652		var i Intangible
3653		err := json.Unmarshal(body, &i)
3654		return i, err
3655	case string(TypeSearchAction):
3656		var sa SearchAction
3657		err := json.Unmarshal(body, &sa)
3658		return sa, err
3659	case string(TypeStructuredValue):
3660		var sv StructuredValue
3661		err := json.Unmarshal(body, &sv)
3662		return sv, err
3663	default:
3664		var r Response
3665		err := json.Unmarshal(body, &r)
3666		return r, err
3667	}
3668}
3669func unmarshalBasicResponseArray(body []byte) ([]BasicResponse, error) {
3670	var rawMessages []*json.RawMessage
3671	err := json.Unmarshal(body, &rawMessages)
3672	if err != nil {
3673		return nil, err
3674	}
3675
3676	rArray := make([]BasicResponse, len(rawMessages))
3677
3678	for index, rawMessage := range rawMessages {
3679		r, err := unmarshalBasicResponse(*rawMessage)
3680		if err != nil {
3681			return nil, err
3682		}
3683		rArray[index] = r
3684	}
3685	return rArray, nil
3686}
3687
3688// MarshalJSON is the custom marshaler for Response.
3689func (r Response) MarshalJSON() ([]byte, error) {
3690	r.Type = TypeResponse
3691	objectMap := make(map[string]interface{})
3692	if r.Type != "" {
3693		objectMap["_type"] = r.Type
3694	}
3695	return json.Marshal(objectMap)
3696}
3697
3698// AsThing is the BasicResponseBase implementation for Response.
3699func (r Response) AsThing() (*Thing, bool) {
3700	return nil, false
3701}
3702
3703// AsBasicThing is the BasicResponseBase implementation for Response.
3704func (r Response) AsBasicThing() (BasicThing, bool) {
3705	return nil, false
3706}
3707
3708// AsPlaces is the BasicResponseBase implementation for Response.
3709func (r Response) AsPlaces() (*Places, bool) {
3710	return nil, false
3711}
3712
3713// AsSearchResultsAnswer is the BasicResponseBase implementation for Response.
3714func (r Response) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
3715	return nil, false
3716}
3717
3718// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for Response.
3719func (r Response) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
3720	return nil, false
3721}
3722
3723// AsSearchResponse is the BasicResponseBase implementation for Response.
3724func (r Response) AsSearchResponse() (*SearchResponse, bool) {
3725	return nil, false
3726}
3727
3728// AsPostalAddress is the BasicResponseBase implementation for Response.
3729func (r Response) AsPostalAddress() (*PostalAddress, bool) {
3730	return nil, false
3731}
3732
3733// AsPlace is the BasicResponseBase implementation for Response.
3734func (r Response) AsPlace() (*Place, bool) {
3735	return nil, false
3736}
3737
3738// AsAction is the BasicResponseBase implementation for Response.
3739func (r Response) AsAction() (*Action, bool) {
3740	return nil, false
3741}
3742
3743// AsBasicAction is the BasicResponseBase implementation for Response.
3744func (r Response) AsBasicAction() (BasicAction, bool) {
3745	return nil, false
3746}
3747
3748// AsResponse is the BasicResponseBase implementation for Response.
3749func (r Response) AsResponse() (*Response, bool) {
3750	return &r, true
3751}
3752
3753// AsBasicResponse is the BasicResponseBase implementation for Response.
3754func (r Response) AsBasicResponse() (BasicResponse, bool) {
3755	return &r, true
3756}
3757
3758// AsIdentifiable is the BasicResponseBase implementation for Response.
3759func (r Response) AsIdentifiable() (*Identifiable, bool) {
3760	return nil, false
3761}
3762
3763// AsBasicIdentifiable is the BasicResponseBase implementation for Response.
3764func (r Response) AsBasicIdentifiable() (BasicIdentifiable, bool) {
3765	return &r, true
3766}
3767
3768// AsAnswer is the BasicResponseBase implementation for Response.
3769func (r Response) AsAnswer() (*Answer, bool) {
3770	return nil, false
3771}
3772
3773// AsBasicAnswer is the BasicResponseBase implementation for Response.
3774func (r Response) AsBasicAnswer() (BasicAnswer, bool) {
3775	return nil, false
3776}
3777
3778// AsErrorResponse is the BasicResponseBase implementation for Response.
3779func (r Response) AsErrorResponse() (*ErrorResponse, bool) {
3780	return nil, false
3781}
3782
3783// AsCreativeWork is the BasicResponseBase implementation for Response.
3784func (r Response) AsCreativeWork() (*CreativeWork, bool) {
3785	return nil, false
3786}
3787
3788// AsBasicCreativeWork is the BasicResponseBase implementation for Response.
3789func (r Response) AsBasicCreativeWork() (BasicCreativeWork, bool) {
3790	return nil, false
3791}
3792
3793// AsIntangible is the BasicResponseBase implementation for Response.
3794func (r Response) AsIntangible() (*Intangible, bool) {
3795	return nil, false
3796}
3797
3798// AsBasicIntangible is the BasicResponseBase implementation for Response.
3799func (r Response) AsBasicIntangible() (BasicIntangible, bool) {
3800	return nil, false
3801}
3802
3803// AsSearchAction is the BasicResponseBase implementation for Response.
3804func (r Response) AsSearchAction() (*SearchAction, bool) {
3805	return nil, false
3806}
3807
3808// AsStructuredValue is the BasicResponseBase implementation for Response.
3809func (r Response) AsStructuredValue() (*StructuredValue, bool) {
3810	return nil, false
3811}
3812
3813// AsBasicStructuredValue is the BasicResponseBase implementation for Response.
3814func (r Response) AsBasicStructuredValue() (BasicStructuredValue, bool) {
3815	return nil, false
3816}
3817
3818// AsResponseBase is the BasicResponseBase implementation for Response.
3819func (r Response) AsResponseBase() (*ResponseBase, bool) {
3820	return nil, false
3821}
3822
3823// AsBasicResponseBase is the BasicResponseBase implementation for Response.
3824func (r Response) AsBasicResponseBase() (BasicResponseBase, bool) {
3825	return &r, true
3826}
3827
3828// UnmarshalJSON is the custom unmarshaler for Response struct.
3829func (r *Response) UnmarshalJSON(body []byte) error {
3830	var m map[string]*json.RawMessage
3831	err := json.Unmarshal(body, &m)
3832	if err != nil {
3833		return err
3834	}
3835	for k, v := range m {
3836		switch k {
3837		case "readLink":
3838			if v != nil {
3839				var readLink string
3840				err = json.Unmarshal(*v, &readLink)
3841				if err != nil {
3842					return err
3843				}
3844				r.ReadLink = &readLink
3845			}
3846		case "webSearchUrl":
3847			if v != nil {
3848				var webSearchURL string
3849				err = json.Unmarshal(*v, &webSearchURL)
3850				if err != nil {
3851					return err
3852				}
3853				r.WebSearchURL = &webSearchURL
3854			}
3855		case "potentialAction":
3856			if v != nil {
3857				potentialAction, err := unmarshalBasicActionArray(*v)
3858				if err != nil {
3859					return err
3860				}
3861				r.PotentialAction = &potentialAction
3862			}
3863		case "immediateAction":
3864			if v != nil {
3865				immediateAction, err := unmarshalBasicActionArray(*v)
3866				if err != nil {
3867					return err
3868				}
3869				r.ImmediateAction = &immediateAction
3870			}
3871		case "preferredClickthroughUrl":
3872			if v != nil {
3873				var preferredClickthroughURL string
3874				err = json.Unmarshal(*v, &preferredClickthroughURL)
3875				if err != nil {
3876					return err
3877				}
3878				r.PreferredClickthroughURL = &preferredClickthroughURL
3879			}
3880		case "adaptiveCard":
3881			if v != nil {
3882				var adaptiveCard string
3883				err = json.Unmarshal(*v, &adaptiveCard)
3884				if err != nil {
3885					return err
3886				}
3887				r.AdaptiveCard = &adaptiveCard
3888			}
3889		case "id":
3890			if v != nil {
3891				var ID string
3892				err = json.Unmarshal(*v, &ID)
3893				if err != nil {
3894					return err
3895				}
3896				r.ID = &ID
3897			}
3898		case "_type":
3899			if v != nil {
3900				var typeVar TypeBasicResponseBase
3901				err = json.Unmarshal(*v, &typeVar)
3902				if err != nil {
3903					return err
3904				}
3905				r.Type = typeVar
3906			}
3907		}
3908	}
3909
3910	return nil
3911}
3912
3913// BasicResponseBase response base
3914type BasicResponseBase interface {
3915	AsThing() (*Thing, bool)
3916	AsBasicThing() (BasicThing, bool)
3917	AsPlaces() (*Places, bool)
3918	AsSearchResultsAnswer() (*SearchResultsAnswer, bool)
3919	AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool)
3920	AsSearchResponse() (*SearchResponse, bool)
3921	AsPostalAddress() (*PostalAddress, bool)
3922	AsPlace() (*Place, bool)
3923	AsAction() (*Action, bool)
3924	AsBasicAction() (BasicAction, bool)
3925	AsResponse() (*Response, bool)
3926	AsBasicResponse() (BasicResponse, bool)
3927	AsIdentifiable() (*Identifiable, bool)
3928	AsBasicIdentifiable() (BasicIdentifiable, bool)
3929	AsAnswer() (*Answer, bool)
3930	AsBasicAnswer() (BasicAnswer, bool)
3931	AsErrorResponse() (*ErrorResponse, bool)
3932	AsCreativeWork() (*CreativeWork, bool)
3933	AsBasicCreativeWork() (BasicCreativeWork, bool)
3934	AsIntangible() (*Intangible, bool)
3935	AsBasicIntangible() (BasicIntangible, bool)
3936	AsSearchAction() (*SearchAction, bool)
3937	AsStructuredValue() (*StructuredValue, bool)
3938	AsBasicStructuredValue() (BasicStructuredValue, bool)
3939	AsResponseBase() (*ResponseBase, bool)
3940}
3941
3942// ResponseBase response base
3943type ResponseBase struct {
3944	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
3945	Type TypeBasicResponseBase `json:"_type,omitempty"`
3946}
3947
3948func unmarshalBasicResponseBase(body []byte) (BasicResponseBase, error) {
3949	var m map[string]interface{}
3950	err := json.Unmarshal(body, &m)
3951	if err != nil {
3952		return nil, err
3953	}
3954
3955	switch m["_type"] {
3956	case string(TypeThing):
3957		var t Thing
3958		err := json.Unmarshal(body, &t)
3959		return t, err
3960	case string(TypePlaces):
3961		var p Places
3962		err := json.Unmarshal(body, &p)
3963		return p, err
3964	case string(TypeSearchResultsAnswer):
3965		var sra SearchResultsAnswer
3966		err := json.Unmarshal(body, &sra)
3967		return sra, err
3968	case string(TypeSearchResponse):
3969		var sr SearchResponse
3970		err := json.Unmarshal(body, &sr)
3971		return sr, err
3972	case string(TypePostalAddress):
3973		var pa PostalAddress
3974		err := json.Unmarshal(body, &pa)
3975		return pa, err
3976	case string(TypePlace):
3977		var p Place
3978		err := json.Unmarshal(body, &p)
3979		return p, err
3980	case string(TypeAction):
3981		var a Action
3982		err := json.Unmarshal(body, &a)
3983		return a, err
3984	case string(TypeResponse):
3985		var r Response
3986		err := json.Unmarshal(body, &r)
3987		return r, err
3988	case string(TypeIdentifiable):
3989		var i Identifiable
3990		err := json.Unmarshal(body, &i)
3991		return i, err
3992	case string(TypeAnswer):
3993		var a Answer
3994		err := json.Unmarshal(body, &a)
3995		return a, err
3996	case string(TypeErrorResponse):
3997		var er ErrorResponse
3998		err := json.Unmarshal(body, &er)
3999		return er, err
4000	case string(TypeCreativeWork):
4001		var cw CreativeWork
4002		err := json.Unmarshal(body, &cw)
4003		return cw, err
4004	case string(TypeIntangible):
4005		var i Intangible
4006		err := json.Unmarshal(body, &i)
4007		return i, err
4008	case string(TypeSearchAction):
4009		var sa SearchAction
4010		err := json.Unmarshal(body, &sa)
4011		return sa, err
4012	case string(TypeStructuredValue):
4013		var sv StructuredValue
4014		err := json.Unmarshal(body, &sv)
4015		return sv, err
4016	default:
4017		var rb ResponseBase
4018		err := json.Unmarshal(body, &rb)
4019		return rb, err
4020	}
4021}
4022func unmarshalBasicResponseBaseArray(body []byte) ([]BasicResponseBase, error) {
4023	var rawMessages []*json.RawMessage
4024	err := json.Unmarshal(body, &rawMessages)
4025	if err != nil {
4026		return nil, err
4027	}
4028
4029	rbArray := make([]BasicResponseBase, len(rawMessages))
4030
4031	for index, rawMessage := range rawMessages {
4032		rb, err := unmarshalBasicResponseBase(*rawMessage)
4033		if err != nil {
4034			return nil, err
4035		}
4036		rbArray[index] = rb
4037	}
4038	return rbArray, nil
4039}
4040
4041// MarshalJSON is the custom marshaler for ResponseBase.
4042func (rb ResponseBase) MarshalJSON() ([]byte, error) {
4043	rb.Type = TypeResponseBase
4044	objectMap := make(map[string]interface{})
4045	if rb.Type != "" {
4046		objectMap["_type"] = rb.Type
4047	}
4048	return json.Marshal(objectMap)
4049}
4050
4051// AsThing is the BasicResponseBase implementation for ResponseBase.
4052func (rb ResponseBase) AsThing() (*Thing, bool) {
4053	return nil, false
4054}
4055
4056// AsBasicThing is the BasicResponseBase implementation for ResponseBase.
4057func (rb ResponseBase) AsBasicThing() (BasicThing, bool) {
4058	return nil, false
4059}
4060
4061// AsPlaces is the BasicResponseBase implementation for ResponseBase.
4062func (rb ResponseBase) AsPlaces() (*Places, bool) {
4063	return nil, false
4064}
4065
4066// AsSearchResultsAnswer is the BasicResponseBase implementation for ResponseBase.
4067func (rb ResponseBase) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
4068	return nil, false
4069}
4070
4071// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for ResponseBase.
4072func (rb ResponseBase) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
4073	return nil, false
4074}
4075
4076// AsSearchResponse is the BasicResponseBase implementation for ResponseBase.
4077func (rb ResponseBase) AsSearchResponse() (*SearchResponse, bool) {
4078	return nil, false
4079}
4080
4081// AsPostalAddress is the BasicResponseBase implementation for ResponseBase.
4082func (rb ResponseBase) AsPostalAddress() (*PostalAddress, bool) {
4083	return nil, false
4084}
4085
4086// AsPlace is the BasicResponseBase implementation for ResponseBase.
4087func (rb ResponseBase) AsPlace() (*Place, bool) {
4088	return nil, false
4089}
4090
4091// AsAction is the BasicResponseBase implementation for ResponseBase.
4092func (rb ResponseBase) AsAction() (*Action, bool) {
4093	return nil, false
4094}
4095
4096// AsBasicAction is the BasicResponseBase implementation for ResponseBase.
4097func (rb ResponseBase) AsBasicAction() (BasicAction, bool) {
4098	return nil, false
4099}
4100
4101// AsResponse is the BasicResponseBase implementation for ResponseBase.
4102func (rb ResponseBase) AsResponse() (*Response, bool) {
4103	return nil, false
4104}
4105
4106// AsBasicResponse is the BasicResponseBase implementation for ResponseBase.
4107func (rb ResponseBase) AsBasicResponse() (BasicResponse, bool) {
4108	return nil, false
4109}
4110
4111// AsIdentifiable is the BasicResponseBase implementation for ResponseBase.
4112func (rb ResponseBase) AsIdentifiable() (*Identifiable, bool) {
4113	return nil, false
4114}
4115
4116// AsBasicIdentifiable is the BasicResponseBase implementation for ResponseBase.
4117func (rb ResponseBase) AsBasicIdentifiable() (BasicIdentifiable, bool) {
4118	return nil, false
4119}
4120
4121// AsAnswer is the BasicResponseBase implementation for ResponseBase.
4122func (rb ResponseBase) AsAnswer() (*Answer, bool) {
4123	return nil, false
4124}
4125
4126// AsBasicAnswer is the BasicResponseBase implementation for ResponseBase.
4127func (rb ResponseBase) AsBasicAnswer() (BasicAnswer, bool) {
4128	return nil, false
4129}
4130
4131// AsErrorResponse is the BasicResponseBase implementation for ResponseBase.
4132func (rb ResponseBase) AsErrorResponse() (*ErrorResponse, bool) {
4133	return nil, false
4134}
4135
4136// AsCreativeWork is the BasicResponseBase implementation for ResponseBase.
4137func (rb ResponseBase) AsCreativeWork() (*CreativeWork, bool) {
4138	return nil, false
4139}
4140
4141// AsBasicCreativeWork is the BasicResponseBase implementation for ResponseBase.
4142func (rb ResponseBase) AsBasicCreativeWork() (BasicCreativeWork, bool) {
4143	return nil, false
4144}
4145
4146// AsIntangible is the BasicResponseBase implementation for ResponseBase.
4147func (rb ResponseBase) AsIntangible() (*Intangible, bool) {
4148	return nil, false
4149}
4150
4151// AsBasicIntangible is the BasicResponseBase implementation for ResponseBase.
4152func (rb ResponseBase) AsBasicIntangible() (BasicIntangible, bool) {
4153	return nil, false
4154}
4155
4156// AsSearchAction is the BasicResponseBase implementation for ResponseBase.
4157func (rb ResponseBase) AsSearchAction() (*SearchAction, bool) {
4158	return nil, false
4159}
4160
4161// AsStructuredValue is the BasicResponseBase implementation for ResponseBase.
4162func (rb ResponseBase) AsStructuredValue() (*StructuredValue, bool) {
4163	return nil, false
4164}
4165
4166// AsBasicStructuredValue is the BasicResponseBase implementation for ResponseBase.
4167func (rb ResponseBase) AsBasicStructuredValue() (BasicStructuredValue, bool) {
4168	return nil, false
4169}
4170
4171// AsResponseBase is the BasicResponseBase implementation for ResponseBase.
4172func (rb ResponseBase) AsResponseBase() (*ResponseBase, bool) {
4173	return &rb, true
4174}
4175
4176// AsBasicResponseBase is the BasicResponseBase implementation for ResponseBase.
4177func (rb ResponseBase) AsBasicResponseBase() (BasicResponseBase, bool) {
4178	return &rb, true
4179}
4180
4181// SearchAction ...
4182type SearchAction struct {
4183	// DisplayText - READ-ONLY
4184	DisplayText *string `json:"displayText,omitempty"`
4185	// Query - READ-ONLY
4186	Query *string `json:"query,omitempty"`
4187	// RichContent - READ-ONLY
4188	RichContent *[]BasicAnswer `json:"richContent,omitempty"`
4189	// FormattingRuleID - READ-ONLY
4190	FormattingRuleID *string `json:"formattingRuleId,omitempty"`
4191	// Location - READ-ONLY
4192	Location *[]Place `json:"location,omitempty"`
4193	// Result - READ-ONLY; The result produced in the action.
4194	Result *[]BasicThing `json:"result,omitempty"`
4195	// DisplayName - READ-ONLY; A display name for the action.
4196	DisplayName *string `json:"displayName,omitempty"`
4197	// IsTopAction - READ-ONLY; A Boolean representing whether this result is the top action.
4198	IsTopAction *bool `json:"isTopAction,omitempty"`
4199	// ServiceURL - READ-ONLY; Use this URL to get additional data to determine how to take the appropriate action. For example, the serviceUrl might return JSON along with an image URL.
4200	ServiceURL *string `json:"serviceUrl,omitempty"`
4201	// ThumbnailURL - READ-ONLY; The URL to a thumbnail of the item.
4202	ThumbnailURL *string `json:"thumbnailUrl,omitempty"`
4203	// About - READ-ONLY; For internal use only.
4204	About *[]BasicThing `json:"about,omitempty"`
4205	// Mentions - READ-ONLY; For internal use only.
4206	Mentions *[]BasicThing `json:"mentions,omitempty"`
4207	// Provider - READ-ONLY; The source of the creative work.
4208	Provider *[]BasicThing `json:"provider,omitempty"`
4209	// Creator - READ-ONLY
4210	Creator BasicThing `json:"creator,omitempty"`
4211	// Text - READ-ONLY; Text content of this creative work
4212	Text *string `json:"text,omitempty"`
4213	// DiscussionURL - READ-ONLY
4214	DiscussionURL *string `json:"discussionUrl,omitempty"`
4215	// CommentCount - READ-ONLY
4216	CommentCount *int32 `json:"commentCount,omitempty"`
4217	// MainEntity - READ-ONLY
4218	MainEntity BasicThing `json:"mainEntity,omitempty"`
4219	// HeadLine - READ-ONLY
4220	HeadLine *string `json:"headLine,omitempty"`
4221	// CopyrightHolder - READ-ONLY
4222	CopyrightHolder BasicThing `json:"copyrightHolder,omitempty"`
4223	// CopyrightYear - READ-ONLY
4224	CopyrightYear *int32 `json:"copyrightYear,omitempty"`
4225	// Disclaimer - READ-ONLY
4226	Disclaimer *string `json:"disclaimer,omitempty"`
4227	// IsAccessibleForFree - READ-ONLY
4228	IsAccessibleForFree *bool `json:"isAccessibleForFree,omitempty"`
4229	// Genre - READ-ONLY
4230	Genre *[]string `json:"genre,omitempty"`
4231	// IsFamilyFriendly - READ-ONLY
4232	IsFamilyFriendly *bool `json:"isFamilyFriendly,omitempty"`
4233	// Name - READ-ONLY; The name of the thing represented by this object.
4234	Name *string `json:"name,omitempty"`
4235	// URL - READ-ONLY; The URL to get more information about the thing represented by this object.
4236	URL *string `json:"url,omitempty"`
4237	// EntityPresentationInfo - READ-ONLY; Additional information about the entity such as hints that you can use to determine the entity's type. To determine the entity's type, use the entityScenario and entityTypeHint fields.
4238	EntityPresentationInfo BasicEntitiesEntityPresentationInfo `json:"entityPresentationInfo,omitempty"`
4239	// ReadLink - READ-ONLY; The URL that returns this resource.
4240	ReadLink *string `json:"readLink,omitempty"`
4241	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
4242	WebSearchURL *string `json:"webSearchUrl,omitempty"`
4243	// PotentialAction - READ-ONLY
4244	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
4245	// ImmediateAction - READ-ONLY
4246	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
4247	// PreferredClickthroughURL - READ-ONLY
4248	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
4249	// AdaptiveCard - READ-ONLY
4250	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
4251	// ID - READ-ONLY; A String identifier.
4252	ID *string `json:"id,omitempty"`
4253	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
4254	Type TypeBasicResponseBase `json:"_type,omitempty"`
4255}
4256
4257// MarshalJSON is the custom marshaler for SearchAction.
4258func (sa SearchAction) MarshalJSON() ([]byte, error) {
4259	sa.Type = TypeSearchAction
4260	objectMap := make(map[string]interface{})
4261	if sa.Type != "" {
4262		objectMap["_type"] = sa.Type
4263	}
4264	return json.Marshal(objectMap)
4265}
4266
4267// AsThing is the BasicResponseBase implementation for SearchAction.
4268func (sa SearchAction) AsThing() (*Thing, bool) {
4269	return nil, false
4270}
4271
4272// AsBasicThing is the BasicResponseBase implementation for SearchAction.
4273func (sa SearchAction) AsBasicThing() (BasicThing, bool) {
4274	return &sa, true
4275}
4276
4277// AsPlaces is the BasicResponseBase implementation for SearchAction.
4278func (sa SearchAction) AsPlaces() (*Places, bool) {
4279	return nil, false
4280}
4281
4282// AsSearchResultsAnswer is the BasicResponseBase implementation for SearchAction.
4283func (sa SearchAction) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
4284	return nil, false
4285}
4286
4287// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for SearchAction.
4288func (sa SearchAction) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
4289	return nil, false
4290}
4291
4292// AsSearchResponse is the BasicResponseBase implementation for SearchAction.
4293func (sa SearchAction) AsSearchResponse() (*SearchResponse, bool) {
4294	return nil, false
4295}
4296
4297// AsPostalAddress is the BasicResponseBase implementation for SearchAction.
4298func (sa SearchAction) AsPostalAddress() (*PostalAddress, bool) {
4299	return nil, false
4300}
4301
4302// AsPlace is the BasicResponseBase implementation for SearchAction.
4303func (sa SearchAction) AsPlace() (*Place, bool) {
4304	return nil, false
4305}
4306
4307// AsAction is the BasicResponseBase implementation for SearchAction.
4308func (sa SearchAction) AsAction() (*Action, bool) {
4309	return nil, false
4310}
4311
4312// AsBasicAction is the BasicResponseBase implementation for SearchAction.
4313func (sa SearchAction) AsBasicAction() (BasicAction, bool) {
4314	return &sa, true
4315}
4316
4317// AsResponse is the BasicResponseBase implementation for SearchAction.
4318func (sa SearchAction) AsResponse() (*Response, bool) {
4319	return nil, false
4320}
4321
4322// AsBasicResponse is the BasicResponseBase implementation for SearchAction.
4323func (sa SearchAction) AsBasicResponse() (BasicResponse, bool) {
4324	return &sa, true
4325}
4326
4327// AsIdentifiable is the BasicResponseBase implementation for SearchAction.
4328func (sa SearchAction) AsIdentifiable() (*Identifiable, bool) {
4329	return nil, false
4330}
4331
4332// AsBasicIdentifiable is the BasicResponseBase implementation for SearchAction.
4333func (sa SearchAction) AsBasicIdentifiable() (BasicIdentifiable, bool) {
4334	return &sa, true
4335}
4336
4337// AsAnswer is the BasicResponseBase implementation for SearchAction.
4338func (sa SearchAction) AsAnswer() (*Answer, bool) {
4339	return nil, false
4340}
4341
4342// AsBasicAnswer is the BasicResponseBase implementation for SearchAction.
4343func (sa SearchAction) AsBasicAnswer() (BasicAnswer, bool) {
4344	return nil, false
4345}
4346
4347// AsErrorResponse is the BasicResponseBase implementation for SearchAction.
4348func (sa SearchAction) AsErrorResponse() (*ErrorResponse, bool) {
4349	return nil, false
4350}
4351
4352// AsCreativeWork is the BasicResponseBase implementation for SearchAction.
4353func (sa SearchAction) AsCreativeWork() (*CreativeWork, bool) {
4354	return nil, false
4355}
4356
4357// AsBasicCreativeWork is the BasicResponseBase implementation for SearchAction.
4358func (sa SearchAction) AsBasicCreativeWork() (BasicCreativeWork, bool) {
4359	return &sa, true
4360}
4361
4362// AsIntangible is the BasicResponseBase implementation for SearchAction.
4363func (sa SearchAction) AsIntangible() (*Intangible, bool) {
4364	return nil, false
4365}
4366
4367// AsBasicIntangible is the BasicResponseBase implementation for SearchAction.
4368func (sa SearchAction) AsBasicIntangible() (BasicIntangible, bool) {
4369	return nil, false
4370}
4371
4372// AsSearchAction is the BasicResponseBase implementation for SearchAction.
4373func (sa SearchAction) AsSearchAction() (*SearchAction, bool) {
4374	return &sa, true
4375}
4376
4377// AsStructuredValue is the BasicResponseBase implementation for SearchAction.
4378func (sa SearchAction) AsStructuredValue() (*StructuredValue, bool) {
4379	return nil, false
4380}
4381
4382// AsBasicStructuredValue is the BasicResponseBase implementation for SearchAction.
4383func (sa SearchAction) AsBasicStructuredValue() (BasicStructuredValue, bool) {
4384	return nil, false
4385}
4386
4387// AsResponseBase is the BasicResponseBase implementation for SearchAction.
4388func (sa SearchAction) AsResponseBase() (*ResponseBase, bool) {
4389	return nil, false
4390}
4391
4392// AsBasicResponseBase is the BasicResponseBase implementation for SearchAction.
4393func (sa SearchAction) AsBasicResponseBase() (BasicResponseBase, bool) {
4394	return &sa, true
4395}
4396
4397// UnmarshalJSON is the custom unmarshaler for SearchAction struct.
4398func (sa *SearchAction) UnmarshalJSON(body []byte) error {
4399	var m map[string]*json.RawMessage
4400	err := json.Unmarshal(body, &m)
4401	if err != nil {
4402		return err
4403	}
4404	for k, v := range m {
4405		switch k {
4406		case "displayText":
4407			if v != nil {
4408				var displayText string
4409				err = json.Unmarshal(*v, &displayText)
4410				if err != nil {
4411					return err
4412				}
4413				sa.DisplayText = &displayText
4414			}
4415		case "query":
4416			if v != nil {
4417				var query string
4418				err = json.Unmarshal(*v, &query)
4419				if err != nil {
4420					return err
4421				}
4422				sa.Query = &query
4423			}
4424		case "richContent":
4425			if v != nil {
4426				richContent, err := unmarshalBasicAnswerArray(*v)
4427				if err != nil {
4428					return err
4429				}
4430				sa.RichContent = &richContent
4431			}
4432		case "formattingRuleId":
4433			if v != nil {
4434				var formattingRuleID string
4435				err = json.Unmarshal(*v, &formattingRuleID)
4436				if err != nil {
4437					return err
4438				}
4439				sa.FormattingRuleID = &formattingRuleID
4440			}
4441		case "location":
4442			if v != nil {
4443				var location []Place
4444				err = json.Unmarshal(*v, &location)
4445				if err != nil {
4446					return err
4447				}
4448				sa.Location = &location
4449			}
4450		case "result":
4451			if v != nil {
4452				resultVar, err := unmarshalBasicThingArray(*v)
4453				if err != nil {
4454					return err
4455				}
4456				sa.Result = &resultVar
4457			}
4458		case "displayName":
4459			if v != nil {
4460				var displayName string
4461				err = json.Unmarshal(*v, &displayName)
4462				if err != nil {
4463					return err
4464				}
4465				sa.DisplayName = &displayName
4466			}
4467		case "isTopAction":
4468			if v != nil {
4469				var isTopAction bool
4470				err = json.Unmarshal(*v, &isTopAction)
4471				if err != nil {
4472					return err
4473				}
4474				sa.IsTopAction = &isTopAction
4475			}
4476		case "serviceUrl":
4477			if v != nil {
4478				var serviceURL string
4479				err = json.Unmarshal(*v, &serviceURL)
4480				if err != nil {
4481					return err
4482				}
4483				sa.ServiceURL = &serviceURL
4484			}
4485		case "thumbnailUrl":
4486			if v != nil {
4487				var thumbnailURL string
4488				err = json.Unmarshal(*v, &thumbnailURL)
4489				if err != nil {
4490					return err
4491				}
4492				sa.ThumbnailURL = &thumbnailURL
4493			}
4494		case "about":
4495			if v != nil {
4496				about, err := unmarshalBasicThingArray(*v)
4497				if err != nil {
4498					return err
4499				}
4500				sa.About = &about
4501			}
4502		case "mentions":
4503			if v != nil {
4504				mentions, err := unmarshalBasicThingArray(*v)
4505				if err != nil {
4506					return err
4507				}
4508				sa.Mentions = &mentions
4509			}
4510		case "provider":
4511			if v != nil {
4512				provider, err := unmarshalBasicThingArray(*v)
4513				if err != nil {
4514					return err
4515				}
4516				sa.Provider = &provider
4517			}
4518		case "creator":
4519			if v != nil {
4520				creator, err := unmarshalBasicThing(*v)
4521				if err != nil {
4522					return err
4523				}
4524				sa.Creator = creator
4525			}
4526		case "text":
4527			if v != nil {
4528				var textVar string
4529				err = json.Unmarshal(*v, &textVar)
4530				if err != nil {
4531					return err
4532				}
4533				sa.Text = &textVar
4534			}
4535		case "discussionUrl":
4536			if v != nil {
4537				var discussionURL string
4538				err = json.Unmarshal(*v, &discussionURL)
4539				if err != nil {
4540					return err
4541				}
4542				sa.DiscussionURL = &discussionURL
4543			}
4544		case "commentCount":
4545			if v != nil {
4546				var commentCount int32
4547				err = json.Unmarshal(*v, &commentCount)
4548				if err != nil {
4549					return err
4550				}
4551				sa.CommentCount = &commentCount
4552			}
4553		case "mainEntity":
4554			if v != nil {
4555				mainEntity, err := unmarshalBasicThing(*v)
4556				if err != nil {
4557					return err
4558				}
4559				sa.MainEntity = mainEntity
4560			}
4561		case "headLine":
4562			if v != nil {
4563				var headLine string
4564				err = json.Unmarshal(*v, &headLine)
4565				if err != nil {
4566					return err
4567				}
4568				sa.HeadLine = &headLine
4569			}
4570		case "copyrightHolder":
4571			if v != nil {
4572				copyrightHolder, err := unmarshalBasicThing(*v)
4573				if err != nil {
4574					return err
4575				}
4576				sa.CopyrightHolder = copyrightHolder
4577			}
4578		case "copyrightYear":
4579			if v != nil {
4580				var copyrightYear int32
4581				err = json.Unmarshal(*v, &copyrightYear)
4582				if err != nil {
4583					return err
4584				}
4585				sa.CopyrightYear = &copyrightYear
4586			}
4587		case "disclaimer":
4588			if v != nil {
4589				var disclaimer string
4590				err = json.Unmarshal(*v, &disclaimer)
4591				if err != nil {
4592					return err
4593				}
4594				sa.Disclaimer = &disclaimer
4595			}
4596		case "isAccessibleForFree":
4597			if v != nil {
4598				var isAccessibleForFree bool
4599				err = json.Unmarshal(*v, &isAccessibleForFree)
4600				if err != nil {
4601					return err
4602				}
4603				sa.IsAccessibleForFree = &isAccessibleForFree
4604			}
4605		case "genre":
4606			if v != nil {
4607				var genre []string
4608				err = json.Unmarshal(*v, &genre)
4609				if err != nil {
4610					return err
4611				}
4612				sa.Genre = &genre
4613			}
4614		case "isFamilyFriendly":
4615			if v != nil {
4616				var isFamilyFriendly bool
4617				err = json.Unmarshal(*v, &isFamilyFriendly)
4618				if err != nil {
4619					return err
4620				}
4621				sa.IsFamilyFriendly = &isFamilyFriendly
4622			}
4623		case "name":
4624			if v != nil {
4625				var name string
4626				err = json.Unmarshal(*v, &name)
4627				if err != nil {
4628					return err
4629				}
4630				sa.Name = &name
4631			}
4632		case "url":
4633			if v != nil {
4634				var URL string
4635				err = json.Unmarshal(*v, &URL)
4636				if err != nil {
4637					return err
4638				}
4639				sa.URL = &URL
4640			}
4641		case "entityPresentationInfo":
4642			if v != nil {
4643				entityPresentationInfo, err := unmarshalBasicEntitiesEntityPresentationInfo(*v)
4644				if err != nil {
4645					return err
4646				}
4647				sa.EntityPresentationInfo = entityPresentationInfo
4648			}
4649		case "readLink":
4650			if v != nil {
4651				var readLink string
4652				err = json.Unmarshal(*v, &readLink)
4653				if err != nil {
4654					return err
4655				}
4656				sa.ReadLink = &readLink
4657			}
4658		case "webSearchUrl":
4659			if v != nil {
4660				var webSearchURL string
4661				err = json.Unmarshal(*v, &webSearchURL)
4662				if err != nil {
4663					return err
4664				}
4665				sa.WebSearchURL = &webSearchURL
4666			}
4667		case "potentialAction":
4668			if v != nil {
4669				potentialAction, err := unmarshalBasicActionArray(*v)
4670				if err != nil {
4671					return err
4672				}
4673				sa.PotentialAction = &potentialAction
4674			}
4675		case "immediateAction":
4676			if v != nil {
4677				immediateAction, err := unmarshalBasicActionArray(*v)
4678				if err != nil {
4679					return err
4680				}
4681				sa.ImmediateAction = &immediateAction
4682			}
4683		case "preferredClickthroughUrl":
4684			if v != nil {
4685				var preferredClickthroughURL string
4686				err = json.Unmarshal(*v, &preferredClickthroughURL)
4687				if err != nil {
4688					return err
4689				}
4690				sa.PreferredClickthroughURL = &preferredClickthroughURL
4691			}
4692		case "adaptiveCard":
4693			if v != nil {
4694				var adaptiveCard string
4695				err = json.Unmarshal(*v, &adaptiveCard)
4696				if err != nil {
4697					return err
4698				}
4699				sa.AdaptiveCard = &adaptiveCard
4700			}
4701		case "id":
4702			if v != nil {
4703				var ID string
4704				err = json.Unmarshal(*v, &ID)
4705				if err != nil {
4706					return err
4707				}
4708				sa.ID = &ID
4709			}
4710		case "_type":
4711			if v != nil {
4712				var typeVar TypeBasicResponseBase
4713				err = json.Unmarshal(*v, &typeVar)
4714				if err != nil {
4715					return err
4716				}
4717				sa.Type = typeVar
4718			}
4719		}
4720	}
4721
4722	return nil
4723}
4724
4725// SearchResponse defines the top-level object that the response includes when the request succeeds.
4726type SearchResponse struct {
4727	autorest.Response `json:"-"`
4728	// QueryContext - READ-ONLY; An object that contains the query string that Bing used for the request. This object contains the query string as entered by the user. It may also contain an altered query string that Bing used for the query if the query string contained a spelling mistake.
4729	QueryContext BasicQueryContext `json:"queryContext,omitempty"`
4730	// Places - READ-ONLY; A list of local entities such as restaurants or hotels that are relevant to the query.
4731	Places *Places `json:"places,omitempty"`
4732	// Lottery - READ-ONLY
4733	Lottery BasicSearchResultsAnswer `json:"lottery,omitempty"`
4734	// SearchResultsConfidenceScore - READ-ONLY
4735	SearchResultsConfidenceScore *float64 `json:"searchResultsConfidenceScore,omitempty"`
4736	// ReadLink - READ-ONLY; The URL that returns this resource.
4737	ReadLink *string `json:"readLink,omitempty"`
4738	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
4739	WebSearchURL *string `json:"webSearchUrl,omitempty"`
4740	// PotentialAction - READ-ONLY
4741	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
4742	// ImmediateAction - READ-ONLY
4743	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
4744	// PreferredClickthroughURL - READ-ONLY
4745	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
4746	// AdaptiveCard - READ-ONLY
4747	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
4748	// ID - READ-ONLY; A String identifier.
4749	ID *string `json:"id,omitempty"`
4750	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
4751	Type TypeBasicResponseBase `json:"_type,omitempty"`
4752}
4753
4754// MarshalJSON is the custom marshaler for SearchResponse.
4755func (sr SearchResponse) MarshalJSON() ([]byte, error) {
4756	sr.Type = TypeSearchResponse
4757	objectMap := make(map[string]interface{})
4758	if sr.Type != "" {
4759		objectMap["_type"] = sr.Type
4760	}
4761	return json.Marshal(objectMap)
4762}
4763
4764// AsThing is the BasicResponseBase implementation for SearchResponse.
4765func (sr SearchResponse) AsThing() (*Thing, bool) {
4766	return nil, false
4767}
4768
4769// AsBasicThing is the BasicResponseBase implementation for SearchResponse.
4770func (sr SearchResponse) AsBasicThing() (BasicThing, bool) {
4771	return nil, false
4772}
4773
4774// AsPlaces is the BasicResponseBase implementation for SearchResponse.
4775func (sr SearchResponse) AsPlaces() (*Places, bool) {
4776	return nil, false
4777}
4778
4779// AsSearchResultsAnswer is the BasicResponseBase implementation for SearchResponse.
4780func (sr SearchResponse) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
4781	return nil, false
4782}
4783
4784// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for SearchResponse.
4785func (sr SearchResponse) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
4786	return nil, false
4787}
4788
4789// AsSearchResponse is the BasicResponseBase implementation for SearchResponse.
4790func (sr SearchResponse) AsSearchResponse() (*SearchResponse, bool) {
4791	return &sr, true
4792}
4793
4794// AsPostalAddress is the BasicResponseBase implementation for SearchResponse.
4795func (sr SearchResponse) AsPostalAddress() (*PostalAddress, bool) {
4796	return nil, false
4797}
4798
4799// AsPlace is the BasicResponseBase implementation for SearchResponse.
4800func (sr SearchResponse) AsPlace() (*Place, bool) {
4801	return nil, false
4802}
4803
4804// AsAction is the BasicResponseBase implementation for SearchResponse.
4805func (sr SearchResponse) AsAction() (*Action, bool) {
4806	return nil, false
4807}
4808
4809// AsBasicAction is the BasicResponseBase implementation for SearchResponse.
4810func (sr SearchResponse) AsBasicAction() (BasicAction, bool) {
4811	return nil, false
4812}
4813
4814// AsResponse is the BasicResponseBase implementation for SearchResponse.
4815func (sr SearchResponse) AsResponse() (*Response, bool) {
4816	return nil, false
4817}
4818
4819// AsBasicResponse is the BasicResponseBase implementation for SearchResponse.
4820func (sr SearchResponse) AsBasicResponse() (BasicResponse, bool) {
4821	return &sr, true
4822}
4823
4824// AsIdentifiable is the BasicResponseBase implementation for SearchResponse.
4825func (sr SearchResponse) AsIdentifiable() (*Identifiable, bool) {
4826	return nil, false
4827}
4828
4829// AsBasicIdentifiable is the BasicResponseBase implementation for SearchResponse.
4830func (sr SearchResponse) AsBasicIdentifiable() (BasicIdentifiable, bool) {
4831	return &sr, true
4832}
4833
4834// AsAnswer is the BasicResponseBase implementation for SearchResponse.
4835func (sr SearchResponse) AsAnswer() (*Answer, bool) {
4836	return nil, false
4837}
4838
4839// AsBasicAnswer is the BasicResponseBase implementation for SearchResponse.
4840func (sr SearchResponse) AsBasicAnswer() (BasicAnswer, bool) {
4841	return nil, false
4842}
4843
4844// AsErrorResponse is the BasicResponseBase implementation for SearchResponse.
4845func (sr SearchResponse) AsErrorResponse() (*ErrorResponse, bool) {
4846	return nil, false
4847}
4848
4849// AsCreativeWork is the BasicResponseBase implementation for SearchResponse.
4850func (sr SearchResponse) AsCreativeWork() (*CreativeWork, bool) {
4851	return nil, false
4852}
4853
4854// AsBasicCreativeWork is the BasicResponseBase implementation for SearchResponse.
4855func (sr SearchResponse) AsBasicCreativeWork() (BasicCreativeWork, bool) {
4856	return nil, false
4857}
4858
4859// AsIntangible is the BasicResponseBase implementation for SearchResponse.
4860func (sr SearchResponse) AsIntangible() (*Intangible, bool) {
4861	return nil, false
4862}
4863
4864// AsBasicIntangible is the BasicResponseBase implementation for SearchResponse.
4865func (sr SearchResponse) AsBasicIntangible() (BasicIntangible, bool) {
4866	return nil, false
4867}
4868
4869// AsSearchAction is the BasicResponseBase implementation for SearchResponse.
4870func (sr SearchResponse) AsSearchAction() (*SearchAction, bool) {
4871	return nil, false
4872}
4873
4874// AsStructuredValue is the BasicResponseBase implementation for SearchResponse.
4875func (sr SearchResponse) AsStructuredValue() (*StructuredValue, bool) {
4876	return nil, false
4877}
4878
4879// AsBasicStructuredValue is the BasicResponseBase implementation for SearchResponse.
4880func (sr SearchResponse) AsBasicStructuredValue() (BasicStructuredValue, bool) {
4881	return nil, false
4882}
4883
4884// AsResponseBase is the BasicResponseBase implementation for SearchResponse.
4885func (sr SearchResponse) AsResponseBase() (*ResponseBase, bool) {
4886	return nil, false
4887}
4888
4889// AsBasicResponseBase is the BasicResponseBase implementation for SearchResponse.
4890func (sr SearchResponse) AsBasicResponseBase() (BasicResponseBase, bool) {
4891	return &sr, true
4892}
4893
4894// UnmarshalJSON is the custom unmarshaler for SearchResponse struct.
4895func (sr *SearchResponse) UnmarshalJSON(body []byte) error {
4896	var m map[string]*json.RawMessage
4897	err := json.Unmarshal(body, &m)
4898	if err != nil {
4899		return err
4900	}
4901	for k, v := range m {
4902		switch k {
4903		case "queryContext":
4904			if v != nil {
4905				queryContext, err := unmarshalBasicQueryContext(*v)
4906				if err != nil {
4907					return err
4908				}
4909				sr.QueryContext = queryContext
4910			}
4911		case "places":
4912			if v != nil {
4913				var places Places
4914				err = json.Unmarshal(*v, &places)
4915				if err != nil {
4916					return err
4917				}
4918				sr.Places = &places
4919			}
4920		case "lottery":
4921			if v != nil {
4922				lottery, err := unmarshalBasicSearchResultsAnswer(*v)
4923				if err != nil {
4924					return err
4925				}
4926				sr.Lottery = lottery
4927			}
4928		case "searchResultsConfidenceScore":
4929			if v != nil {
4930				var searchResultsConfidenceScore float64
4931				err = json.Unmarshal(*v, &searchResultsConfidenceScore)
4932				if err != nil {
4933					return err
4934				}
4935				sr.SearchResultsConfidenceScore = &searchResultsConfidenceScore
4936			}
4937		case "readLink":
4938			if v != nil {
4939				var readLink string
4940				err = json.Unmarshal(*v, &readLink)
4941				if err != nil {
4942					return err
4943				}
4944				sr.ReadLink = &readLink
4945			}
4946		case "webSearchUrl":
4947			if v != nil {
4948				var webSearchURL string
4949				err = json.Unmarshal(*v, &webSearchURL)
4950				if err != nil {
4951					return err
4952				}
4953				sr.WebSearchURL = &webSearchURL
4954			}
4955		case "potentialAction":
4956			if v != nil {
4957				potentialAction, err := unmarshalBasicActionArray(*v)
4958				if err != nil {
4959					return err
4960				}
4961				sr.PotentialAction = &potentialAction
4962			}
4963		case "immediateAction":
4964			if v != nil {
4965				immediateAction, err := unmarshalBasicActionArray(*v)
4966				if err != nil {
4967					return err
4968				}
4969				sr.ImmediateAction = &immediateAction
4970			}
4971		case "preferredClickthroughUrl":
4972			if v != nil {
4973				var preferredClickthroughURL string
4974				err = json.Unmarshal(*v, &preferredClickthroughURL)
4975				if err != nil {
4976					return err
4977				}
4978				sr.PreferredClickthroughURL = &preferredClickthroughURL
4979			}
4980		case "adaptiveCard":
4981			if v != nil {
4982				var adaptiveCard string
4983				err = json.Unmarshal(*v, &adaptiveCard)
4984				if err != nil {
4985					return err
4986				}
4987				sr.AdaptiveCard = &adaptiveCard
4988			}
4989		case "id":
4990			if v != nil {
4991				var ID string
4992				err = json.Unmarshal(*v, &ID)
4993				if err != nil {
4994					return err
4995				}
4996				sr.ID = &ID
4997			}
4998		case "_type":
4999			if v != nil {
5000				var typeVar TypeBasicResponseBase
5001				err = json.Unmarshal(*v, &typeVar)
5002				if err != nil {
5003					return err
5004				}
5005				sr.Type = typeVar
5006			}
5007		}
5008	}
5009
5010	return nil
5011}
5012
5013// BasicSearchResultsAnswer defines a search result answer.
5014type BasicSearchResultsAnswer interface {
5015	AsPlaces() (*Places, bool)
5016	AsSearchResultsAnswer() (*SearchResultsAnswer, bool)
5017}
5018
5019// SearchResultsAnswer defines a search result answer.
5020type SearchResultsAnswer struct {
5021	// QueryContext - READ-ONLY
5022	QueryContext BasicQueryContext `json:"queryContext,omitempty"`
5023	// TotalEstimatedMatches - READ-ONLY; The estimated number of webpages that are relevant to the query. Use this number along with the count and offset query parameters to page the results.
5024	TotalEstimatedMatches *int64 `json:"totalEstimatedMatches,omitempty"`
5025	// IsFamilyFriendly - READ-ONLY
5026	IsFamilyFriendly *bool `json:"isFamilyFriendly,omitempty"`
5027	// ReadLink - READ-ONLY; The URL that returns this resource.
5028	ReadLink *string `json:"readLink,omitempty"`
5029	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
5030	WebSearchURL *string `json:"webSearchUrl,omitempty"`
5031	// PotentialAction - READ-ONLY
5032	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
5033	// ImmediateAction - READ-ONLY
5034	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
5035	// PreferredClickthroughURL - READ-ONLY
5036	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
5037	// AdaptiveCard - READ-ONLY
5038	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
5039	// ID - READ-ONLY; A String identifier.
5040	ID *string `json:"id,omitempty"`
5041	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
5042	Type TypeBasicResponseBase `json:"_type,omitempty"`
5043}
5044
5045func unmarshalBasicSearchResultsAnswer(body []byte) (BasicSearchResultsAnswer, error) {
5046	var m map[string]interface{}
5047	err := json.Unmarshal(body, &m)
5048	if err != nil {
5049		return nil, err
5050	}
5051
5052	switch m["_type"] {
5053	case string(TypePlaces):
5054		var p Places
5055		err := json.Unmarshal(body, &p)
5056		return p, err
5057	default:
5058		var sra SearchResultsAnswer
5059		err := json.Unmarshal(body, &sra)
5060		return sra, err
5061	}
5062}
5063func unmarshalBasicSearchResultsAnswerArray(body []byte) ([]BasicSearchResultsAnswer, error) {
5064	var rawMessages []*json.RawMessage
5065	err := json.Unmarshal(body, &rawMessages)
5066	if err != nil {
5067		return nil, err
5068	}
5069
5070	sraArray := make([]BasicSearchResultsAnswer, len(rawMessages))
5071
5072	for index, rawMessage := range rawMessages {
5073		sra, err := unmarshalBasicSearchResultsAnswer(*rawMessage)
5074		if err != nil {
5075			return nil, err
5076		}
5077		sraArray[index] = sra
5078	}
5079	return sraArray, nil
5080}
5081
5082// MarshalJSON is the custom marshaler for SearchResultsAnswer.
5083func (sra SearchResultsAnswer) MarshalJSON() ([]byte, error) {
5084	sra.Type = TypeSearchResultsAnswer
5085	objectMap := make(map[string]interface{})
5086	if sra.Type != "" {
5087		objectMap["_type"] = sra.Type
5088	}
5089	return json.Marshal(objectMap)
5090}
5091
5092// AsThing is the BasicResponseBase implementation for SearchResultsAnswer.
5093func (sra SearchResultsAnswer) AsThing() (*Thing, bool) {
5094	return nil, false
5095}
5096
5097// AsBasicThing is the BasicResponseBase implementation for SearchResultsAnswer.
5098func (sra SearchResultsAnswer) AsBasicThing() (BasicThing, bool) {
5099	return nil, false
5100}
5101
5102// AsPlaces is the BasicResponseBase implementation for SearchResultsAnswer.
5103func (sra SearchResultsAnswer) AsPlaces() (*Places, bool) {
5104	return nil, false
5105}
5106
5107// AsSearchResultsAnswer is the BasicResponseBase implementation for SearchResultsAnswer.
5108func (sra SearchResultsAnswer) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
5109	return &sra, true
5110}
5111
5112// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for SearchResultsAnswer.
5113func (sra SearchResultsAnswer) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
5114	return &sra, true
5115}
5116
5117// AsSearchResponse is the BasicResponseBase implementation for SearchResultsAnswer.
5118func (sra SearchResultsAnswer) AsSearchResponse() (*SearchResponse, bool) {
5119	return nil, false
5120}
5121
5122// AsPostalAddress is the BasicResponseBase implementation for SearchResultsAnswer.
5123func (sra SearchResultsAnswer) AsPostalAddress() (*PostalAddress, bool) {
5124	return nil, false
5125}
5126
5127// AsPlace is the BasicResponseBase implementation for SearchResultsAnswer.
5128func (sra SearchResultsAnswer) AsPlace() (*Place, bool) {
5129	return nil, false
5130}
5131
5132// AsAction is the BasicResponseBase implementation for SearchResultsAnswer.
5133func (sra SearchResultsAnswer) AsAction() (*Action, bool) {
5134	return nil, false
5135}
5136
5137// AsBasicAction is the BasicResponseBase implementation for SearchResultsAnswer.
5138func (sra SearchResultsAnswer) AsBasicAction() (BasicAction, bool) {
5139	return nil, false
5140}
5141
5142// AsResponse is the BasicResponseBase implementation for SearchResultsAnswer.
5143func (sra SearchResultsAnswer) AsResponse() (*Response, bool) {
5144	return nil, false
5145}
5146
5147// AsBasicResponse is the BasicResponseBase implementation for SearchResultsAnswer.
5148func (sra SearchResultsAnswer) AsBasicResponse() (BasicResponse, bool) {
5149	return &sra, true
5150}
5151
5152// AsIdentifiable is the BasicResponseBase implementation for SearchResultsAnswer.
5153func (sra SearchResultsAnswer) AsIdentifiable() (*Identifiable, bool) {
5154	return nil, false
5155}
5156
5157// AsBasicIdentifiable is the BasicResponseBase implementation for SearchResultsAnswer.
5158func (sra SearchResultsAnswer) AsBasicIdentifiable() (BasicIdentifiable, bool) {
5159	return &sra, true
5160}
5161
5162// AsAnswer is the BasicResponseBase implementation for SearchResultsAnswer.
5163func (sra SearchResultsAnswer) AsAnswer() (*Answer, bool) {
5164	return nil, false
5165}
5166
5167// AsBasicAnswer is the BasicResponseBase implementation for SearchResultsAnswer.
5168func (sra SearchResultsAnswer) AsBasicAnswer() (BasicAnswer, bool) {
5169	return &sra, true
5170}
5171
5172// AsErrorResponse is the BasicResponseBase implementation for SearchResultsAnswer.
5173func (sra SearchResultsAnswer) AsErrorResponse() (*ErrorResponse, bool) {
5174	return nil, false
5175}
5176
5177// AsCreativeWork is the BasicResponseBase implementation for SearchResultsAnswer.
5178func (sra SearchResultsAnswer) AsCreativeWork() (*CreativeWork, bool) {
5179	return nil, false
5180}
5181
5182// AsBasicCreativeWork is the BasicResponseBase implementation for SearchResultsAnswer.
5183func (sra SearchResultsAnswer) AsBasicCreativeWork() (BasicCreativeWork, bool) {
5184	return nil, false
5185}
5186
5187// AsIntangible is the BasicResponseBase implementation for SearchResultsAnswer.
5188func (sra SearchResultsAnswer) AsIntangible() (*Intangible, bool) {
5189	return nil, false
5190}
5191
5192// AsBasicIntangible is the BasicResponseBase implementation for SearchResultsAnswer.
5193func (sra SearchResultsAnswer) AsBasicIntangible() (BasicIntangible, bool) {
5194	return nil, false
5195}
5196
5197// AsSearchAction is the BasicResponseBase implementation for SearchResultsAnswer.
5198func (sra SearchResultsAnswer) AsSearchAction() (*SearchAction, bool) {
5199	return nil, false
5200}
5201
5202// AsStructuredValue is the BasicResponseBase implementation for SearchResultsAnswer.
5203func (sra SearchResultsAnswer) AsStructuredValue() (*StructuredValue, bool) {
5204	return nil, false
5205}
5206
5207// AsBasicStructuredValue is the BasicResponseBase implementation for SearchResultsAnswer.
5208func (sra SearchResultsAnswer) AsBasicStructuredValue() (BasicStructuredValue, bool) {
5209	return nil, false
5210}
5211
5212// AsResponseBase is the BasicResponseBase implementation for SearchResultsAnswer.
5213func (sra SearchResultsAnswer) AsResponseBase() (*ResponseBase, bool) {
5214	return nil, false
5215}
5216
5217// AsBasicResponseBase is the BasicResponseBase implementation for SearchResultsAnswer.
5218func (sra SearchResultsAnswer) AsBasicResponseBase() (BasicResponseBase, bool) {
5219	return &sra, true
5220}
5221
5222// UnmarshalJSON is the custom unmarshaler for SearchResultsAnswer struct.
5223func (sra *SearchResultsAnswer) UnmarshalJSON(body []byte) error {
5224	var m map[string]*json.RawMessage
5225	err := json.Unmarshal(body, &m)
5226	if err != nil {
5227		return err
5228	}
5229	for k, v := range m {
5230		switch k {
5231		case "queryContext":
5232			if v != nil {
5233				queryContext, err := unmarshalBasicQueryContext(*v)
5234				if err != nil {
5235					return err
5236				}
5237				sra.QueryContext = queryContext
5238			}
5239		case "totalEstimatedMatches":
5240			if v != nil {
5241				var totalEstimatedMatches int64
5242				err = json.Unmarshal(*v, &totalEstimatedMatches)
5243				if err != nil {
5244					return err
5245				}
5246				sra.TotalEstimatedMatches = &totalEstimatedMatches
5247			}
5248		case "isFamilyFriendly":
5249			if v != nil {
5250				var isFamilyFriendly bool
5251				err = json.Unmarshal(*v, &isFamilyFriendly)
5252				if err != nil {
5253					return err
5254				}
5255				sra.IsFamilyFriendly = &isFamilyFriendly
5256			}
5257		case "readLink":
5258			if v != nil {
5259				var readLink string
5260				err = json.Unmarshal(*v, &readLink)
5261				if err != nil {
5262					return err
5263				}
5264				sra.ReadLink = &readLink
5265			}
5266		case "webSearchUrl":
5267			if v != nil {
5268				var webSearchURL string
5269				err = json.Unmarshal(*v, &webSearchURL)
5270				if err != nil {
5271					return err
5272				}
5273				sra.WebSearchURL = &webSearchURL
5274			}
5275		case "potentialAction":
5276			if v != nil {
5277				potentialAction, err := unmarshalBasicActionArray(*v)
5278				if err != nil {
5279					return err
5280				}
5281				sra.PotentialAction = &potentialAction
5282			}
5283		case "immediateAction":
5284			if v != nil {
5285				immediateAction, err := unmarshalBasicActionArray(*v)
5286				if err != nil {
5287					return err
5288				}
5289				sra.ImmediateAction = &immediateAction
5290			}
5291		case "preferredClickthroughUrl":
5292			if v != nil {
5293				var preferredClickthroughURL string
5294				err = json.Unmarshal(*v, &preferredClickthroughURL)
5295				if err != nil {
5296					return err
5297				}
5298				sra.PreferredClickthroughURL = &preferredClickthroughURL
5299			}
5300		case "adaptiveCard":
5301			if v != nil {
5302				var adaptiveCard string
5303				err = json.Unmarshal(*v, &adaptiveCard)
5304				if err != nil {
5305					return err
5306				}
5307				sra.AdaptiveCard = &adaptiveCard
5308			}
5309		case "id":
5310			if v != nil {
5311				var ID string
5312				err = json.Unmarshal(*v, &ID)
5313				if err != nil {
5314					return err
5315				}
5316				sra.ID = &ID
5317			}
5318		case "_type":
5319			if v != nil {
5320				var typeVar TypeBasicResponseBase
5321				err = json.Unmarshal(*v, &typeVar)
5322				if err != nil {
5323					return err
5324				}
5325				sra.Type = typeVar
5326			}
5327		}
5328	}
5329
5330	return nil
5331}
5332
5333// BasicStructuredValue ...
5334type BasicStructuredValue interface {
5335	AsPostalAddress() (*PostalAddress, bool)
5336	AsStructuredValue() (*StructuredValue, bool)
5337}
5338
5339// StructuredValue ...
5340type StructuredValue struct {
5341	// Name - READ-ONLY; The name of the thing represented by this object.
5342	Name *string `json:"name,omitempty"`
5343	// URL - READ-ONLY; The URL to get more information about the thing represented by this object.
5344	URL *string `json:"url,omitempty"`
5345	// EntityPresentationInfo - READ-ONLY; Additional information about the entity such as hints that you can use to determine the entity's type. To determine the entity's type, use the entityScenario and entityTypeHint fields.
5346	EntityPresentationInfo BasicEntitiesEntityPresentationInfo `json:"entityPresentationInfo,omitempty"`
5347	// ReadLink - READ-ONLY; The URL that returns this resource.
5348	ReadLink *string `json:"readLink,omitempty"`
5349	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
5350	WebSearchURL *string `json:"webSearchUrl,omitempty"`
5351	// PotentialAction - READ-ONLY
5352	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
5353	// ImmediateAction - READ-ONLY
5354	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
5355	// PreferredClickthroughURL - READ-ONLY
5356	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
5357	// AdaptiveCard - READ-ONLY
5358	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
5359	// ID - READ-ONLY; A String identifier.
5360	ID *string `json:"id,omitempty"`
5361	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
5362	Type TypeBasicResponseBase `json:"_type,omitempty"`
5363}
5364
5365func unmarshalBasicStructuredValue(body []byte) (BasicStructuredValue, error) {
5366	var m map[string]interface{}
5367	err := json.Unmarshal(body, &m)
5368	if err != nil {
5369		return nil, err
5370	}
5371
5372	switch m["_type"] {
5373	case string(TypePostalAddress):
5374		var pa PostalAddress
5375		err := json.Unmarshal(body, &pa)
5376		return pa, err
5377	default:
5378		var sv StructuredValue
5379		err := json.Unmarshal(body, &sv)
5380		return sv, err
5381	}
5382}
5383func unmarshalBasicStructuredValueArray(body []byte) ([]BasicStructuredValue, error) {
5384	var rawMessages []*json.RawMessage
5385	err := json.Unmarshal(body, &rawMessages)
5386	if err != nil {
5387		return nil, err
5388	}
5389
5390	svArray := make([]BasicStructuredValue, len(rawMessages))
5391
5392	for index, rawMessage := range rawMessages {
5393		sv, err := unmarshalBasicStructuredValue(*rawMessage)
5394		if err != nil {
5395			return nil, err
5396		}
5397		svArray[index] = sv
5398	}
5399	return svArray, nil
5400}
5401
5402// MarshalJSON is the custom marshaler for StructuredValue.
5403func (sv StructuredValue) MarshalJSON() ([]byte, error) {
5404	sv.Type = TypeStructuredValue
5405	objectMap := make(map[string]interface{})
5406	if sv.Type != "" {
5407		objectMap["_type"] = sv.Type
5408	}
5409	return json.Marshal(objectMap)
5410}
5411
5412// AsThing is the BasicResponseBase implementation for StructuredValue.
5413func (sv StructuredValue) AsThing() (*Thing, bool) {
5414	return nil, false
5415}
5416
5417// AsBasicThing is the BasicResponseBase implementation for StructuredValue.
5418func (sv StructuredValue) AsBasicThing() (BasicThing, bool) {
5419	return &sv, true
5420}
5421
5422// AsPlaces is the BasicResponseBase implementation for StructuredValue.
5423func (sv StructuredValue) AsPlaces() (*Places, bool) {
5424	return nil, false
5425}
5426
5427// AsSearchResultsAnswer is the BasicResponseBase implementation for StructuredValue.
5428func (sv StructuredValue) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
5429	return nil, false
5430}
5431
5432// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for StructuredValue.
5433func (sv StructuredValue) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
5434	return nil, false
5435}
5436
5437// AsSearchResponse is the BasicResponseBase implementation for StructuredValue.
5438func (sv StructuredValue) AsSearchResponse() (*SearchResponse, bool) {
5439	return nil, false
5440}
5441
5442// AsPostalAddress is the BasicResponseBase implementation for StructuredValue.
5443func (sv StructuredValue) AsPostalAddress() (*PostalAddress, bool) {
5444	return nil, false
5445}
5446
5447// AsPlace is the BasicResponseBase implementation for StructuredValue.
5448func (sv StructuredValue) AsPlace() (*Place, bool) {
5449	return nil, false
5450}
5451
5452// AsAction is the BasicResponseBase implementation for StructuredValue.
5453func (sv StructuredValue) AsAction() (*Action, bool) {
5454	return nil, false
5455}
5456
5457// AsBasicAction is the BasicResponseBase implementation for StructuredValue.
5458func (sv StructuredValue) AsBasicAction() (BasicAction, bool) {
5459	return nil, false
5460}
5461
5462// AsResponse is the BasicResponseBase implementation for StructuredValue.
5463func (sv StructuredValue) AsResponse() (*Response, bool) {
5464	return nil, false
5465}
5466
5467// AsBasicResponse is the BasicResponseBase implementation for StructuredValue.
5468func (sv StructuredValue) AsBasicResponse() (BasicResponse, bool) {
5469	return &sv, true
5470}
5471
5472// AsIdentifiable is the BasicResponseBase implementation for StructuredValue.
5473func (sv StructuredValue) AsIdentifiable() (*Identifiable, bool) {
5474	return nil, false
5475}
5476
5477// AsBasicIdentifiable is the BasicResponseBase implementation for StructuredValue.
5478func (sv StructuredValue) AsBasicIdentifiable() (BasicIdentifiable, bool) {
5479	return &sv, true
5480}
5481
5482// AsAnswer is the BasicResponseBase implementation for StructuredValue.
5483func (sv StructuredValue) AsAnswer() (*Answer, bool) {
5484	return nil, false
5485}
5486
5487// AsBasicAnswer is the BasicResponseBase implementation for StructuredValue.
5488func (sv StructuredValue) AsBasicAnswer() (BasicAnswer, bool) {
5489	return nil, false
5490}
5491
5492// AsErrorResponse is the BasicResponseBase implementation for StructuredValue.
5493func (sv StructuredValue) AsErrorResponse() (*ErrorResponse, bool) {
5494	return nil, false
5495}
5496
5497// AsCreativeWork is the BasicResponseBase implementation for StructuredValue.
5498func (sv StructuredValue) AsCreativeWork() (*CreativeWork, bool) {
5499	return nil, false
5500}
5501
5502// AsBasicCreativeWork is the BasicResponseBase implementation for StructuredValue.
5503func (sv StructuredValue) AsBasicCreativeWork() (BasicCreativeWork, bool) {
5504	return nil, false
5505}
5506
5507// AsIntangible is the BasicResponseBase implementation for StructuredValue.
5508func (sv StructuredValue) AsIntangible() (*Intangible, bool) {
5509	return nil, false
5510}
5511
5512// AsBasicIntangible is the BasicResponseBase implementation for StructuredValue.
5513func (sv StructuredValue) AsBasicIntangible() (BasicIntangible, bool) {
5514	return &sv, true
5515}
5516
5517// AsSearchAction is the BasicResponseBase implementation for StructuredValue.
5518func (sv StructuredValue) AsSearchAction() (*SearchAction, bool) {
5519	return nil, false
5520}
5521
5522// AsStructuredValue is the BasicResponseBase implementation for StructuredValue.
5523func (sv StructuredValue) AsStructuredValue() (*StructuredValue, bool) {
5524	return &sv, true
5525}
5526
5527// AsBasicStructuredValue is the BasicResponseBase implementation for StructuredValue.
5528func (sv StructuredValue) AsBasicStructuredValue() (BasicStructuredValue, bool) {
5529	return &sv, true
5530}
5531
5532// AsResponseBase is the BasicResponseBase implementation for StructuredValue.
5533func (sv StructuredValue) AsResponseBase() (*ResponseBase, bool) {
5534	return nil, false
5535}
5536
5537// AsBasicResponseBase is the BasicResponseBase implementation for StructuredValue.
5538func (sv StructuredValue) AsBasicResponseBase() (BasicResponseBase, bool) {
5539	return &sv, true
5540}
5541
5542// UnmarshalJSON is the custom unmarshaler for StructuredValue struct.
5543func (sv *StructuredValue) UnmarshalJSON(body []byte) error {
5544	var m map[string]*json.RawMessage
5545	err := json.Unmarshal(body, &m)
5546	if err != nil {
5547		return err
5548	}
5549	for k, v := range m {
5550		switch k {
5551		case "name":
5552			if v != nil {
5553				var name string
5554				err = json.Unmarshal(*v, &name)
5555				if err != nil {
5556					return err
5557				}
5558				sv.Name = &name
5559			}
5560		case "url":
5561			if v != nil {
5562				var URL string
5563				err = json.Unmarshal(*v, &URL)
5564				if err != nil {
5565					return err
5566				}
5567				sv.URL = &URL
5568			}
5569		case "entityPresentationInfo":
5570			if v != nil {
5571				entityPresentationInfo, err := unmarshalBasicEntitiesEntityPresentationInfo(*v)
5572				if err != nil {
5573					return err
5574				}
5575				sv.EntityPresentationInfo = entityPresentationInfo
5576			}
5577		case "readLink":
5578			if v != nil {
5579				var readLink string
5580				err = json.Unmarshal(*v, &readLink)
5581				if err != nil {
5582					return err
5583				}
5584				sv.ReadLink = &readLink
5585			}
5586		case "webSearchUrl":
5587			if v != nil {
5588				var webSearchURL string
5589				err = json.Unmarshal(*v, &webSearchURL)
5590				if err != nil {
5591					return err
5592				}
5593				sv.WebSearchURL = &webSearchURL
5594			}
5595		case "potentialAction":
5596			if v != nil {
5597				potentialAction, err := unmarshalBasicActionArray(*v)
5598				if err != nil {
5599					return err
5600				}
5601				sv.PotentialAction = &potentialAction
5602			}
5603		case "immediateAction":
5604			if v != nil {
5605				immediateAction, err := unmarshalBasicActionArray(*v)
5606				if err != nil {
5607					return err
5608				}
5609				sv.ImmediateAction = &immediateAction
5610			}
5611		case "preferredClickthroughUrl":
5612			if v != nil {
5613				var preferredClickthroughURL string
5614				err = json.Unmarshal(*v, &preferredClickthroughURL)
5615				if err != nil {
5616					return err
5617				}
5618				sv.PreferredClickthroughURL = &preferredClickthroughURL
5619			}
5620		case "adaptiveCard":
5621			if v != nil {
5622				var adaptiveCard string
5623				err = json.Unmarshal(*v, &adaptiveCard)
5624				if err != nil {
5625					return err
5626				}
5627				sv.AdaptiveCard = &adaptiveCard
5628			}
5629		case "id":
5630			if v != nil {
5631				var ID string
5632				err = json.Unmarshal(*v, &ID)
5633				if err != nil {
5634					return err
5635				}
5636				sv.ID = &ID
5637			}
5638		case "_type":
5639			if v != nil {
5640				var typeVar TypeBasicResponseBase
5641				err = json.Unmarshal(*v, &typeVar)
5642				if err != nil {
5643					return err
5644				}
5645				sv.Type = typeVar
5646			}
5647		}
5648	}
5649
5650	return nil
5651}
5652
5653// BasicThing defines a thing.
5654type BasicThing interface {
5655	AsPostalAddress() (*PostalAddress, bool)
5656	AsPlace() (*Place, bool)
5657	AsAction() (*Action, bool)
5658	AsBasicAction() (BasicAction, bool)
5659	AsCreativeWork() (*CreativeWork, bool)
5660	AsBasicCreativeWork() (BasicCreativeWork, bool)
5661	AsIntangible() (*Intangible, bool)
5662	AsBasicIntangible() (BasicIntangible, bool)
5663	AsSearchAction() (*SearchAction, bool)
5664	AsStructuredValue() (*StructuredValue, bool)
5665	AsBasicStructuredValue() (BasicStructuredValue, bool)
5666	AsThing() (*Thing, bool)
5667}
5668
5669// Thing defines a thing.
5670type Thing struct {
5671	// Name - READ-ONLY; The name of the thing represented by this object.
5672	Name *string `json:"name,omitempty"`
5673	// URL - READ-ONLY; The URL to get more information about the thing represented by this object.
5674	URL *string `json:"url,omitempty"`
5675	// EntityPresentationInfo - READ-ONLY; Additional information about the entity such as hints that you can use to determine the entity's type. To determine the entity's type, use the entityScenario and entityTypeHint fields.
5676	EntityPresentationInfo BasicEntitiesEntityPresentationInfo `json:"entityPresentationInfo,omitempty"`
5677	// ReadLink - READ-ONLY; The URL that returns this resource.
5678	ReadLink *string `json:"readLink,omitempty"`
5679	// WebSearchURL - READ-ONLY; The URL to Bing's search result for this item.
5680	WebSearchURL *string `json:"webSearchUrl,omitempty"`
5681	// PotentialAction - READ-ONLY
5682	PotentialAction *[]BasicAction `json:"potentialAction,omitempty"`
5683	// ImmediateAction - READ-ONLY
5684	ImmediateAction *[]BasicAction `json:"immediateAction,omitempty"`
5685	// PreferredClickthroughURL - READ-ONLY
5686	PreferredClickthroughURL *string `json:"preferredClickthroughUrl,omitempty"`
5687	// AdaptiveCard - READ-ONLY
5688	AdaptiveCard *string `json:"adaptiveCard,omitempty"`
5689	// ID - READ-ONLY; A String identifier.
5690	ID *string `json:"id,omitempty"`
5691	// Type - Possible values include: 'TypeResponseBase', 'TypeThing', 'TypePlaces', 'TypeSearchResultsAnswer', 'TypeSearchResponse', 'TypePostalAddress', 'TypePlace', 'TypeAction', 'TypeResponse', 'TypeIdentifiable', 'TypeAnswer', 'TypeErrorResponse', 'TypeCreativeWork', 'TypeIntangible', 'TypeSearchAction', 'TypeStructuredValue'
5692	Type TypeBasicResponseBase `json:"_type,omitempty"`
5693}
5694
5695func unmarshalBasicThing(body []byte) (BasicThing, error) {
5696	var m map[string]interface{}
5697	err := json.Unmarshal(body, &m)
5698	if err != nil {
5699		return nil, err
5700	}
5701
5702	switch m["_type"] {
5703	case string(TypePostalAddress):
5704		var pa PostalAddress
5705		err := json.Unmarshal(body, &pa)
5706		return pa, err
5707	case string(TypePlace):
5708		var p Place
5709		err := json.Unmarshal(body, &p)
5710		return p, err
5711	case string(TypeAction):
5712		var a Action
5713		err := json.Unmarshal(body, &a)
5714		return a, err
5715	case string(TypeCreativeWork):
5716		var cw CreativeWork
5717		err := json.Unmarshal(body, &cw)
5718		return cw, err
5719	case string(TypeIntangible):
5720		var i Intangible
5721		err := json.Unmarshal(body, &i)
5722		return i, err
5723	case string(TypeSearchAction):
5724		var sa SearchAction
5725		err := json.Unmarshal(body, &sa)
5726		return sa, err
5727	case string(TypeStructuredValue):
5728		var sv StructuredValue
5729		err := json.Unmarshal(body, &sv)
5730		return sv, err
5731	default:
5732		var t Thing
5733		err := json.Unmarshal(body, &t)
5734		return t, err
5735	}
5736}
5737func unmarshalBasicThingArray(body []byte) ([]BasicThing, error) {
5738	var rawMessages []*json.RawMessage
5739	err := json.Unmarshal(body, &rawMessages)
5740	if err != nil {
5741		return nil, err
5742	}
5743
5744	tArray := make([]BasicThing, len(rawMessages))
5745
5746	for index, rawMessage := range rawMessages {
5747		t, err := unmarshalBasicThing(*rawMessage)
5748		if err != nil {
5749			return nil, err
5750		}
5751		tArray[index] = t
5752	}
5753	return tArray, nil
5754}
5755
5756// MarshalJSON is the custom marshaler for Thing.
5757func (t Thing) MarshalJSON() ([]byte, error) {
5758	t.Type = TypeThing
5759	objectMap := make(map[string]interface{})
5760	if t.Type != "" {
5761		objectMap["_type"] = t.Type
5762	}
5763	return json.Marshal(objectMap)
5764}
5765
5766// AsThing is the BasicResponseBase implementation for Thing.
5767func (t Thing) AsThing() (*Thing, bool) {
5768	return &t, true
5769}
5770
5771// AsBasicThing is the BasicResponseBase implementation for Thing.
5772func (t Thing) AsBasicThing() (BasicThing, bool) {
5773	return &t, true
5774}
5775
5776// AsPlaces is the BasicResponseBase implementation for Thing.
5777func (t Thing) AsPlaces() (*Places, bool) {
5778	return nil, false
5779}
5780
5781// AsSearchResultsAnswer is the BasicResponseBase implementation for Thing.
5782func (t Thing) AsSearchResultsAnswer() (*SearchResultsAnswer, bool) {
5783	return nil, false
5784}
5785
5786// AsBasicSearchResultsAnswer is the BasicResponseBase implementation for Thing.
5787func (t Thing) AsBasicSearchResultsAnswer() (BasicSearchResultsAnswer, bool) {
5788	return nil, false
5789}
5790
5791// AsSearchResponse is the BasicResponseBase implementation for Thing.
5792func (t Thing) AsSearchResponse() (*SearchResponse, bool) {
5793	return nil, false
5794}
5795
5796// AsPostalAddress is the BasicResponseBase implementation for Thing.
5797func (t Thing) AsPostalAddress() (*PostalAddress, bool) {
5798	return nil, false
5799}
5800
5801// AsPlace is the BasicResponseBase implementation for Thing.
5802func (t Thing) AsPlace() (*Place, bool) {
5803	return nil, false
5804}
5805
5806// AsAction is the BasicResponseBase implementation for Thing.
5807func (t Thing) AsAction() (*Action, bool) {
5808	return nil, false
5809}
5810
5811// AsBasicAction is the BasicResponseBase implementation for Thing.
5812func (t Thing) AsBasicAction() (BasicAction, bool) {
5813	return nil, false
5814}
5815
5816// AsResponse is the BasicResponseBase implementation for Thing.
5817func (t Thing) AsResponse() (*Response, bool) {
5818	return nil, false
5819}
5820
5821// AsBasicResponse is the BasicResponseBase implementation for Thing.
5822func (t Thing) AsBasicResponse() (BasicResponse, bool) {
5823	return &t, true
5824}
5825
5826// AsIdentifiable is the BasicResponseBase implementation for Thing.
5827func (t Thing) AsIdentifiable() (*Identifiable, bool) {
5828	return nil, false
5829}
5830
5831// AsBasicIdentifiable is the BasicResponseBase implementation for Thing.
5832func (t Thing) AsBasicIdentifiable() (BasicIdentifiable, bool) {
5833	return &t, true
5834}
5835
5836// AsAnswer is the BasicResponseBase implementation for Thing.
5837func (t Thing) AsAnswer() (*Answer, bool) {
5838	return nil, false
5839}
5840
5841// AsBasicAnswer is the BasicResponseBase implementation for Thing.
5842func (t Thing) AsBasicAnswer() (BasicAnswer, bool) {
5843	return nil, false
5844}
5845
5846// AsErrorResponse is the BasicResponseBase implementation for Thing.
5847func (t Thing) AsErrorResponse() (*ErrorResponse, bool) {
5848	return nil, false
5849}
5850
5851// AsCreativeWork is the BasicResponseBase implementation for Thing.
5852func (t Thing) AsCreativeWork() (*CreativeWork, bool) {
5853	return nil, false
5854}
5855
5856// AsBasicCreativeWork is the BasicResponseBase implementation for Thing.
5857func (t Thing) AsBasicCreativeWork() (BasicCreativeWork, bool) {
5858	return nil, false
5859}
5860
5861// AsIntangible is the BasicResponseBase implementation for Thing.
5862func (t Thing) AsIntangible() (*Intangible, bool) {
5863	return nil, false
5864}
5865
5866// AsBasicIntangible is the BasicResponseBase implementation for Thing.
5867func (t Thing) AsBasicIntangible() (BasicIntangible, bool) {
5868	return nil, false
5869}
5870
5871// AsSearchAction is the BasicResponseBase implementation for Thing.
5872func (t Thing) AsSearchAction() (*SearchAction, bool) {
5873	return nil, false
5874}
5875
5876// AsStructuredValue is the BasicResponseBase implementation for Thing.
5877func (t Thing) AsStructuredValue() (*StructuredValue, bool) {
5878	return nil, false
5879}
5880
5881// AsBasicStructuredValue is the BasicResponseBase implementation for Thing.
5882func (t Thing) AsBasicStructuredValue() (BasicStructuredValue, bool) {
5883	return nil, false
5884}
5885
5886// AsResponseBase is the BasicResponseBase implementation for Thing.
5887func (t Thing) AsResponseBase() (*ResponseBase, bool) {
5888	return nil, false
5889}
5890
5891// AsBasicResponseBase is the BasicResponseBase implementation for Thing.
5892func (t Thing) AsBasicResponseBase() (BasicResponseBase, bool) {
5893	return &t, true
5894}
5895
5896// UnmarshalJSON is the custom unmarshaler for Thing struct.
5897func (t *Thing) UnmarshalJSON(body []byte) error {
5898	var m map[string]*json.RawMessage
5899	err := json.Unmarshal(body, &m)
5900	if err != nil {
5901		return err
5902	}
5903	for k, v := range m {
5904		switch k {
5905		case "name":
5906			if v != nil {
5907				var name string
5908				err = json.Unmarshal(*v, &name)
5909				if err != nil {
5910					return err
5911				}
5912				t.Name = &name
5913			}
5914		case "url":
5915			if v != nil {
5916				var URL string
5917				err = json.Unmarshal(*v, &URL)
5918				if err != nil {
5919					return err
5920				}
5921				t.URL = &URL
5922			}
5923		case "entityPresentationInfo":
5924			if v != nil {
5925				entityPresentationInfo, err := unmarshalBasicEntitiesEntityPresentationInfo(*v)
5926				if err != nil {
5927					return err
5928				}
5929				t.EntityPresentationInfo = entityPresentationInfo
5930			}
5931		case "readLink":
5932			if v != nil {
5933				var readLink string
5934				err = json.Unmarshal(*v, &readLink)
5935				if err != nil {
5936					return err
5937				}
5938				t.ReadLink = &readLink
5939			}
5940		case "webSearchUrl":
5941			if v != nil {
5942				var webSearchURL string
5943				err = json.Unmarshal(*v, &webSearchURL)
5944				if err != nil {
5945					return err
5946				}
5947				t.WebSearchURL = &webSearchURL
5948			}
5949		case "potentialAction":
5950			if v != nil {
5951				potentialAction, err := unmarshalBasicActionArray(*v)
5952				if err != nil {
5953					return err
5954				}
5955				t.PotentialAction = &potentialAction
5956			}
5957		case "immediateAction":
5958			if v != nil {
5959				immediateAction, err := unmarshalBasicActionArray(*v)
5960				if err != nil {
5961					return err
5962				}
5963				t.ImmediateAction = &immediateAction
5964			}
5965		case "preferredClickthroughUrl":
5966			if v != nil {
5967				var preferredClickthroughURL string
5968				err = json.Unmarshal(*v, &preferredClickthroughURL)
5969				if err != nil {
5970					return err
5971				}
5972				t.PreferredClickthroughURL = &preferredClickthroughURL
5973			}
5974		case "adaptiveCard":
5975			if v != nil {
5976				var adaptiveCard string
5977				err = json.Unmarshal(*v, &adaptiveCard)
5978				if err != nil {
5979					return err
5980				}
5981				t.AdaptiveCard = &adaptiveCard
5982			}
5983		case "id":
5984			if v != nil {
5985				var ID string
5986				err = json.Unmarshal(*v, &ID)
5987				if err != nil {
5988					return err
5989				}
5990				t.ID = &ID
5991			}
5992		case "_type":
5993			if v != nil {
5994				var typeVar TypeBasicResponseBase
5995				err = json.Unmarshal(*v, &typeVar)
5996				if err != nil {
5997					return err
5998				}
5999				t.Type = typeVar
6000			}
6001		}
6002	}
6003
6004	return nil
6005}
6006