1// This file was automatically generated. DO NOT EDIT.
2// If you have any remark or suggestion do not hesitate to open an issue.
3
4// Package domain provides methods and message types of the domain v2beta1 API.
5package domain
6
7import (
8	"bytes"
9	"encoding/json"
10	"fmt"
11	"net"
12	"net/http"
13	"net/url"
14	"strings"
15	"time"
16
17	"github.com/scaleway/scaleway-sdk-go/internal/errors"
18	"github.com/scaleway/scaleway-sdk-go/internal/marshaler"
19	"github.com/scaleway/scaleway-sdk-go/internal/parameter"
20	"github.com/scaleway/scaleway-sdk-go/namegenerator"
21	"github.com/scaleway/scaleway-sdk-go/scw"
22)
23
24// always import dependencies
25var (
26	_ fmt.Stringer
27	_ json.Unmarshaler
28	_ url.URL
29	_ net.IP
30	_ http.Header
31	_ bytes.Reader
32	_ time.Time
33	_ = strings.Join
34
35	_ scw.ScalewayRequest
36	_ marshaler.Duration
37	_ scw.File
38	_ = parameter.AddToQuery
39	_ = namegenerator.GetRandomName
40)
41
42// API: DNS API
43//
44// Manage your DNS zones and records.
45type API struct {
46	client *scw.Client
47}
48
49// NewAPI returns a API object from a Scaleway client.
50func NewAPI(client *scw.Client) *API {
51	return &API{
52		client: client,
53	}
54}
55
56// RegistrarAPI: domains registrar API
57//
58// Manage your domains and contacts.
59type RegistrarAPI struct {
60	client *scw.Client
61}
62
63// NewRegistrarAPI returns a RegistrarAPI object from a Scaleway client.
64func NewRegistrarAPI(client *scw.Client) *RegistrarAPI {
65	return &RegistrarAPI{
66		client: client,
67	}
68}
69
70type ContactCivility string
71
72const (
73	// ContactCivilityCivilityUnknown is [insert doc].
74	ContactCivilityCivilityUnknown = ContactCivility("civility_unknown")
75	// ContactCivilityMr is [insert doc].
76	ContactCivilityMr = ContactCivility("mr")
77	// ContactCivilityMrs is [insert doc].
78	ContactCivilityMrs = ContactCivility("mrs")
79)
80
81func (enum ContactCivility) String() string {
82	if enum == "" {
83		// return default value if empty
84		return "civility_unknown"
85	}
86	return string(enum)
87}
88
89func (enum ContactCivility) MarshalJSON() ([]byte, error) {
90	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
91}
92
93func (enum *ContactCivility) UnmarshalJSON(data []byte) error {
94	tmp := ""
95
96	if err := json.Unmarshal(data, &tmp); err != nil {
97		return err
98	}
99
100	*enum = ContactCivility(ContactCivility(tmp).String())
101	return nil
102}
103
104type ContactEmailStatus string
105
106const (
107	// ContactEmailStatusEmailStatusUnknown is [insert doc].
108	ContactEmailStatusEmailStatusUnknown = ContactEmailStatus("email_status_unknown")
109	// ContactEmailStatusValidated is [insert doc].
110	ContactEmailStatusValidated = ContactEmailStatus("validated")
111	// ContactEmailStatusNotValidated is [insert doc].
112	ContactEmailStatusNotValidated = ContactEmailStatus("not_validated")
113	// ContactEmailStatusInvalidEmail is [insert doc].
114	ContactEmailStatusInvalidEmail = ContactEmailStatus("invalid_email")
115)
116
117func (enum ContactEmailStatus) String() string {
118	if enum == "" {
119		// return default value if empty
120		return "email_status_unknown"
121	}
122	return string(enum)
123}
124
125func (enum ContactEmailStatus) MarshalJSON() ([]byte, error) {
126	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
127}
128
129func (enum *ContactEmailStatus) UnmarshalJSON(data []byte) error {
130	tmp := ""
131
132	if err := json.Unmarshal(data, &tmp); err != nil {
133		return err
134	}
135
136	*enum = ContactEmailStatus(ContactEmailStatus(tmp).String())
137	return nil
138}
139
140type ContactExtensionFRMode string
141
142const (
143	// ContactExtensionFRModeModeUnknown is [insert doc].
144	ContactExtensionFRModeModeUnknown = ContactExtensionFRMode("mode_unknown")
145	// ContactExtensionFRModeParticular is [insert doc].
146	ContactExtensionFRModeParticular = ContactExtensionFRMode("particular")
147	// ContactExtensionFRModeCompanyIdentificationCode is [insert doc].
148	ContactExtensionFRModeCompanyIdentificationCode = ContactExtensionFRMode("company_identification_code")
149	// ContactExtensionFRModeDuns is [insert doc].
150	ContactExtensionFRModeDuns = ContactExtensionFRMode("duns")
151	// ContactExtensionFRModeLocal is [insert doc].
152	ContactExtensionFRModeLocal = ContactExtensionFRMode("local")
153	// ContactExtensionFRModeAssociation is [insert doc].
154	ContactExtensionFRModeAssociation = ContactExtensionFRMode("association")
155	// ContactExtensionFRModeBrand is [insert doc].
156	ContactExtensionFRModeBrand = ContactExtensionFRMode("brand")
157	// ContactExtensionFRModeCodeAuthAfnic is [insert doc].
158	ContactExtensionFRModeCodeAuthAfnic = ContactExtensionFRMode("code_auth_afnic")
159)
160
161func (enum ContactExtensionFRMode) String() string {
162	if enum == "" {
163		// return default value if empty
164		return "mode_unknown"
165	}
166	return string(enum)
167}
168
169func (enum ContactExtensionFRMode) MarshalJSON() ([]byte, error) {
170	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
171}
172
173func (enum *ContactExtensionFRMode) UnmarshalJSON(data []byte) error {
174	tmp := ""
175
176	if err := json.Unmarshal(data, &tmp); err != nil {
177		return err
178	}
179
180	*enum = ContactExtensionFRMode(ContactExtensionFRMode(tmp).String())
181	return nil
182}
183
184type ContactLegalForm string
185
186const (
187	// ContactLegalFormLegalFormUnknown is [insert doc].
188	ContactLegalFormLegalFormUnknown = ContactLegalForm("legal_form_unknown")
189	// ContactLegalFormParticular is [insert doc].
190	ContactLegalFormParticular = ContactLegalForm("particular")
191	// ContactLegalFormSociety is [insert doc].
192	ContactLegalFormSociety = ContactLegalForm("society")
193	// ContactLegalFormAssociation is [insert doc].
194	ContactLegalFormAssociation = ContactLegalForm("association")
195	// ContactLegalFormOther is [insert doc].
196	ContactLegalFormOther = ContactLegalForm("other")
197)
198
199func (enum ContactLegalForm) String() string {
200	if enum == "" {
201		// return default value if empty
202		return "legal_form_unknown"
203	}
204	return string(enum)
205}
206
207func (enum ContactLegalForm) MarshalJSON() ([]byte, error) {
208	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
209}
210
211func (enum *ContactLegalForm) UnmarshalJSON(data []byte) error {
212	tmp := ""
213
214	if err := json.Unmarshal(data, &tmp); err != nil {
215		return err
216	}
217
218	*enum = ContactLegalForm(ContactLegalForm(tmp).String())
219	return nil
220}
221
222type DNSZoneStatus string
223
224const (
225	// DNSZoneStatusUnknown is [insert doc].
226	DNSZoneStatusUnknown = DNSZoneStatus("unknown")
227	// DNSZoneStatusActive is [insert doc].
228	DNSZoneStatusActive = DNSZoneStatus("active")
229	// DNSZoneStatusPending is [insert doc].
230	DNSZoneStatusPending = DNSZoneStatus("pending")
231	// DNSZoneStatusError is [insert doc].
232	DNSZoneStatusError = DNSZoneStatus("error")
233	// DNSZoneStatusLocked is [insert doc].
234	DNSZoneStatusLocked = DNSZoneStatus("locked")
235)
236
237func (enum DNSZoneStatus) String() string {
238	if enum == "" {
239		// return default value if empty
240		return "unknown"
241	}
242	return string(enum)
243}
244
245func (enum DNSZoneStatus) MarshalJSON() ([]byte, error) {
246	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
247}
248
249func (enum *DNSZoneStatus) UnmarshalJSON(data []byte) error {
250	tmp := ""
251
252	if err := json.Unmarshal(data, &tmp); err != nil {
253		return err
254	}
255
256	*enum = DNSZoneStatus(DNSZoneStatus(tmp).String())
257	return nil
258}
259
260type DSRecordAlgorithm string
261
262const (
263	// DSRecordAlgorithmRsamd5 is [insert doc].
264	DSRecordAlgorithmRsamd5 = DSRecordAlgorithm("rsamd5")
265	// DSRecordAlgorithmDh is [insert doc].
266	DSRecordAlgorithmDh = DSRecordAlgorithm("dh")
267	// DSRecordAlgorithmDsa is [insert doc].
268	DSRecordAlgorithmDsa = DSRecordAlgorithm("dsa")
269	// DSRecordAlgorithmRsasha1 is [insert doc].
270	DSRecordAlgorithmRsasha1 = DSRecordAlgorithm("rsasha1")
271	// DSRecordAlgorithmDsaNsec3Sha1 is [insert doc].
272	DSRecordAlgorithmDsaNsec3Sha1 = DSRecordAlgorithm("dsa_nsec3_sha1")
273	// DSRecordAlgorithmRsasha1Nsec3Sha1 is [insert doc].
274	DSRecordAlgorithmRsasha1Nsec3Sha1 = DSRecordAlgorithm("rsasha1_nsec3_sha1")
275	// DSRecordAlgorithmRsasha256 is [insert doc].
276	DSRecordAlgorithmRsasha256 = DSRecordAlgorithm("rsasha256")
277	// DSRecordAlgorithmRsasha512 is [insert doc].
278	DSRecordAlgorithmRsasha512 = DSRecordAlgorithm("rsasha512")
279	// DSRecordAlgorithmEccGost is [insert doc].
280	DSRecordAlgorithmEccGost = DSRecordAlgorithm("ecc_gost")
281	// DSRecordAlgorithmEcdsap256sha256 is [insert doc].
282	DSRecordAlgorithmEcdsap256sha256 = DSRecordAlgorithm("ecdsap256sha256")
283	// DSRecordAlgorithmEcdsap384sha384 is [insert doc].
284	DSRecordAlgorithmEcdsap384sha384 = DSRecordAlgorithm("ecdsap384sha384")
285	// DSRecordAlgorithmEd25519 is [insert doc].
286	DSRecordAlgorithmEd25519 = DSRecordAlgorithm("ed25519")
287	// DSRecordAlgorithmEd448 is [insert doc].
288	DSRecordAlgorithmEd448 = DSRecordAlgorithm("ed448")
289)
290
291func (enum DSRecordAlgorithm) String() string {
292	if enum == "" {
293		// return default value if empty
294		return "rsamd5"
295	}
296	return string(enum)
297}
298
299func (enum DSRecordAlgorithm) MarshalJSON() ([]byte, error) {
300	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
301}
302
303func (enum *DSRecordAlgorithm) UnmarshalJSON(data []byte) error {
304	tmp := ""
305
306	if err := json.Unmarshal(data, &tmp); err != nil {
307		return err
308	}
309
310	*enum = DSRecordAlgorithm(DSRecordAlgorithm(tmp).String())
311	return nil
312}
313
314type DSRecordDigestType string
315
316const (
317	// DSRecordDigestTypeSha1 is [insert doc].
318	DSRecordDigestTypeSha1 = DSRecordDigestType("sha_1")
319	// DSRecordDigestTypeSha256 is [insert doc].
320	DSRecordDigestTypeSha256 = DSRecordDigestType("sha_256")
321	// DSRecordDigestTypeGostR34_11_94 is [insert doc].
322	DSRecordDigestTypeGostR34_11_94 = DSRecordDigestType("gost_r_34_11_94")
323	// DSRecordDigestTypeSha384 is [insert doc].
324	DSRecordDigestTypeSha384 = DSRecordDigestType("sha_384")
325)
326
327func (enum DSRecordDigestType) String() string {
328	if enum == "" {
329		// return default value if empty
330		return "sha_1"
331	}
332	return string(enum)
333}
334
335func (enum DSRecordDigestType) MarshalJSON() ([]byte, error) {
336	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
337}
338
339func (enum *DSRecordDigestType) UnmarshalJSON(data []byte) error {
340	tmp := ""
341
342	if err := json.Unmarshal(data, &tmp); err != nil {
343		return err
344	}
345
346	*enum = DSRecordDigestType(DSRecordDigestType(tmp).String())
347	return nil
348}
349
350type DomainFeatureStatus string
351
352const (
353	// DomainFeatureStatusFeatureStatusUnknown is [insert doc].
354	DomainFeatureStatusFeatureStatusUnknown = DomainFeatureStatus("feature_status_unknown")
355	// DomainFeatureStatusEnabling is [insert doc].
356	DomainFeatureStatusEnabling = DomainFeatureStatus("enabling")
357	// DomainFeatureStatusEnabled is [insert doc].
358	DomainFeatureStatusEnabled = DomainFeatureStatus("enabled")
359	// DomainFeatureStatusDisabling is [insert doc].
360	DomainFeatureStatusDisabling = DomainFeatureStatus("disabling")
361	// DomainFeatureStatusDisabled is [insert doc].
362	DomainFeatureStatusDisabled = DomainFeatureStatus("disabled")
363)
364
365func (enum DomainFeatureStatus) String() string {
366	if enum == "" {
367		// return default value if empty
368		return "feature_status_unknown"
369	}
370	return string(enum)
371}
372
373func (enum DomainFeatureStatus) MarshalJSON() ([]byte, error) {
374	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
375}
376
377func (enum *DomainFeatureStatus) UnmarshalJSON(data []byte) error {
378	tmp := ""
379
380	if err := json.Unmarshal(data, &tmp); err != nil {
381		return err
382	}
383
384	*enum = DomainFeatureStatus(DomainFeatureStatus(tmp).String())
385	return nil
386}
387
388type DomainRegistrationStatusTransferStatus string
389
390const (
391	// DomainRegistrationStatusTransferStatusStatusUnknown is [insert doc].
392	DomainRegistrationStatusTransferStatusStatusUnknown = DomainRegistrationStatusTransferStatus("status_unknown")
393	// DomainRegistrationStatusTransferStatusPending is [insert doc].
394	DomainRegistrationStatusTransferStatusPending = DomainRegistrationStatusTransferStatus("pending")
395	// DomainRegistrationStatusTransferStatusWaitingVote is [insert doc].
396	DomainRegistrationStatusTransferStatusWaitingVote = DomainRegistrationStatusTransferStatus("waiting_vote")
397	// DomainRegistrationStatusTransferStatusRejected is [insert doc].
398	DomainRegistrationStatusTransferStatusRejected = DomainRegistrationStatusTransferStatus("rejected")
399	// DomainRegistrationStatusTransferStatusProcessing is [insert doc].
400	DomainRegistrationStatusTransferStatusProcessing = DomainRegistrationStatusTransferStatus("processing")
401	// DomainRegistrationStatusTransferStatusDone is [insert doc].
402	DomainRegistrationStatusTransferStatusDone = DomainRegistrationStatusTransferStatus("done")
403)
404
405func (enum DomainRegistrationStatusTransferStatus) String() string {
406	if enum == "" {
407		// return default value if empty
408		return "status_unknown"
409	}
410	return string(enum)
411}
412
413func (enum DomainRegistrationStatusTransferStatus) MarshalJSON() ([]byte, error) {
414	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
415}
416
417func (enum *DomainRegistrationStatusTransferStatus) UnmarshalJSON(data []byte) error {
418	tmp := ""
419
420	if err := json.Unmarshal(data, &tmp); err != nil {
421		return err
422	}
423
424	*enum = DomainRegistrationStatusTransferStatus(DomainRegistrationStatusTransferStatus(tmp).String())
425	return nil
426}
427
428type DomainStatus string
429
430const (
431	// DomainStatusStatusUnknown is [insert doc].
432	DomainStatusStatusUnknown = DomainStatus("status_unknown")
433	// DomainStatusActive is [insert doc].
434	DomainStatusActive = DomainStatus("active")
435	// DomainStatusCreating is [insert doc].
436	DomainStatusCreating = DomainStatus("creating")
437	// DomainStatusCreateError is [insert doc].
438	DomainStatusCreateError = DomainStatus("create_error")
439	// DomainStatusRenewing is [insert doc].
440	DomainStatusRenewing = DomainStatus("renewing")
441	// DomainStatusRenewError is [insert doc].
442	DomainStatusRenewError = DomainStatus("renew_error")
443	// DomainStatusXfering is [insert doc].
444	DomainStatusXfering = DomainStatus("xfering")
445	// DomainStatusXferError is [insert doc].
446	DomainStatusXferError = DomainStatus("xfer_error")
447	// DomainStatusRestoring is [insert doc].
448	DomainStatusRestoring = DomainStatus("restoring")
449	// DomainStatusRestoreError is [insert doc].
450	DomainStatusRestoreError = DomainStatus("restore_error")
451	// DomainStatusExpired is [insert doc].
452	DomainStatusExpired = DomainStatus("expired")
453	// DomainStatusExpiring is [insert doc].
454	DomainStatusExpiring = DomainStatus("expiring")
455	// DomainStatusUpdating is [insert doc].
456	DomainStatusUpdating = DomainStatus("updating")
457	// DomainStatusChecking is [insert doc].
458	DomainStatusChecking = DomainStatus("checking")
459	// DomainStatusLocked is [insert doc].
460	DomainStatusLocked = DomainStatus("locked")
461	// DomainStatusDeleting is [insert doc].
462	DomainStatusDeleting = DomainStatus("deleting")
463)
464
465func (enum DomainStatus) String() string {
466	if enum == "" {
467		// return default value if empty
468		return "status_unknown"
469	}
470	return string(enum)
471}
472
473func (enum DomainStatus) MarshalJSON() ([]byte, error) {
474	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
475}
476
477func (enum *DomainStatus) UnmarshalJSON(data []byte) error {
478	tmp := ""
479
480	if err := json.Unmarshal(data, &tmp); err != nil {
481		return err
482	}
483
484	*enum = DomainStatus(DomainStatus(tmp).String())
485	return nil
486}
487
488type LanguageCode string
489
490const (
491	// LanguageCodeUnknownLanguageCode is [insert doc].
492	LanguageCodeUnknownLanguageCode = LanguageCode("unknown_language_code")
493	// LanguageCodeEnUS is [insert doc].
494	LanguageCodeEnUS = LanguageCode("en_US")
495	// LanguageCodeFrFR is [insert doc].
496	LanguageCodeFrFR = LanguageCode("fr_FR")
497)
498
499func (enum LanguageCode) String() string {
500	if enum == "" {
501		// return default value if empty
502		return "unknown_language_code"
503	}
504	return string(enum)
505}
506
507func (enum LanguageCode) MarshalJSON() ([]byte, error) {
508	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
509}
510
511func (enum *LanguageCode) UnmarshalJSON(data []byte) error {
512	tmp := ""
513
514	if err := json.Unmarshal(data, &tmp); err != nil {
515		return err
516	}
517
518	*enum = LanguageCode(LanguageCode(tmp).String())
519	return nil
520}
521
522type ListDNSZoneRecordsRequestOrderBy string
523
524const (
525	// ListDNSZoneRecordsRequestOrderByNameAsc is [insert doc].
526	ListDNSZoneRecordsRequestOrderByNameAsc = ListDNSZoneRecordsRequestOrderBy("name_asc")
527	// ListDNSZoneRecordsRequestOrderByNameDesc is [insert doc].
528	ListDNSZoneRecordsRequestOrderByNameDesc = ListDNSZoneRecordsRequestOrderBy("name_desc")
529)
530
531func (enum ListDNSZoneRecordsRequestOrderBy) String() string {
532	if enum == "" {
533		// return default value if empty
534		return "name_asc"
535	}
536	return string(enum)
537}
538
539func (enum ListDNSZoneRecordsRequestOrderBy) MarshalJSON() ([]byte, error) {
540	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
541}
542
543func (enum *ListDNSZoneRecordsRequestOrderBy) UnmarshalJSON(data []byte) error {
544	tmp := ""
545
546	if err := json.Unmarshal(data, &tmp); err != nil {
547		return err
548	}
549
550	*enum = ListDNSZoneRecordsRequestOrderBy(ListDNSZoneRecordsRequestOrderBy(tmp).String())
551	return nil
552}
553
554type ListDNSZonesRequestOrderBy string
555
556const (
557	// ListDNSZonesRequestOrderByDomainAsc is [insert doc].
558	ListDNSZonesRequestOrderByDomainAsc = ListDNSZonesRequestOrderBy("domain_asc")
559	// ListDNSZonesRequestOrderByDomainDesc is [insert doc].
560	ListDNSZonesRequestOrderByDomainDesc = ListDNSZonesRequestOrderBy("domain_desc")
561	// ListDNSZonesRequestOrderBySubdomainAsc is [insert doc].
562	ListDNSZonesRequestOrderBySubdomainAsc = ListDNSZonesRequestOrderBy("subdomain_asc")
563	// ListDNSZonesRequestOrderBySubdomainDesc is [insert doc].
564	ListDNSZonesRequestOrderBySubdomainDesc = ListDNSZonesRequestOrderBy("subdomain_desc")
565)
566
567func (enum ListDNSZonesRequestOrderBy) String() string {
568	if enum == "" {
569		// return default value if empty
570		return "domain_asc"
571	}
572	return string(enum)
573}
574
575func (enum ListDNSZonesRequestOrderBy) MarshalJSON() ([]byte, error) {
576	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
577}
578
579func (enum *ListDNSZonesRequestOrderBy) UnmarshalJSON(data []byte) error {
580	tmp := ""
581
582	if err := json.Unmarshal(data, &tmp); err != nil {
583		return err
584	}
585
586	*enum = ListDNSZonesRequestOrderBy(ListDNSZonesRequestOrderBy(tmp).String())
587	return nil
588}
589
590type ListDomainsRequestOrderBy string
591
592const (
593	// ListDomainsRequestOrderByDomainAsc is [insert doc].
594	ListDomainsRequestOrderByDomainAsc = ListDomainsRequestOrderBy("domain_asc")
595	// ListDomainsRequestOrderByDomainDesc is [insert doc].
596	ListDomainsRequestOrderByDomainDesc = ListDomainsRequestOrderBy("domain_desc")
597)
598
599func (enum ListDomainsRequestOrderBy) String() string {
600	if enum == "" {
601		// return default value if empty
602		return "domain_asc"
603	}
604	return string(enum)
605}
606
607func (enum ListDomainsRequestOrderBy) MarshalJSON() ([]byte, error) {
608	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
609}
610
611func (enum *ListDomainsRequestOrderBy) UnmarshalJSON(data []byte) error {
612	tmp := ""
613
614	if err := json.Unmarshal(data, &tmp); err != nil {
615		return err
616	}
617
618	*enum = ListDomainsRequestOrderBy(ListDomainsRequestOrderBy(tmp).String())
619	return nil
620}
621
622type RawFormat string
623
624const (
625	// RawFormatUnknownRawFormat is [insert doc].
626	RawFormatUnknownRawFormat = RawFormat("unknown_raw_format")
627	// RawFormatBind is [insert doc].
628	RawFormatBind = RawFormat("bind")
629)
630
631func (enum RawFormat) String() string {
632	if enum == "" {
633		// return default value if empty
634		return "unknown_raw_format"
635	}
636	return string(enum)
637}
638
639func (enum RawFormat) MarshalJSON() ([]byte, error) {
640	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
641}
642
643func (enum *RawFormat) UnmarshalJSON(data []byte) error {
644	tmp := ""
645
646	if err := json.Unmarshal(data, &tmp); err != nil {
647		return err
648	}
649
650	*enum = RawFormat(RawFormat(tmp).String())
651	return nil
652}
653
654type RecordHTTPServiceConfigStrategy string
655
656const (
657	// RecordHTTPServiceConfigStrategyRandom is [insert doc].
658	RecordHTTPServiceConfigStrategyRandom = RecordHTTPServiceConfigStrategy("random")
659	// RecordHTTPServiceConfigStrategyHashed is [insert doc].
660	RecordHTTPServiceConfigStrategyHashed = RecordHTTPServiceConfigStrategy("hashed")
661)
662
663func (enum RecordHTTPServiceConfigStrategy) String() string {
664	if enum == "" {
665		// return default value if empty
666		return "random"
667	}
668	return string(enum)
669}
670
671func (enum RecordHTTPServiceConfigStrategy) MarshalJSON() ([]byte, error) {
672	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
673}
674
675func (enum *RecordHTTPServiceConfigStrategy) UnmarshalJSON(data []byte) error {
676	tmp := ""
677
678	if err := json.Unmarshal(data, &tmp); err != nil {
679		return err
680	}
681
682	*enum = RecordHTTPServiceConfigStrategy(RecordHTTPServiceConfigStrategy(tmp).String())
683	return nil
684}
685
686type RecordType string
687
688const (
689	// RecordTypeUnknown is [insert doc].
690	RecordTypeUnknown = RecordType("unknown")
691	// RecordTypeA is [insert doc].
692	RecordTypeA = RecordType("A")
693	// RecordTypeAAAA is [insert doc].
694	RecordTypeAAAA = RecordType("AAAA")
695	// RecordTypeCNAME is [insert doc].
696	RecordTypeCNAME = RecordType("CNAME")
697	// RecordTypeTXT is [insert doc].
698	RecordTypeTXT = RecordType("TXT")
699	// RecordTypeSRV is [insert doc].
700	RecordTypeSRV = RecordType("SRV")
701	// RecordTypeTLSA is [insert doc].
702	RecordTypeTLSA = RecordType("TLSA")
703	// RecordTypeMX is [insert doc].
704	RecordTypeMX = RecordType("MX")
705	// RecordTypeNS is [insert doc].
706	RecordTypeNS = RecordType("NS")
707	// RecordTypePTR is [insert doc].
708	RecordTypePTR = RecordType("PTR")
709	// RecordTypeCAA is [insert doc].
710	RecordTypeCAA = RecordType("CAA")
711	// RecordTypeALIAS is [insert doc].
712	RecordTypeALIAS = RecordType("ALIAS")
713)
714
715func (enum RecordType) String() string {
716	if enum == "" {
717		// return default value if empty
718		return "unknown"
719	}
720	return string(enum)
721}
722
723func (enum RecordType) MarshalJSON() ([]byte, error) {
724	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
725}
726
727func (enum *RecordType) UnmarshalJSON(data []byte) error {
728	tmp := ""
729
730	if err := json.Unmarshal(data, &tmp); err != nil {
731		return err
732	}
733
734	*enum = RecordType(RecordType(tmp).String())
735	return nil
736}
737
738type SSLCertificateStatus string
739
740const (
741	// SSLCertificateStatusUnknown is [insert doc].
742	SSLCertificateStatusUnknown = SSLCertificateStatus("unknown")
743	// SSLCertificateStatusNew is [insert doc].
744	SSLCertificateStatusNew = SSLCertificateStatus("new")
745	// SSLCertificateStatusPending is [insert doc].
746	SSLCertificateStatusPending = SSLCertificateStatus("pending")
747	// SSLCertificateStatusSuccess is [insert doc].
748	SSLCertificateStatusSuccess = SSLCertificateStatus("success")
749	// SSLCertificateStatusError is [insert doc].
750	SSLCertificateStatusError = SSLCertificateStatus("error")
751)
752
753func (enum SSLCertificateStatus) String() string {
754	if enum == "" {
755		// return default value if empty
756		return "unknown"
757	}
758	return string(enum)
759}
760
761func (enum SSLCertificateStatus) MarshalJSON() ([]byte, error) {
762	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
763}
764
765func (enum *SSLCertificateStatus) UnmarshalJSON(data []byte) error {
766	tmp := ""
767
768	if err := json.Unmarshal(data, &tmp); err != nil {
769		return err
770	}
771
772	*enum = SSLCertificateStatus(SSLCertificateStatus(tmp).String())
773	return nil
774}
775
776type TaskStatus string
777
778const (
779	// TaskStatusUnavailable is [insert doc].
780	TaskStatusUnavailable = TaskStatus("unavailable")
781	// TaskStatusNew is [insert doc].
782	TaskStatusNew = TaskStatus("new")
783	// TaskStatusWaitingPayment is [insert doc].
784	TaskStatusWaitingPayment = TaskStatus("waiting_payment")
785	// TaskStatusPending is [insert doc].
786	TaskStatusPending = TaskStatus("pending")
787	// TaskStatusSuccess is [insert doc].
788	TaskStatusSuccess = TaskStatus("success")
789	// TaskStatusError is [insert doc].
790	TaskStatusError = TaskStatus("error")
791)
792
793func (enum TaskStatus) String() string {
794	if enum == "" {
795		// return default value if empty
796		return "unavailable"
797	}
798	return string(enum)
799}
800
801func (enum TaskStatus) MarshalJSON() ([]byte, error) {
802	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
803}
804
805func (enum *TaskStatus) UnmarshalJSON(data []byte) error {
806	tmp := ""
807
808	if err := json.Unmarshal(data, &tmp); err != nil {
809		return err
810	}
811
812	*enum = TaskStatus(TaskStatus(tmp).String())
813	return nil
814}
815
816type TaskType string
817
818const (
819	// TaskTypeUnknown is [insert doc].
820	TaskTypeUnknown = TaskType("unknown")
821	// TaskTypeCreateDomain is [insert doc].
822	TaskTypeCreateDomain = TaskType("create_domain")
823	// TaskTypeCreateExternalDomain is [insert doc].
824	TaskTypeCreateExternalDomain = TaskType("create_external_domain")
825	// TaskTypeRenewDomain is [insert doc].
826	TaskTypeRenewDomain = TaskType("renew_domain")
827	// TaskTypeRestoreDomain is [insert doc].
828	TaskTypeRestoreDomain = TaskType("restore_domain")
829	// TaskTypeTransferDomain is [insert doc].
830	TaskTypeTransferDomain = TaskType("transfer_domain")
831	// TaskTypeTradeDomain is [insert doc].
832	TaskTypeTradeDomain = TaskType("trade_domain")
833	// TaskTypeLockDomainTransfer is [insert doc].
834	TaskTypeLockDomainTransfer = TaskType("lock_domain_transfer")
835	// TaskTypeUnlockDomainTransfer is [insert doc].
836	TaskTypeUnlockDomainTransfer = TaskType("unlock_domain_transfer")
837	// TaskTypeEnableDnssec is [insert doc].
838	TaskTypeEnableDnssec = TaskType("enable_dnssec")
839	// TaskTypeDisableDnssec is [insert doc].
840	TaskTypeDisableDnssec = TaskType("disable_dnssec")
841	// TaskTypeUpdateDomain is [insert doc].
842	TaskTypeUpdateDomain = TaskType("update_domain")
843	// TaskTypeUpdateContact is [insert doc].
844	TaskTypeUpdateContact = TaskType("update_contact")
845	// TaskTypeDeleteDomain is [insert doc].
846	TaskTypeDeleteDomain = TaskType("delete_domain")
847	// TaskTypeCancelTask is [insert doc].
848	TaskTypeCancelTask = TaskType("cancel_task")
849	// TaskTypeGenerateSslCertificate is [insert doc].
850	TaskTypeGenerateSslCertificate = TaskType("generate_ssl_certificate")
851	// TaskTypeRenewSslCertificate is [insert doc].
852	TaskTypeRenewSslCertificate = TaskType("renew_ssl_certificate")
853	// TaskTypeSendMessage is [insert doc].
854	TaskTypeSendMessage = TaskType("send_message")
855	// TaskTypeDeleteDomainExpired is [insert doc].
856	TaskTypeDeleteDomainExpired = TaskType("delete_domain_expired")
857	// TaskTypeDeleteExternalDomain is [insert doc].
858	TaskTypeDeleteExternalDomain = TaskType("delete_external_domain")
859)
860
861func (enum TaskType) String() string {
862	if enum == "" {
863		// return default value if empty
864		return "unknown"
865	}
866	return string(enum)
867}
868
869func (enum TaskType) MarshalJSON() ([]byte, error) {
870	return []byte(fmt.Sprintf(`"%s"`, enum)), nil
871}
872
873func (enum *TaskType) UnmarshalJSON(data []byte) error {
874	tmp := ""
875
876	if err := json.Unmarshal(data, &tmp); err != nil {
877		return err
878	}
879
880	*enum = TaskType(TaskType(tmp).String())
881	return nil
882}
883
884// ClearDNSZoneRecordsResponse: clear dns zone records response
885type ClearDNSZoneRecordsResponse struct {
886}
887
888// Contact: contact
889type Contact struct {
890	ID string `json:"id"`
891	// LegalForm:
892	//
893	// Default value: legal_form_unknown
894	LegalForm ContactLegalForm `json:"legal_form"`
895	// Civility:
896	//
897	// Default value: civility_unknown
898	Civility ContactCivility `json:"civility"`
899
900	Firstname string `json:"firstname"`
901
902	Lastname string `json:"lastname"`
903
904	CompanyName string `json:"company_name"`
905
906	Email string `json:"email"`
907
908	EmailAlt string `json:"email_alt"`
909
910	PhoneNumber string `json:"phone_number"`
911
912	FaxNumber string `json:"fax_number"`
913
914	AddressLine1 string `json:"address_line_1"`
915
916	AddressLine2 string `json:"address_line_2"`
917
918	Zip string `json:"zip"`
919
920	City string `json:"city"`
921
922	Country string `json:"country"`
923
924	VatIdentificationCode string `json:"vat_identification_code"`
925
926	CompanyIdentificationCode string `json:"company_identification_code"`
927	// Lang:
928	//
929	// Default value: unknown_language_code
930	Lang LanguageCode `json:"lang"`
931
932	Resale bool `json:"resale"`
933
934	Questions []*ContactQuestion `json:"questions"`
935
936	ExtensionFr *ContactExtensionFR `json:"extension_fr"`
937
938	ExtensionEu *ContactExtensionEU `json:"extension_eu"`
939
940	WhoisOptIn bool `json:"whois_opt_in"`
941	// EmailStatus:
942	//
943	// Default value: email_status_unknown
944	EmailStatus ContactEmailStatus `json:"email_status"`
945}
946
947type ContactExtensionEU struct {
948	EuropeanCitizenship string `json:"european_citizenship"`
949}
950
951type ContactExtensionFR struct {
952	// Mode:
953	//
954	// Default value: mode_unknown
955	Mode ContactExtensionFRMode `json:"mode"`
956
957	// Precisely one of AssociationInfos, BrandInfos, CodeAuthAfnicInfos, DunsInfos, ParticularInfos must be set.
958	ParticularInfos *ContactExtensionFRParticularInfos `json:"particular_infos,omitempty"`
959
960	// Precisely one of AssociationInfos, BrandInfos, CodeAuthAfnicInfos, DunsInfos, ParticularInfos must be set.
961	DunsInfos *ContactExtensionFRDunsInfos `json:"duns_infos,omitempty"`
962
963	// Precisely one of AssociationInfos, BrandInfos, CodeAuthAfnicInfos, DunsInfos, ParticularInfos must be set.
964	AssociationInfos *ContactExtensionFRAssociationInfos `json:"association_infos,omitempty"`
965
966	// Precisely one of AssociationInfos, BrandInfos, CodeAuthAfnicInfos, DunsInfos, ParticularInfos must be set.
967	BrandInfos *ContactExtensionFRBrandInfos `json:"brand_infos,omitempty"`
968
969	// Precisely one of AssociationInfos, BrandInfos, CodeAuthAfnicInfos, DunsInfos, ParticularInfos must be set.
970	CodeAuthAfnicInfos *ContactExtensionFRCodeAuthAfnicInfos `json:"code_auth_afnic_infos,omitempty"`
971}
972
973type ContactExtensionFRAssociationInfos struct {
974	PublicationJo *time.Time `json:"publication_jo"`
975
976	PublicationJoPage uint32 `json:"publication_jo_page"`
977}
978
979type ContactExtensionFRBrandInfos struct {
980	BrandInpi string `json:"brand_inpi"`
981}
982
983type ContactExtensionFRCodeAuthAfnicInfos struct {
984	CodeAuthAfnic string `json:"code_auth_afnic"`
985}
986
987type ContactExtensionFRDunsInfos struct {
988	DunsID string `json:"duns_id"`
989
990	LocalID string `json:"local_id"`
991}
992
993type ContactExtensionFRParticularInfos struct {
994	WhoisOptIn bool `json:"whois_opt_in"`
995}
996
997type ContactQuestion struct {
998	Question string `json:"question"`
999
1000	Answer string `json:"answer"`
1001}
1002
1003type ContactRoles struct {
1004	Contact *Contact `json:"contact"`
1005
1006	Roles map[string]*ContactRolesRoles `json:"roles"`
1007}
1008
1009type ContactRolesRoles struct {
1010	IsOwner bool `json:"is_owner"`
1011
1012	IsAdministrative bool `json:"is_administrative"`
1013
1014	IsTechnical bool `json:"is_technical"`
1015}
1016
1017type DNSZone struct {
1018	Domain string `json:"domain"`
1019
1020	Subdomain string `json:"subdomain"`
1021
1022	Ns []string `json:"ns"`
1023
1024	NsDefault []string `json:"ns_default"`
1025
1026	NsMaster []string `json:"ns_master"`
1027	// Status:
1028	//
1029	// Default value: unknown
1030	Status DNSZoneStatus `json:"status"`
1031
1032	Message *string `json:"message"`
1033
1034	UpdatedAt *time.Time `json:"updated_at"`
1035
1036	ProjectID string `json:"project_id"`
1037}
1038
1039type DNSZoneVersion struct {
1040	ID string `json:"id"`
1041
1042	CreatedAt *time.Time `json:"created_at"`
1043}
1044
1045type DSRecord struct {
1046	KeyID uint32 `json:"key_id"`
1047	// Algorithm:
1048	//
1049	// Default value: rsamd5
1050	Algorithm DSRecordAlgorithm `json:"algorithm"`
1051
1052	// Precisely one of Digest, PublicKey must be set.
1053	Digest *DSRecordDigest `json:"digest,omitempty"`
1054
1055	// Precisely one of Digest, PublicKey must be set.
1056	PublicKey *DSRecordPublicKey `json:"public_key,omitempty"`
1057}
1058
1059type DSRecordDigest struct {
1060	// Type:
1061	//
1062	// Default value: sha_1
1063	Type DSRecordDigestType `json:"type"`
1064
1065	Digest string `json:"digest"`
1066}
1067
1068type DSRecordPublicKey struct {
1069	Key string `json:"key"`
1070}
1071
1072// DeleteDNSZoneResponse: delete dns zone response
1073type DeleteDNSZoneResponse struct {
1074}
1075
1076// DeleteExternalDomainResponse: delete external domain response
1077type DeleteExternalDomainResponse struct {
1078}
1079
1080// DeleteSSLCertificateResponse: delete ssl certificate response
1081type DeleteSSLCertificateResponse struct {
1082}
1083
1084// Domain: domain
1085type Domain struct {
1086	Domain string `json:"domain"`
1087
1088	OrganizationID string `json:"organization_id"`
1089
1090	ProjectID string `json:"project_id"`
1091	// AutoRenewStatus:
1092	//
1093	// Default value: feature_status_unknown
1094	AutoRenewStatus DomainFeatureStatus `json:"auto_renew_status"`
1095
1096	Dnssec *DomainDNSSEC `json:"dnssec"`
1097
1098	EppCode []string `json:"epp_code"`
1099
1100	ExpiredAt *time.Time `json:"expired_at"`
1101
1102	UpdatedAt *time.Time `json:"updated_at"`
1103
1104	Registrar string `json:"registrar"`
1105
1106	IsExternal bool `json:"is_external"`
1107	// Status:
1108	//
1109	// Default value: status_unknown
1110	Status DomainStatus `json:"status"`
1111
1112	DNSZones []*DNSZone `json:"dns_zones"`
1113
1114	OwnerContact *Contact `json:"owner_contact"`
1115
1116	TechnicalContact *Contact `json:"technical_contact"`
1117
1118	AdministrativeContact *Contact `json:"administrative_contact"`
1119
1120	// Precisely one of ExternalDomainRegistrationStatus, TransferRegistrationStatus must be set.
1121	ExternalDomainRegistrationStatus *DomainRegistrationStatusExternalDomain `json:"external_domain_registration_status,omitempty"`
1122
1123	// Precisely one of ExternalDomainRegistrationStatus, TransferRegistrationStatus must be set.
1124	TransferRegistrationStatus *DomainRegistrationStatusTransfer `json:"transfer_registration_status,omitempty"`
1125}
1126
1127type DomainDNSSEC struct {
1128	// Status:
1129	//
1130	// Default value: feature_status_unknown
1131	Status DomainFeatureStatus `json:"status"`
1132
1133	DsRecords []*DSRecord `json:"ds_records"`
1134}
1135
1136type DomainRegistrationStatusExternalDomain struct {
1137	ValidationToken string `json:"validation_token"`
1138}
1139
1140type DomainRegistrationStatusTransfer struct {
1141	// Status:
1142	//
1143	// Default value: status_unknown
1144	Status DomainRegistrationStatusTransferStatus `json:"status"`
1145
1146	VoteCurrentOwner bool `json:"vote_current_owner"`
1147
1148	VoteNewOwner bool `json:"vote_new_owner"`
1149}
1150
1151type DomainSummary struct {
1152	Domain string `json:"domain"`
1153
1154	ProjectID string `json:"project_id"`
1155	// AutoRenewStatus:
1156	//
1157	// Default value: feature_status_unknown
1158	AutoRenewStatus DomainFeatureStatus `json:"auto_renew_status"`
1159	// DnssecStatus:
1160	//
1161	// Default value: feature_status_unknown
1162	DnssecStatus DomainFeatureStatus `json:"dnssec_status"`
1163
1164	EppCode []string `json:"epp_code"`
1165
1166	ExpiredAt *time.Time `json:"expired_at"`
1167
1168	UpdatedAt *time.Time `json:"updated_at"`
1169
1170	Registrar string `json:"registrar"`
1171
1172	IsExternal bool `json:"is_external"`
1173	// Status:
1174	//
1175	// Default value: status_unknown
1176	Status DomainStatus `json:"status"`
1177
1178	// Precisely one of ExternalDomainRegistrationStatus, TransferRegistrationStatus must be set.
1179	ExternalDomainRegistrationStatus *DomainRegistrationStatusExternalDomain `json:"external_domain_registration_status,omitempty"`
1180
1181	// Precisely one of ExternalDomainRegistrationStatus, TransferRegistrationStatus must be set.
1182	TransferRegistrationStatus *DomainRegistrationStatusTransfer `json:"transfer_registration_status,omitempty"`
1183}
1184
1185// GetDNSZoneTsigKeyResponse: get dns zone tsig key response
1186type GetDNSZoneTsigKeyResponse struct {
1187	Name string `json:"name"`
1188
1189	Key string `json:"key"`
1190
1191	Algorithm string `json:"algorithm"`
1192}
1193
1194// GetDNSZoneVersionDiffResponse: get dns zone version diff response
1195type GetDNSZoneVersionDiffResponse struct {
1196	Changes []*RecordChange `json:"changes"`
1197}
1198
1199// GetDomainAuthCodeResponse: get domain auth code response
1200type GetDomainAuthCodeResponse struct {
1201	AuthCode string `json:"auth_code"`
1202}
1203
1204type ImportProviderDNSZoneRequestOnlineV1 struct {
1205	Token string `json:"token"`
1206}
1207
1208// ImportProviderDNSZoneResponse: import provider dns zone response
1209type ImportProviderDNSZoneResponse struct {
1210	Records []*Record `json:"records"`
1211}
1212
1213// ImportRawDNSZoneResponse: import raw dns zone response
1214type ImportRawDNSZoneResponse struct {
1215	Records []*Record `json:"records"`
1216}
1217
1218// ListContactsResponse: list contacts response
1219type ListContactsResponse struct {
1220	TotalCount uint32 `json:"total_count"`
1221
1222	Contacts []*ContactRoles `json:"contacts"`
1223}
1224
1225// ListDNSZoneNameserversResponse: list dns zone nameservers response
1226type ListDNSZoneNameserversResponse struct {
1227	Ns []*Nameserver `json:"ns"`
1228}
1229
1230// ListDNSZoneRecordsResponse: list dns zone records response
1231type ListDNSZoneRecordsResponse struct {
1232	TotalCount uint32 `json:"total_count"`
1233
1234	Records []*Record `json:"records"`
1235}
1236
1237// ListDNSZoneVersionRecordsResponse: list dns zone version records response
1238type ListDNSZoneVersionRecordsResponse struct {
1239	Records []*Record `json:"records"`
1240}
1241
1242// ListDNSZoneVersionsResponse: list dns zone versions response
1243type ListDNSZoneVersionsResponse struct {
1244	Versions []*DNSZoneVersion `json:"versions"`
1245}
1246
1247// ListDNSZonesResponse: list dns zones response
1248type ListDNSZonesResponse struct {
1249	TotalCount uint32 `json:"total_count"`
1250
1251	DNSZones []*DNSZone `json:"dns_zones"`
1252}
1253
1254// ListDomainsResponse: list domains response
1255type ListDomainsResponse struct {
1256	TotalCount uint32 `json:"total_count"`
1257
1258	Domains []*DomainSummary `json:"domains"`
1259}
1260
1261// ListSSLCertificatesResponse: list ssl certificates response
1262type ListSSLCertificatesResponse struct {
1263	TotalCount uint32 `json:"total_count"`
1264
1265	Certificates []*SSLCertificate `json:"certificates"`
1266}
1267
1268// ListTasksResponse: list tasks response
1269type ListTasksResponse struct {
1270	TotalCount uint32 `json:"total_count"`
1271
1272	Tasks []*Task `json:"tasks"`
1273}
1274
1275type Nameserver struct {
1276	Name string `json:"name"`
1277
1278	IP []string `json:"ip"`
1279}
1280
1281type NewContact struct {
1282	// LegalForm:
1283	//
1284	// Default value: legal_form_unknown
1285	LegalForm ContactLegalForm `json:"legal_form"`
1286	// Civility:
1287	//
1288	// Default value: civility_unknown
1289	Civility ContactCivility `json:"civility"`
1290
1291	Firstname string `json:"firstname"`
1292
1293	Lastname string `json:"lastname"`
1294
1295	CompanyName *string `json:"company_name"`
1296
1297	Email string `json:"email"`
1298
1299	EmailAlt *string `json:"email_alt"`
1300
1301	PhoneNumber string `json:"phone_number"`
1302
1303	FaxNumber *string `json:"fax_number"`
1304
1305	AddressLine1 string `json:"address_line_1"`
1306
1307	AddressLine2 *string `json:"address_line_2"`
1308
1309	Zip string `json:"zip"`
1310
1311	City string `json:"city"`
1312
1313	Country string `json:"country"`
1314
1315	VatIdentificationCode *string `json:"vat_identification_code"`
1316
1317	CompanyIdentificationCode *string `json:"company_identification_code"`
1318	// Lang:
1319	//
1320	// Default value: unknown_language_code
1321	Lang LanguageCode `json:"lang"`
1322
1323	Resale bool `json:"resale"`
1324
1325	Questions []*ContactQuestion `json:"questions"`
1326
1327	ExtensionFr *ContactExtensionFR `json:"extension_fr"`
1328
1329	ExtensionEu *ContactExtensionEU `json:"extension_eu"`
1330
1331	WhoisOptIn bool `json:"whois_opt_in"`
1332}
1333
1334type Record struct {
1335	Data string `json:"data"`
1336
1337	Name string `json:"name"`
1338
1339	Priority uint32 `json:"priority"`
1340
1341	TTL uint32 `json:"ttl"`
1342	// Type:
1343	//
1344	// Default value: unknown
1345	Type RecordType `json:"type"`
1346
1347	Comment *string `json:"comment"`
1348
1349	// Precisely one of GeoIPConfig, HTTPServiceConfig, ViewConfig, WeightedConfig must be set.
1350	GeoIPConfig *RecordGeoIPConfig `json:"geo_ip_config,omitempty"`
1351
1352	// Precisely one of GeoIPConfig, HTTPServiceConfig, ViewConfig, WeightedConfig must be set.
1353	HTTPServiceConfig *RecordHTTPServiceConfig `json:"http_service_config,omitempty"`
1354
1355	// Precisely one of GeoIPConfig, HTTPServiceConfig, ViewConfig, WeightedConfig must be set.
1356	WeightedConfig *RecordWeightedConfig `json:"weighted_config,omitempty"`
1357
1358	// Precisely one of GeoIPConfig, HTTPServiceConfig, ViewConfig, WeightedConfig must be set.
1359	ViewConfig *RecordViewConfig `json:"view_config,omitempty"`
1360
1361	ID string `json:"id"`
1362}
1363
1364type RecordChange struct {
1365
1366	// Precisely one of Add, Clear, Delete, Set must be set.
1367	Add *RecordChangeAdd `json:"add,omitempty"`
1368
1369	// Precisely one of Add, Clear, Delete, Set must be set.
1370	Set *RecordChangeSet `json:"set,omitempty"`
1371
1372	// Precisely one of Add, Clear, Delete, Set must be set.
1373	Delete *RecordChangeDelete `json:"delete,omitempty"`
1374
1375	// Precisely one of Add, Clear, Delete, Set must be set.
1376	Clear *RecordChangeClear `json:"clear,omitempty"`
1377}
1378
1379type RecordChangeAdd struct {
1380	Records []*Record `json:"records"`
1381}
1382
1383type RecordChangeClear struct {
1384}
1385
1386type RecordChangeDelete struct {
1387
1388	// Precisely one of ID, IDFields must be set.
1389	ID *string `json:"id,omitempty"`
1390
1391	// Precisely one of ID, IDFields must be set.
1392	IDFields *RecordIdentifier `json:"id_fields,omitempty"`
1393}
1394
1395type RecordChangeSet struct {
1396
1397	// Precisely one of ID, IDFields must be set.
1398	ID *string `json:"id,omitempty"`
1399
1400	// Precisely one of ID, IDFields must be set.
1401	IDFields *RecordIdentifier `json:"id_fields,omitempty"`
1402
1403	Records []*Record `json:"records"`
1404}
1405
1406type RecordGeoIPConfig struct {
1407	Matches []*RecordGeoIPConfigMatch `json:"matches"`
1408
1409	Default string `json:"default"`
1410}
1411
1412type RecordGeoIPConfigMatch struct {
1413	Countries []string `json:"countries"`
1414
1415	Continents []string `json:"continents"`
1416
1417	Data string `json:"data"`
1418}
1419
1420type RecordHTTPServiceConfig struct {
1421	IPs []net.IP `json:"ips"`
1422
1423	MustContain *string `json:"must_contain"`
1424
1425	URL string `json:"url"`
1426
1427	UserAgent *string `json:"user_agent"`
1428	// Strategy:
1429	//
1430	// Default value: random
1431	Strategy RecordHTTPServiceConfigStrategy `json:"strategy"`
1432}
1433
1434type RecordIdentifier struct {
1435	Name string `json:"name"`
1436	// Type:
1437	//
1438	// Default value: unknown
1439	Type RecordType `json:"type"`
1440
1441	Data *string `json:"data"`
1442
1443	TTL *uint32 `json:"ttl"`
1444}
1445
1446type RecordViewConfig struct {
1447	Views []*RecordViewConfigView `json:"views"`
1448}
1449
1450type RecordViewConfigView struct {
1451	Subnet string `json:"subnet"`
1452
1453	Data string `json:"data"`
1454}
1455
1456type RecordWeightedConfig struct {
1457	WeightedIPs []*RecordWeightedConfigWeightedIP `json:"weighted_ips"`
1458}
1459
1460type RecordWeightedConfigWeightedIP struct {
1461	IP net.IP `json:"ip"`
1462
1463	Weight uint32 `json:"weight"`
1464}
1465
1466// RefreshDNSZoneResponse: refresh dns zone response
1467type RefreshDNSZoneResponse struct {
1468	DNSZones []*DNSZone `json:"dns_zones"`
1469}
1470
1471type RegisterExternalDomainResponse struct {
1472	Domain string `json:"domain"`
1473
1474	OrganizationID string `json:"organization_id"`
1475
1476	ValidationToken string `json:"validation_token"`
1477
1478	CreatedAt *time.Time `json:"created_at"`
1479
1480	ProjectID string `json:"project_id"`
1481}
1482
1483// RestoreDNSZoneVersionResponse: restore dns zone version response
1484type RestoreDNSZoneVersionResponse struct {
1485}
1486
1487type SSLCertificate struct {
1488	DNSZone string `json:"dns_zone"`
1489
1490	AlternativeDNSZones []string `json:"alternative_dns_zones"`
1491	// Status:
1492	//
1493	// Default value: unknown
1494	Status SSLCertificateStatus `json:"status"`
1495
1496	PrivateKey string `json:"private_key"`
1497
1498	CertificateChain string `json:"certificate_chain"`
1499
1500	CreatedAt *time.Time `json:"created_at"`
1501
1502	ExpiredAt *time.Time `json:"expired_at"`
1503}
1504
1505type Task struct {
1506	ID string `json:"id"`
1507
1508	ProjectID string `json:"project_id"`
1509
1510	OrganizationID string `json:"organization_id"`
1511
1512	Domain *string `json:"domain"`
1513	// Type:
1514	//
1515	// Default value: unknown
1516	Type TaskType `json:"type"`
1517	// Status:
1518	//
1519	// Default value: unavailable
1520	Status TaskStatus `json:"status"`
1521
1522	StartedAt *time.Time `json:"started_at"`
1523
1524	UpdatedAt *time.Time `json:"updated_at"`
1525
1526	Message *string `json:"message"`
1527}
1528
1529type UpdateContactRequestQuestion struct {
1530	Question *string `json:"question"`
1531
1532	Answer *string `json:"answer"`
1533}
1534
1535// UpdateDNSZoneNameserversResponse: update dns zone nameservers response
1536type UpdateDNSZoneNameserversResponse struct {
1537	Ns []*Nameserver `json:"ns"`
1538}
1539
1540// UpdateDNSZoneRecordsResponse: update dns zone records response
1541type UpdateDNSZoneRecordsResponse struct {
1542	Records []*Record `json:"records"`
1543}
1544
1545// Service API
1546
1547type ListDNSZonesRequest struct {
1548	Page *int32 `json:"-"`
1549
1550	PageSize *uint32 `json:"-"`
1551	// OrderBy:
1552	//
1553	// Default value: domain_asc
1554	OrderBy ListDNSZonesRequestOrderBy `json:"-"`
1555
1556	Domain string `json:"-"`
1557
1558	DNSZone string `json:"-"`
1559
1560	ProjectID *string `json:"-"`
1561
1562	OrganizationID *string `json:"-"`
1563}
1564
1565// ListDNSZones: list DNS zones
1566//
1567// Returns a list of manageable DNS zones.
1568// You can filter the DNS zones by domain name.
1569//
1570func (s *API) ListDNSZones(req *ListDNSZonesRequest, opts ...scw.RequestOption) (*ListDNSZonesResponse, error) {
1571	var err error
1572
1573	defaultPageSize, exist := s.client.GetDefaultPageSize()
1574	if (req.PageSize == nil || *req.PageSize == 0) && exist {
1575		req.PageSize = &defaultPageSize
1576	}
1577
1578	query := url.Values{}
1579	parameter.AddToQuery(query, "page", req.Page)
1580	parameter.AddToQuery(query, "page_size", req.PageSize)
1581	parameter.AddToQuery(query, "order_by", req.OrderBy)
1582	parameter.AddToQuery(query, "domain", req.Domain)
1583	parameter.AddToQuery(query, "dns_zone", req.DNSZone)
1584	parameter.AddToQuery(query, "project_id", req.ProjectID)
1585	parameter.AddToQuery(query, "organization_id", req.OrganizationID)
1586
1587	scwReq := &scw.ScalewayRequest{
1588		Method:  "GET",
1589		Path:    "/domain/v2beta1/dns-zones",
1590		Query:   query,
1591		Headers: http.Header{},
1592	}
1593
1594	var resp ListDNSZonesResponse
1595
1596	err = s.client.Do(scwReq, &resp, opts...)
1597	if err != nil {
1598		return nil, err
1599	}
1600	return &resp, nil
1601}
1602
1603// UnsafeGetTotalCount should not be used
1604// Internal usage only
1605func (r *ListDNSZonesResponse) UnsafeGetTotalCount() uint32 {
1606	return r.TotalCount
1607}
1608
1609// UnsafeAppend should not be used
1610// Internal usage only
1611func (r *ListDNSZonesResponse) UnsafeAppend(res interface{}) (uint32, error) {
1612	results, ok := res.(*ListDNSZonesResponse)
1613	if !ok {
1614		return 0, errors.New("%T type cannot be appended to type %T", res, r)
1615	}
1616
1617	r.DNSZones = append(r.DNSZones, results.DNSZones...)
1618	r.TotalCount += uint32(len(results.DNSZones))
1619	return uint32(len(results.DNSZones)), nil
1620}
1621
1622type CreateDNSZoneRequest struct {
1623	Domain string `json:"domain"`
1624
1625	Subdomain string `json:"subdomain"`
1626
1627	ProjectID string `json:"project_id"`
1628}
1629
1630// CreateDNSZone: create a DNS zone
1631//
1632// Create a new DNS zone.
1633func (s *API) CreateDNSZone(req *CreateDNSZoneRequest, opts ...scw.RequestOption) (*DNSZone, error) {
1634	var err error
1635
1636	if req.ProjectID == "" {
1637		defaultProjectID, _ := s.client.GetDefaultProjectID()
1638		req.ProjectID = defaultProjectID
1639	}
1640
1641	scwReq := &scw.ScalewayRequest{
1642		Method:  "POST",
1643		Path:    "/domain/v2beta1/dns-zones",
1644		Headers: http.Header{},
1645	}
1646
1647	err = scwReq.SetBody(req)
1648	if err != nil {
1649		return nil, err
1650	}
1651
1652	var resp DNSZone
1653
1654	err = s.client.Do(scwReq, &resp, opts...)
1655	if err != nil {
1656		return nil, err
1657	}
1658	return &resp, nil
1659}
1660
1661type UpdateDNSZoneRequest struct {
1662	DNSZone string `json:"-"`
1663
1664	NewDNSZone *string `json:"new_dns_zone"`
1665
1666	ProjectID string `json:"project_id"`
1667}
1668
1669// UpdateDNSZone: update a DNS zone
1670//
1671// Update the name and/or the organizations for a DNS zone.
1672func (s *API) UpdateDNSZone(req *UpdateDNSZoneRequest, opts ...scw.RequestOption) (*DNSZone, error) {
1673	var err error
1674
1675	if req.ProjectID == "" {
1676		defaultProjectID, _ := s.client.GetDefaultProjectID()
1677		req.ProjectID = defaultProjectID
1678	}
1679
1680	if fmt.Sprint(req.DNSZone) == "" {
1681		return nil, errors.New("field DNSZone cannot be empty in request")
1682	}
1683
1684	scwReq := &scw.ScalewayRequest{
1685		Method:  "PATCH",
1686		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "",
1687		Headers: http.Header{},
1688	}
1689
1690	err = scwReq.SetBody(req)
1691	if err != nil {
1692		return nil, err
1693	}
1694
1695	var resp DNSZone
1696
1697	err = s.client.Do(scwReq, &resp, opts...)
1698	if err != nil {
1699		return nil, err
1700	}
1701	return &resp, nil
1702}
1703
1704type CloneDNSZoneRequest struct {
1705	DNSZone string `json:"-"`
1706
1707	DestDNSZone string `json:"dest_dns_zone"`
1708
1709	Overwrite bool `json:"overwrite"`
1710
1711	ProjectID *string `json:"project_id"`
1712}
1713
1714// CloneDNSZone: clone a DNS zone
1715//
1716// Clone an existed DNS zone with all its records into a new one.
1717func (s *API) CloneDNSZone(req *CloneDNSZoneRequest, opts ...scw.RequestOption) (*DNSZone, error) {
1718	var err error
1719
1720	if fmt.Sprint(req.DNSZone) == "" {
1721		return nil, errors.New("field DNSZone cannot be empty in request")
1722	}
1723
1724	scwReq := &scw.ScalewayRequest{
1725		Method:  "POST",
1726		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/clone",
1727		Headers: http.Header{},
1728	}
1729
1730	err = scwReq.SetBody(req)
1731	if err != nil {
1732		return nil, err
1733	}
1734
1735	var resp DNSZone
1736
1737	err = s.client.Do(scwReq, &resp, opts...)
1738	if err != nil {
1739		return nil, err
1740	}
1741	return &resp, nil
1742}
1743
1744type DeleteDNSZoneRequest struct {
1745	DNSZone string `json:"-"`
1746
1747	ProjectID string `json:"-"`
1748}
1749
1750// DeleteDNSZone: delete DNS zone
1751//
1752// Delete a DNS zone and all it's records.
1753func (s *API) DeleteDNSZone(req *DeleteDNSZoneRequest, opts ...scw.RequestOption) (*DeleteDNSZoneResponse, error) {
1754	var err error
1755
1756	if req.ProjectID == "" {
1757		defaultProjectID, _ := s.client.GetDefaultProjectID()
1758		req.ProjectID = defaultProjectID
1759	}
1760
1761	query := url.Values{}
1762	parameter.AddToQuery(query, "project_id", req.ProjectID)
1763
1764	if fmt.Sprint(req.DNSZone) == "" {
1765		return nil, errors.New("field DNSZone cannot be empty in request")
1766	}
1767
1768	scwReq := &scw.ScalewayRequest{
1769		Method:  "DELETE",
1770		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "",
1771		Query:   query,
1772		Headers: http.Header{},
1773	}
1774
1775	var resp DeleteDNSZoneResponse
1776
1777	err = s.client.Do(scwReq, &resp, opts...)
1778	if err != nil {
1779		return nil, err
1780	}
1781	return &resp, nil
1782}
1783
1784type ListDNSZoneRecordsRequest struct {
1785	DNSZone string `json:"-"`
1786
1787	Page *int32 `json:"-"`
1788
1789	PageSize *uint32 `json:"-"`
1790	// OrderBy:
1791	//
1792	// Default value: name_asc
1793	OrderBy ListDNSZoneRecordsRequestOrderBy `json:"-"`
1794
1795	Name string `json:"-"`
1796	// Type:
1797	//
1798	// Default value: unknown
1799	Type RecordType `json:"-"`
1800
1801	ProjectID *string `json:"-"`
1802}
1803
1804// ListDNSZoneRecords: list DNS zone records
1805//
1806// Returns a list of DNS records of a DNS zone with default NS.
1807// You can filter the records by type and name.
1808//
1809func (s *API) ListDNSZoneRecords(req *ListDNSZoneRecordsRequest, opts ...scw.RequestOption) (*ListDNSZoneRecordsResponse, error) {
1810	var err error
1811
1812	defaultPageSize, exist := s.client.GetDefaultPageSize()
1813	if (req.PageSize == nil || *req.PageSize == 0) && exist {
1814		req.PageSize = &defaultPageSize
1815	}
1816
1817	query := url.Values{}
1818	parameter.AddToQuery(query, "page", req.Page)
1819	parameter.AddToQuery(query, "page_size", req.PageSize)
1820	parameter.AddToQuery(query, "order_by", req.OrderBy)
1821	parameter.AddToQuery(query, "name", req.Name)
1822	parameter.AddToQuery(query, "type", req.Type)
1823	parameter.AddToQuery(query, "project_id", req.ProjectID)
1824
1825	if fmt.Sprint(req.DNSZone) == "" {
1826		return nil, errors.New("field DNSZone cannot be empty in request")
1827	}
1828
1829	scwReq := &scw.ScalewayRequest{
1830		Method:  "GET",
1831		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/records",
1832		Query:   query,
1833		Headers: http.Header{},
1834	}
1835
1836	var resp ListDNSZoneRecordsResponse
1837
1838	err = s.client.Do(scwReq, &resp, opts...)
1839	if err != nil {
1840		return nil, err
1841	}
1842	return &resp, nil
1843}
1844
1845// UnsafeGetTotalCount should not be used
1846// Internal usage only
1847func (r *ListDNSZoneRecordsResponse) UnsafeGetTotalCount() uint32 {
1848	return r.TotalCount
1849}
1850
1851// UnsafeAppend should not be used
1852// Internal usage only
1853func (r *ListDNSZoneRecordsResponse) UnsafeAppend(res interface{}) (uint32, error) {
1854	results, ok := res.(*ListDNSZoneRecordsResponse)
1855	if !ok {
1856		return 0, errors.New("%T type cannot be appended to type %T", res, r)
1857	}
1858
1859	r.Records = append(r.Records, results.Records...)
1860	r.TotalCount += uint32(len(results.Records))
1861	return uint32(len(results.Records)), nil
1862}
1863
1864type UpdateDNSZoneRecordsRequest struct {
1865	DNSZone string `json:"-"`
1866
1867	Changes []*RecordChange `json:"changes"`
1868
1869	ReturnAllRecords *bool `json:"return_all_records"`
1870}
1871
1872// UpdateDNSZoneRecords: update DNS zone records
1873//
1874// Only available with default NS.<br/>
1875// Send a list of actions and records.
1876//
1877// Action can be:
1878//  - add:
1879//   - Add new record
1880//   - Can be more specific and add a new IP to an existing A record for example
1881//  - set:
1882//   - Edit a record
1883//   - Can be more specific and edit an IP from an existing A record for example
1884//  - delete:
1885//   - Delete a record
1886//   - Can be more specific and delete an IP from an existing A record for example
1887//  - clear:
1888//   - Delete all records from a DNS zone
1889//
1890// All edits will be versioned.
1891//
1892func (s *API) UpdateDNSZoneRecords(req *UpdateDNSZoneRecordsRequest, opts ...scw.RequestOption) (*UpdateDNSZoneRecordsResponse, error) {
1893	var err error
1894
1895	if fmt.Sprint(req.DNSZone) == "" {
1896		return nil, errors.New("field DNSZone cannot be empty in request")
1897	}
1898
1899	scwReq := &scw.ScalewayRequest{
1900		Method:  "PATCH",
1901		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/records",
1902		Headers: http.Header{},
1903	}
1904
1905	err = scwReq.SetBody(req)
1906	if err != nil {
1907		return nil, err
1908	}
1909
1910	var resp UpdateDNSZoneRecordsResponse
1911
1912	err = s.client.Do(scwReq, &resp, opts...)
1913	if err != nil {
1914		return nil, err
1915	}
1916	return &resp, nil
1917}
1918
1919type ListDNSZoneNameserversRequest struct {
1920	DNSZone string `json:"-"`
1921
1922	ProjectID *string `json:"-"`
1923}
1924
1925// ListDNSZoneNameservers: list DNS zone nameservers
1926//
1927// Returns a list of Nameservers and their optional glue records for a DNS zone.
1928func (s *API) ListDNSZoneNameservers(req *ListDNSZoneNameserversRequest, opts ...scw.RequestOption) (*ListDNSZoneNameserversResponse, error) {
1929	var err error
1930
1931	query := url.Values{}
1932	parameter.AddToQuery(query, "project_id", req.ProjectID)
1933
1934	if fmt.Sprint(req.DNSZone) == "" {
1935		return nil, errors.New("field DNSZone cannot be empty in request")
1936	}
1937
1938	scwReq := &scw.ScalewayRequest{
1939		Method:  "GET",
1940		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/nameservers",
1941		Query:   query,
1942		Headers: http.Header{},
1943	}
1944
1945	var resp ListDNSZoneNameserversResponse
1946
1947	err = s.client.Do(scwReq, &resp, opts...)
1948	if err != nil {
1949		return nil, err
1950	}
1951	return &resp, nil
1952}
1953
1954type UpdateDNSZoneNameserversRequest struct {
1955	DNSZone string `json:"-"`
1956
1957	Ns []*Nameserver `json:"ns"`
1958}
1959
1960// UpdateDNSZoneNameservers: update DNS zone nameservers
1961//
1962// Update DNS zone nameservers and set optional glue records.
1963func (s *API) UpdateDNSZoneNameservers(req *UpdateDNSZoneNameserversRequest, opts ...scw.RequestOption) (*UpdateDNSZoneNameserversResponse, error) {
1964	var err error
1965
1966	if fmt.Sprint(req.DNSZone) == "" {
1967		return nil, errors.New("field DNSZone cannot be empty in request")
1968	}
1969
1970	scwReq := &scw.ScalewayRequest{
1971		Method:  "PUT",
1972		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/nameservers",
1973		Headers: http.Header{},
1974	}
1975
1976	err = scwReq.SetBody(req)
1977	if err != nil {
1978		return nil, err
1979	}
1980
1981	var resp UpdateDNSZoneNameserversResponse
1982
1983	err = s.client.Do(scwReq, &resp, opts...)
1984	if err != nil {
1985		return nil, err
1986	}
1987	return &resp, nil
1988}
1989
1990type ClearDNSZoneRecordsRequest struct {
1991	DNSZone string `json:"-"`
1992}
1993
1994// ClearDNSZoneRecords: clear DNS zone records
1995//
1996// Only available with default NS.<br/>
1997// Delete all the records from a DNS zone.
1998// All edits will be versioned.
1999//
2000func (s *API) ClearDNSZoneRecords(req *ClearDNSZoneRecordsRequest, opts ...scw.RequestOption) (*ClearDNSZoneRecordsResponse, error) {
2001	var err error
2002
2003	if fmt.Sprint(req.DNSZone) == "" {
2004		return nil, errors.New("field DNSZone cannot be empty in request")
2005	}
2006
2007	scwReq := &scw.ScalewayRequest{
2008		Method:  "DELETE",
2009		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/records",
2010		Headers: http.Header{},
2011	}
2012
2013	var resp ClearDNSZoneRecordsResponse
2014
2015	err = s.client.Do(scwReq, &resp, opts...)
2016	if err != nil {
2017		return nil, err
2018	}
2019	return &resp, nil
2020}
2021
2022type ExportRawDNSZoneRequest struct {
2023	DNSZone string `json:"-"`
2024	// Format:
2025	//
2026	// Default value: unknown_raw_format
2027	Format RawFormat `json:"-"`
2028}
2029
2030// ExportRawDNSZone: export raw DNS zone
2031//
2032// Get a DNS zone in a given format with default NS.
2033func (s *API) ExportRawDNSZone(req *ExportRawDNSZoneRequest, opts ...scw.RequestOption) (*scw.File, error) {
2034	var err error
2035
2036	query := url.Values{}
2037	parameter.AddToQuery(query, "format", req.Format)
2038
2039	if fmt.Sprint(req.DNSZone) == "" {
2040		return nil, errors.New("field DNSZone cannot be empty in request")
2041	}
2042
2043	scwReq := &scw.ScalewayRequest{
2044		Method:  "GET",
2045		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/raw",
2046		Query:   query,
2047		Headers: http.Header{},
2048	}
2049
2050	var resp scw.File
2051
2052	err = s.client.Do(scwReq, &resp, opts...)
2053	if err != nil {
2054		return nil, err
2055	}
2056	return &resp, nil
2057}
2058
2059type ImportRawDNSZoneRequest struct {
2060	DNSZone string `json:"-"`
2061	// Format:
2062	//
2063	// Default value: unknown_raw_format
2064	Format RawFormat `json:"format"`
2065
2066	Content string `json:"content"`
2067
2068	ProjectID string `json:"project_id"`
2069}
2070
2071// ImportRawDNSZone: import raw DNS zone
2072//
2073// Import and replace records from a given provider format with default NS.
2074func (s *API) ImportRawDNSZone(req *ImportRawDNSZoneRequest, opts ...scw.RequestOption) (*ImportRawDNSZoneResponse, error) {
2075	var err error
2076
2077	if req.ProjectID == "" {
2078		defaultProjectID, _ := s.client.GetDefaultProjectID()
2079		req.ProjectID = defaultProjectID
2080	}
2081
2082	if fmt.Sprint(req.DNSZone) == "" {
2083		return nil, errors.New("field DNSZone cannot be empty in request")
2084	}
2085
2086	scwReq := &scw.ScalewayRequest{
2087		Method:  "POST",
2088		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/raw",
2089		Headers: http.Header{},
2090	}
2091
2092	err = scwReq.SetBody(req)
2093	if err != nil {
2094		return nil, err
2095	}
2096
2097	var resp ImportRawDNSZoneResponse
2098
2099	err = s.client.Do(scwReq, &resp, opts...)
2100	if err != nil {
2101		return nil, err
2102	}
2103	return &resp, nil
2104}
2105
2106type ImportProviderDNSZoneRequest struct {
2107	DNSZone string `json:"-"`
2108
2109	// Precisely one of OnlineV1 must be set.
2110	OnlineV1 *ImportProviderDNSZoneRequestOnlineV1 `json:"online_v1,omitempty"`
2111}
2112
2113// ImportProviderDNSZone: import provider DNS zone
2114//
2115// Import and replace records from a given provider format with default NS.
2116func (s *API) ImportProviderDNSZone(req *ImportProviderDNSZoneRequest, opts ...scw.RequestOption) (*ImportProviderDNSZoneResponse, error) {
2117	var err error
2118
2119	if fmt.Sprint(req.DNSZone) == "" {
2120		return nil, errors.New("field DNSZone cannot be empty in request")
2121	}
2122
2123	scwReq := &scw.ScalewayRequest{
2124		Method:  "POST",
2125		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/import-provider",
2126		Headers: http.Header{},
2127	}
2128
2129	err = scwReq.SetBody(req)
2130	if err != nil {
2131		return nil, err
2132	}
2133
2134	var resp ImportProviderDNSZoneResponse
2135
2136	err = s.client.Do(scwReq, &resp, opts...)
2137	if err != nil {
2138		return nil, err
2139	}
2140	return &resp, nil
2141}
2142
2143type RefreshDNSZoneRequest struct {
2144	DNSZone string `json:"-"`
2145
2146	RecreateDNSZone bool `json:"recreate_dns_zone"`
2147
2148	RecreateSubDNSZone bool `json:"recreate_sub_dns_zone"`
2149}
2150
2151// RefreshDNSZone: refresh DNS zone
2152//
2153// Refresh SOA DNS zone.
2154// You can recreate the given DNS zone and its sub DNS zone if needed.
2155//
2156func (s *API) RefreshDNSZone(req *RefreshDNSZoneRequest, opts ...scw.RequestOption) (*RefreshDNSZoneResponse, error) {
2157	var err error
2158
2159	if fmt.Sprint(req.DNSZone) == "" {
2160		return nil, errors.New("field DNSZone cannot be empty in request")
2161	}
2162
2163	scwReq := &scw.ScalewayRequest{
2164		Method:  "POST",
2165		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/refresh",
2166		Headers: http.Header{},
2167	}
2168
2169	err = scwReq.SetBody(req)
2170	if err != nil {
2171		return nil, err
2172	}
2173
2174	var resp RefreshDNSZoneResponse
2175
2176	err = s.client.Do(scwReq, &resp, opts...)
2177	if err != nil {
2178		return nil, err
2179	}
2180	return &resp, nil
2181}
2182
2183type ListDNSZoneVersionsRequest struct {
2184	DNSZone string `json:"-"`
2185}
2186
2187// ListDNSZoneVersions: list DNS zone versions
2188//
2189// Get a list of DNS zone versions.<br/>
2190// The maximum version count is 100.<br/>
2191// If the count reaches this limit, the oldest version will be deleted after each new modification.
2192//
2193func (s *API) ListDNSZoneVersions(req *ListDNSZoneVersionsRequest, opts ...scw.RequestOption) (*ListDNSZoneVersionsResponse, error) {
2194	var err error
2195
2196	if fmt.Sprint(req.DNSZone) == "" {
2197		return nil, errors.New("field DNSZone cannot be empty in request")
2198	}
2199
2200	scwReq := &scw.ScalewayRequest{
2201		Method:  "GET",
2202		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/versions",
2203		Headers: http.Header{},
2204	}
2205
2206	var resp ListDNSZoneVersionsResponse
2207
2208	err = s.client.Do(scwReq, &resp, opts...)
2209	if err != nil {
2210		return nil, err
2211	}
2212	return &resp, nil
2213}
2214
2215type ListDNSZoneVersionRecordsRequest struct {
2216	DNSZoneVersionID string `json:"-"`
2217}
2218
2219// ListDNSZoneVersionRecords: list DNS zone version records
2220//
2221// Get a list of records from a previous DNS zone version.
2222func (s *API) ListDNSZoneVersionRecords(req *ListDNSZoneVersionRecordsRequest, opts ...scw.RequestOption) (*ListDNSZoneVersionRecordsResponse, error) {
2223	var err error
2224
2225	if fmt.Sprint(req.DNSZoneVersionID) == "" {
2226		return nil, errors.New("field DNSZoneVersionID cannot be empty in request")
2227	}
2228
2229	scwReq := &scw.ScalewayRequest{
2230		Method:  "GET",
2231		Path:    "/domain/v2beta1/dns-zones/version/" + fmt.Sprint(req.DNSZoneVersionID) + "",
2232		Headers: http.Header{},
2233	}
2234
2235	var resp ListDNSZoneVersionRecordsResponse
2236
2237	err = s.client.Do(scwReq, &resp, opts...)
2238	if err != nil {
2239		return nil, err
2240	}
2241	return &resp, nil
2242}
2243
2244type GetDNSZoneVersionDiffRequest struct {
2245	DNSZoneVersionID string `json:"-"`
2246}
2247
2248// GetDNSZoneVersionDiff: get DNS zone version diff
2249//
2250// Get all differences from a previous DNS zone version.
2251func (s *API) GetDNSZoneVersionDiff(req *GetDNSZoneVersionDiffRequest, opts ...scw.RequestOption) (*GetDNSZoneVersionDiffResponse, error) {
2252	var err error
2253
2254	if fmt.Sprint(req.DNSZoneVersionID) == "" {
2255		return nil, errors.New("field DNSZoneVersionID cannot be empty in request")
2256	}
2257
2258	scwReq := &scw.ScalewayRequest{
2259		Method:  "GET",
2260		Path:    "/domain/v2beta1/dns-zones/version/" + fmt.Sprint(req.DNSZoneVersionID) + "/diff",
2261		Headers: http.Header{},
2262	}
2263
2264	var resp GetDNSZoneVersionDiffResponse
2265
2266	err = s.client.Do(scwReq, &resp, opts...)
2267	if err != nil {
2268		return nil, err
2269	}
2270	return &resp, nil
2271}
2272
2273type RestoreDNSZoneVersionRequest struct {
2274	DNSZoneVersionID string `json:"-"`
2275}
2276
2277// RestoreDNSZoneVersion: restore DNS zone version
2278//
2279// Restore and activate a previous DNS zone version.
2280func (s *API) RestoreDNSZoneVersion(req *RestoreDNSZoneVersionRequest, opts ...scw.RequestOption) (*RestoreDNSZoneVersionResponse, error) {
2281	var err error
2282
2283	if fmt.Sprint(req.DNSZoneVersionID) == "" {
2284		return nil, errors.New("field DNSZoneVersionID cannot be empty in request")
2285	}
2286
2287	scwReq := &scw.ScalewayRequest{
2288		Method:  "POST",
2289		Path:    "/domain/v2beta1/dns-zones/version/" + fmt.Sprint(req.DNSZoneVersionID) + "/restore",
2290		Headers: http.Header{},
2291	}
2292
2293	err = scwReq.SetBody(req)
2294	if err != nil {
2295		return nil, err
2296	}
2297
2298	var resp RestoreDNSZoneVersionResponse
2299
2300	err = s.client.Do(scwReq, &resp, opts...)
2301	if err != nil {
2302		return nil, err
2303	}
2304	return &resp, nil
2305}
2306
2307type GetSSLCertificateRequest struct {
2308	DNSZone string `json:"-"`
2309}
2310
2311// GetSSLCertificate: get the zone SSL certificate if it exists
2312func (s *API) GetSSLCertificate(req *GetSSLCertificateRequest, opts ...scw.RequestOption) (*SSLCertificate, error) {
2313	var err error
2314
2315	if fmt.Sprint(req.DNSZone) == "" {
2316		return nil, errors.New("field DNSZone cannot be empty in request")
2317	}
2318
2319	scwReq := &scw.ScalewayRequest{
2320		Method:  "GET",
2321		Path:    "/domain/v2beta1/ssl-certificates/" + fmt.Sprint(req.DNSZone) + "",
2322		Headers: http.Header{},
2323	}
2324
2325	var resp SSLCertificate
2326
2327	err = s.client.Do(scwReq, &resp, opts...)
2328	if err != nil {
2329		return nil, err
2330	}
2331	return &resp, nil
2332}
2333
2334type CreateSSLCertificateRequest struct {
2335	DNSZone string `json:"dns_zone"`
2336
2337	AlternativeDNSZones []string `json:"alternative_dns_zones"`
2338}
2339
2340// CreateSSLCertificate: create or return the zone SSL certificate
2341func (s *API) CreateSSLCertificate(req *CreateSSLCertificateRequest, opts ...scw.RequestOption) (*SSLCertificate, error) {
2342	var err error
2343
2344	scwReq := &scw.ScalewayRequest{
2345		Method:  "POST",
2346		Path:    "/domain/v2beta1/ssl-certificates",
2347		Headers: http.Header{},
2348	}
2349
2350	err = scwReq.SetBody(req)
2351	if err != nil {
2352		return nil, err
2353	}
2354
2355	var resp SSLCertificate
2356
2357	err = s.client.Do(scwReq, &resp, opts...)
2358	if err != nil {
2359		return nil, err
2360	}
2361	return &resp, nil
2362}
2363
2364type ListSSLCertificatesRequest struct {
2365	Page *int32 `json:"-"`
2366
2367	PageSize *uint32 `json:"-"`
2368
2369	DNSZone string `json:"-"`
2370
2371	ProjectID *string `json:"-"`
2372}
2373
2374// ListSSLCertificates: list all user SSL certificates
2375func (s *API) ListSSLCertificates(req *ListSSLCertificatesRequest, opts ...scw.RequestOption) (*ListSSLCertificatesResponse, error) {
2376	var err error
2377
2378	defaultPageSize, exist := s.client.GetDefaultPageSize()
2379	if (req.PageSize == nil || *req.PageSize == 0) && exist {
2380		req.PageSize = &defaultPageSize
2381	}
2382
2383	query := url.Values{}
2384	parameter.AddToQuery(query, "page", req.Page)
2385	parameter.AddToQuery(query, "page_size", req.PageSize)
2386	parameter.AddToQuery(query, "dns_zone", req.DNSZone)
2387	parameter.AddToQuery(query, "project_id", req.ProjectID)
2388
2389	scwReq := &scw.ScalewayRequest{
2390		Method:  "GET",
2391		Path:    "/domain/v2beta1/ssl-certificates",
2392		Query:   query,
2393		Headers: http.Header{},
2394	}
2395
2396	var resp ListSSLCertificatesResponse
2397
2398	err = s.client.Do(scwReq, &resp, opts...)
2399	if err != nil {
2400		return nil, err
2401	}
2402	return &resp, nil
2403}
2404
2405// UnsafeGetTotalCount should not be used
2406// Internal usage only
2407func (r *ListSSLCertificatesResponse) UnsafeGetTotalCount() uint32 {
2408	return r.TotalCount
2409}
2410
2411// UnsafeAppend should not be used
2412// Internal usage only
2413func (r *ListSSLCertificatesResponse) UnsafeAppend(res interface{}) (uint32, error) {
2414	results, ok := res.(*ListSSLCertificatesResponse)
2415	if !ok {
2416		return 0, errors.New("%T type cannot be appended to type %T", res, r)
2417	}
2418
2419	r.Certificates = append(r.Certificates, results.Certificates...)
2420	r.TotalCount += uint32(len(results.Certificates))
2421	return uint32(len(results.Certificates)), nil
2422}
2423
2424type DeleteSSLCertificateRequest struct {
2425	DNSZone string `json:"-"`
2426}
2427
2428// DeleteSSLCertificate: delete an SSL certificate
2429func (s *API) DeleteSSLCertificate(req *DeleteSSLCertificateRequest, opts ...scw.RequestOption) (*DeleteSSLCertificateResponse, error) {
2430	var err error
2431
2432	if fmt.Sprint(req.DNSZone) == "" {
2433		return nil, errors.New("field DNSZone cannot be empty in request")
2434	}
2435
2436	scwReq := &scw.ScalewayRequest{
2437		Method:  "DELETE",
2438		Path:    "/domain/v2beta1/ssl-certificates/" + fmt.Sprint(req.DNSZone) + "",
2439		Headers: http.Header{},
2440	}
2441
2442	var resp DeleteSSLCertificateResponse
2443
2444	err = s.client.Do(scwReq, &resp, opts...)
2445	if err != nil {
2446		return nil, err
2447	}
2448	return &resp, nil
2449}
2450
2451type GetDNSZoneTsigKeyRequest struct {
2452	DNSZone string `json:"-"`
2453}
2454
2455// GetDNSZoneTsigKey: get the DNS zone TSIG Key
2456//
2457// Get the DNS zone TSIG Key to allow AXFR request.
2458func (s *API) GetDNSZoneTsigKey(req *GetDNSZoneTsigKeyRequest, opts ...scw.RequestOption) (*GetDNSZoneTsigKeyResponse, error) {
2459	var err error
2460
2461	if fmt.Sprint(req.DNSZone) == "" {
2462		return nil, errors.New("field DNSZone cannot be empty in request")
2463	}
2464
2465	scwReq := &scw.ScalewayRequest{
2466		Method:  "GET",
2467		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/tsig-key",
2468		Headers: http.Header{},
2469	}
2470
2471	var resp GetDNSZoneTsigKeyResponse
2472
2473	err = s.client.Do(scwReq, &resp, opts...)
2474	if err != nil {
2475		return nil, err
2476	}
2477	return &resp, nil
2478}
2479
2480type DeleteDNSZoneTsigKeyRequest struct {
2481	DNSZone string `json:"-"`
2482}
2483
2484// DeleteDNSZoneTsigKey: delete the DNS zone TSIG Key
2485func (s *API) DeleteDNSZoneTsigKey(req *DeleteDNSZoneTsigKeyRequest, opts ...scw.RequestOption) error {
2486	var err error
2487
2488	if fmt.Sprint(req.DNSZone) == "" {
2489		return errors.New("field DNSZone cannot be empty in request")
2490	}
2491
2492	scwReq := &scw.ScalewayRequest{
2493		Method:  "DELETE",
2494		Path:    "/domain/v2beta1/dns-zones/" + fmt.Sprint(req.DNSZone) + "/tsig-key",
2495		Headers: http.Header{},
2496	}
2497
2498	err = s.client.Do(scwReq, nil, opts...)
2499	if err != nil {
2500		return err
2501	}
2502	return nil
2503}
2504
2505// Service RegistrarAPI
2506
2507type RegistrarAPIListTasksRequest struct {
2508	Page *int32 `json:"-"`
2509
2510	PageSize *uint32 `json:"-"`
2511
2512	Domain string `json:"-"`
2513
2514	ProjectID *string `json:"-"`
2515
2516	OrganizationID *string `json:"-"`
2517}
2518
2519// ListTasks: list tasks
2520//
2521// List all account tasks.
2522// You can filter the list by domain name.
2523//
2524func (s *RegistrarAPI) ListTasks(req *RegistrarAPIListTasksRequest, opts ...scw.RequestOption) (*ListTasksResponse, error) {
2525	var err error
2526
2527	defaultPageSize, exist := s.client.GetDefaultPageSize()
2528	if (req.PageSize == nil || *req.PageSize == 0) && exist {
2529		req.PageSize = &defaultPageSize
2530	}
2531
2532	query := url.Values{}
2533	parameter.AddToQuery(query, "page", req.Page)
2534	parameter.AddToQuery(query, "page_size", req.PageSize)
2535	parameter.AddToQuery(query, "domain", req.Domain)
2536	parameter.AddToQuery(query, "project_id", req.ProjectID)
2537	parameter.AddToQuery(query, "organization_id", req.OrganizationID)
2538
2539	scwReq := &scw.ScalewayRequest{
2540		Method:  "GET",
2541		Path:    "/domain/v2beta1/tasks",
2542		Query:   query,
2543		Headers: http.Header{},
2544	}
2545
2546	var resp ListTasksResponse
2547
2548	err = s.client.Do(scwReq, &resp, opts...)
2549	if err != nil {
2550		return nil, err
2551	}
2552	return &resp, nil
2553}
2554
2555// UnsafeGetTotalCount should not be used
2556// Internal usage only
2557func (r *ListTasksResponse) UnsafeGetTotalCount() uint32 {
2558	return r.TotalCount
2559}
2560
2561// UnsafeAppend should not be used
2562// Internal usage only
2563func (r *ListTasksResponse) UnsafeAppend(res interface{}) (uint32, error) {
2564	results, ok := res.(*ListTasksResponse)
2565	if !ok {
2566		return 0, errors.New("%T type cannot be appended to type %T", res, r)
2567	}
2568
2569	r.Tasks = append(r.Tasks, results.Tasks...)
2570	r.TotalCount += uint32(len(results.Tasks))
2571	return uint32(len(results.Tasks)), nil
2572}
2573
2574type RegistrarAPIBuyDomainRequest struct {
2575	Domain string `json:"domain"`
2576
2577	DurationInYears uint32 `json:"duration_in_years"`
2578
2579	ProjectID string `json:"project_id"`
2580
2581	// Precisely one of OwnerContact, OwnerContactID must be set.
2582	OwnerContactID *string `json:"owner_contact_id,omitempty"`
2583
2584	// Precisely one of OwnerContact, OwnerContactID must be set.
2585	OwnerContact *NewContact `json:"owner_contact,omitempty"`
2586
2587	// Precisely one of AdministrativeContact, AdministrativeContactID must be set.
2588	AdministrativeContactID *string `json:"administrative_contact_id,omitempty"`
2589
2590	// Precisely one of AdministrativeContact, AdministrativeContactID must be set.
2591	AdministrativeContact *NewContact `json:"administrative_contact,omitempty"`
2592
2593	// Precisely one of TechnicalContact, TechnicalContactID must be set.
2594	TechnicalContactID *string `json:"technical_contact_id,omitempty"`
2595
2596	// Precisely one of TechnicalContact, TechnicalContactID must be set.
2597	TechnicalContact *NewContact `json:"technical_contact,omitempty"`
2598}
2599
2600// BuyDomain: buy a domain
2601//
2602// Request the registration of a domain name.
2603// You can provide an already existing domain's contact or a new contact.
2604//
2605func (s *RegistrarAPI) BuyDomain(req *RegistrarAPIBuyDomainRequest, opts ...scw.RequestOption) (*Domain, error) {
2606	var err error
2607
2608	if req.ProjectID == "" {
2609		defaultProjectID, _ := s.client.GetDefaultProjectID()
2610		req.ProjectID = defaultProjectID
2611	}
2612
2613	scwReq := &scw.ScalewayRequest{
2614		Method:  "POST",
2615		Path:    "/domain/v2beta1/domains",
2616		Headers: http.Header{},
2617	}
2618
2619	err = scwReq.SetBody(req)
2620	if err != nil {
2621		return nil, err
2622	}
2623
2624	var resp Domain
2625
2626	err = s.client.Do(scwReq, &resp, opts...)
2627	if err != nil {
2628		return nil, err
2629	}
2630	return &resp, nil
2631}
2632
2633type RegistrarAPIRenewDomainRequest struct {
2634	Domain string `json:"-"`
2635
2636	DurationInYears uint32 `json:"duration_in_years"`
2637}
2638
2639// RenewDomain: renew a domain
2640//
2641// Request the renewal of a domain name.
2642//
2643func (s *RegistrarAPI) RenewDomain(req *RegistrarAPIRenewDomainRequest, opts ...scw.RequestOption) (*Domain, error) {
2644	var err error
2645
2646	if fmt.Sprint(req.Domain) == "" {
2647		return nil, errors.New("field Domain cannot be empty in request")
2648	}
2649
2650	scwReq := &scw.ScalewayRequest{
2651		Method:  "POST",
2652		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/renew",
2653		Headers: http.Header{},
2654	}
2655
2656	err = scwReq.SetBody(req)
2657	if err != nil {
2658		return nil, err
2659	}
2660
2661	var resp Domain
2662
2663	err = s.client.Do(scwReq, &resp, opts...)
2664	if err != nil {
2665		return nil, err
2666	}
2667	return &resp, nil
2668}
2669
2670type RegistrarAPITransferInDomainRequest struct {
2671	Domain string `json:"domain"`
2672
2673	AuthCode string `json:"auth_code"`
2674
2675	ProjectID string `json:"project_id"`
2676
2677	// Precisely one of OwnerContact, OwnerContactID must be set.
2678	OwnerContactID *string `json:"owner_contact_id,omitempty"`
2679
2680	// Precisely one of OwnerContact, OwnerContactID must be set.
2681	OwnerContact *NewContact `json:"owner_contact,omitempty"`
2682
2683	// Precisely one of AdministrativeContact, AdministrativeContactID must be set.
2684	AdministrativeContactID *string `json:"administrative_contact_id,omitempty"`
2685
2686	// Precisely one of AdministrativeContact, AdministrativeContactID must be set.
2687	AdministrativeContact *NewContact `json:"administrative_contact,omitempty"`
2688
2689	// Precisely one of TechnicalContact, TechnicalContactID must be set.
2690	TechnicalContactID *string `json:"technical_contact_id,omitempty"`
2691
2692	// Precisely one of TechnicalContact, TechnicalContactID must be set.
2693	TechnicalContact *NewContact `json:"technical_contact,omitempty"`
2694}
2695
2696// TransferInDomain: transfer a domain
2697//
2698// Request the transfer from another registrar domain to Scaleway.
2699//
2700func (s *RegistrarAPI) TransferInDomain(req *RegistrarAPITransferInDomainRequest, opts ...scw.RequestOption) (*Domain, error) {
2701	var err error
2702
2703	if req.ProjectID == "" {
2704		defaultProjectID, _ := s.client.GetDefaultProjectID()
2705		req.ProjectID = defaultProjectID
2706	}
2707
2708	scwReq := &scw.ScalewayRequest{
2709		Method:  "POST",
2710		Path:    "/domain/v2beta1/domains/domain-transfers",
2711		Headers: http.Header{},
2712	}
2713
2714	err = scwReq.SetBody(req)
2715	if err != nil {
2716		return nil, err
2717	}
2718
2719	var resp Domain
2720
2721	err = s.client.Do(scwReq, &resp, opts...)
2722	if err != nil {
2723		return nil, err
2724	}
2725	return &resp, nil
2726}
2727
2728type RegistrarAPITradeDomainRequest struct {
2729	Domain string `json:"-"`
2730
2731	ProjectID *string `json:"project_id"`
2732
2733	// Precisely one of NewOwnerContact, NewOwnerContactID must be set.
2734	NewOwnerContactID *string `json:"new_owner_contact_id,omitempty"`
2735
2736	// Precisely one of NewOwnerContact, NewOwnerContactID must be set.
2737	NewOwnerContact *NewContact `json:"new_owner_contact,omitempty"`
2738}
2739
2740// TradeDomain: trade a domain contact
2741//
2742// Request a trade for the contact owner.<br/>
2743// If an `organization_id` is given, the change is from the current Scaleway account to another Scaleway account.<br/>
2744// If no contact is given, the first contact of the other Scaleway account is taken.<br/>
2745// If the other Scaleway account has no contact. An error occurs.
2746//
2747func (s *RegistrarAPI) TradeDomain(req *RegistrarAPITradeDomainRequest, opts ...scw.RequestOption) (*Domain, error) {
2748	var err error
2749
2750	if fmt.Sprint(req.Domain) == "" {
2751		return nil, errors.New("field Domain cannot be empty in request")
2752	}
2753
2754	scwReq := &scw.ScalewayRequest{
2755		Method:  "POST",
2756		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/trade",
2757		Headers: http.Header{},
2758	}
2759
2760	err = scwReq.SetBody(req)
2761	if err != nil {
2762		return nil, err
2763	}
2764
2765	var resp Domain
2766
2767	err = s.client.Do(scwReq, &resp, opts...)
2768	if err != nil {
2769		return nil, err
2770	}
2771	return &resp, nil
2772}
2773
2774type RegistrarAPIRegisterExternalDomainRequest struct {
2775	Domain string `json:"domain"`
2776
2777	ProjectID string `json:"project_id"`
2778}
2779
2780// RegisterExternalDomain: register an external domain
2781//
2782// Request the registration of an external domain name.
2783//
2784func (s *RegistrarAPI) RegisterExternalDomain(req *RegistrarAPIRegisterExternalDomainRequest, opts ...scw.RequestOption) (*RegisterExternalDomainResponse, error) {
2785	var err error
2786
2787	if req.ProjectID == "" {
2788		defaultProjectID, _ := s.client.GetDefaultProjectID()
2789		req.ProjectID = defaultProjectID
2790	}
2791
2792	scwReq := &scw.ScalewayRequest{
2793		Method:  "POST",
2794		Path:    "/domain/v2beta1/external-domains",
2795		Headers: http.Header{},
2796	}
2797
2798	err = scwReq.SetBody(req)
2799	if err != nil {
2800		return nil, err
2801	}
2802
2803	var resp RegisterExternalDomainResponse
2804
2805	err = s.client.Do(scwReq, &resp, opts...)
2806	if err != nil {
2807		return nil, err
2808	}
2809	return &resp, nil
2810}
2811
2812type RegistrarAPIDeleteExternalDomainRequest struct {
2813	Domain string `json:"-"`
2814}
2815
2816// DeleteExternalDomain: delete an external domain
2817//
2818// Delete an external domain name.
2819//
2820func (s *RegistrarAPI) DeleteExternalDomain(req *RegistrarAPIDeleteExternalDomainRequest, opts ...scw.RequestOption) (*DeleteExternalDomainResponse, error) {
2821	var err error
2822
2823	if fmt.Sprint(req.Domain) == "" {
2824		return nil, errors.New("field Domain cannot be empty in request")
2825	}
2826
2827	scwReq := &scw.ScalewayRequest{
2828		Method:  "DELETE",
2829		Path:    "/domain/v2beta1/external-domains/" + fmt.Sprint(req.Domain) + "",
2830		Headers: http.Header{},
2831	}
2832
2833	var resp DeleteExternalDomainResponse
2834
2835	err = s.client.Do(scwReq, &resp, opts...)
2836	if err != nil {
2837		return nil, err
2838	}
2839	return &resp, nil
2840}
2841
2842type RegistrarAPIListContactsRequest struct {
2843	Page *int32 `json:"-"`
2844
2845	PageSize *uint32 `json:"-"`
2846
2847	Domain *string `json:"-"`
2848
2849	ProjectID *string `json:"-"`
2850
2851	OrganizationID *string `json:"-"`
2852}
2853
2854// ListContacts: list contacts
2855//
2856// Return a list of contacts with their domains and roles.
2857// You can filter the list by domain name.
2858//
2859func (s *RegistrarAPI) ListContacts(req *RegistrarAPIListContactsRequest, opts ...scw.RequestOption) (*ListContactsResponse, error) {
2860	var err error
2861
2862	defaultPageSize, exist := s.client.GetDefaultPageSize()
2863	if (req.PageSize == nil || *req.PageSize == 0) && exist {
2864		req.PageSize = &defaultPageSize
2865	}
2866
2867	query := url.Values{}
2868	parameter.AddToQuery(query, "page", req.Page)
2869	parameter.AddToQuery(query, "page_size", req.PageSize)
2870	parameter.AddToQuery(query, "domain", req.Domain)
2871	parameter.AddToQuery(query, "project_id", req.ProjectID)
2872	parameter.AddToQuery(query, "organization_id", req.OrganizationID)
2873
2874	scwReq := &scw.ScalewayRequest{
2875		Method:  "GET",
2876		Path:    "/domain/v2beta1/contacts",
2877		Query:   query,
2878		Headers: http.Header{},
2879	}
2880
2881	var resp ListContactsResponse
2882
2883	err = s.client.Do(scwReq, &resp, opts...)
2884	if err != nil {
2885		return nil, err
2886	}
2887	return &resp, nil
2888}
2889
2890// UnsafeGetTotalCount should not be used
2891// Internal usage only
2892func (r *ListContactsResponse) UnsafeGetTotalCount() uint32 {
2893	return r.TotalCount
2894}
2895
2896// UnsafeAppend should not be used
2897// Internal usage only
2898func (r *ListContactsResponse) UnsafeAppend(res interface{}) (uint32, error) {
2899	results, ok := res.(*ListContactsResponse)
2900	if !ok {
2901		return 0, errors.New("%T type cannot be appended to type %T", res, r)
2902	}
2903
2904	r.Contacts = append(r.Contacts, results.Contacts...)
2905	r.TotalCount += uint32(len(results.Contacts))
2906	return uint32(len(results.Contacts)), nil
2907}
2908
2909type RegistrarAPIGetContactRequest struct {
2910	ContactID string `json:"-"`
2911}
2912
2913// GetContact: get a contact
2914//
2915// Return a contact details retrieved from the registrar using a given contact ID.
2916func (s *RegistrarAPI) GetContact(req *RegistrarAPIGetContactRequest, opts ...scw.RequestOption) (*Contact, error) {
2917	var err error
2918
2919	if fmt.Sprint(req.ContactID) == "" {
2920		return nil, errors.New("field ContactID cannot be empty in request")
2921	}
2922
2923	scwReq := &scw.ScalewayRequest{
2924		Method:  "GET",
2925		Path:    "/domain/v2beta1/contacts/" + fmt.Sprint(req.ContactID) + "",
2926		Headers: http.Header{},
2927	}
2928
2929	var resp Contact
2930
2931	err = s.client.Do(scwReq, &resp, opts...)
2932	if err != nil {
2933		return nil, err
2934	}
2935	return &resp, nil
2936}
2937
2938type RegistrarAPIUpdateContactRequest struct {
2939	ContactID string `json:"-"`
2940
2941	Email *string `json:"email"`
2942
2943	EmailAlt *string `json:"email_alt"`
2944
2945	PhoneNumber *string `json:"phone_number"`
2946
2947	FaxNumber *string `json:"fax_number"`
2948
2949	AddressLine1 *string `json:"address_line_1"`
2950
2951	AddressLine2 *string `json:"address_line_2"`
2952
2953	Zip *string `json:"zip"`
2954
2955	City *string `json:"city"`
2956
2957	Country *string `json:"country"`
2958
2959	VatIdentificationCode *string `json:"vat_identification_code"`
2960
2961	CompanyIdentificationCode *string `json:"company_identification_code"`
2962	// Lang:
2963	//
2964	// Default value: unknown_language_code
2965	Lang LanguageCode `json:"lang"`
2966
2967	Resale *bool `json:"resale"`
2968
2969	Questions []*UpdateContactRequestQuestion `json:"questions"`
2970
2971	ExtensionFr *ContactExtensionFR `json:"extension_fr"`
2972
2973	ExtensionEu *ContactExtensionEU `json:"extension_eu"`
2974
2975	WhoisOptIn *bool `json:"whois_opt_in"`
2976}
2977
2978// UpdateContact: update contact
2979//
2980// You can edit the contact coordinates.
2981func (s *RegistrarAPI) UpdateContact(req *RegistrarAPIUpdateContactRequest, opts ...scw.RequestOption) (*Contact, error) {
2982	var err error
2983
2984	if fmt.Sprint(req.ContactID) == "" {
2985		return nil, errors.New("field ContactID cannot be empty in request")
2986	}
2987
2988	scwReq := &scw.ScalewayRequest{
2989		Method:  "PATCH",
2990		Path:    "/domain/v2beta1/contacts/" + fmt.Sprint(req.ContactID) + "",
2991		Headers: http.Header{},
2992	}
2993
2994	err = scwReq.SetBody(req)
2995	if err != nil {
2996		return nil, err
2997	}
2998
2999	var resp Contact
3000
3001	err = s.client.Do(scwReq, &resp, opts...)
3002	if err != nil {
3003		return nil, err
3004	}
3005	return &resp, nil
3006}
3007
3008type RegistrarAPIListDomainsRequest struct {
3009	Page *int32 `json:"-"`
3010
3011	PageSize *uint32 `json:"-"`
3012	// OrderBy:
3013	//
3014	// Default value: domain_asc
3015	OrderBy ListDomainsRequestOrderBy `json:"-"`
3016
3017	Registrar *string `json:"-"`
3018	// Status:
3019	//
3020	// Default value: status_unknown
3021	Status DomainStatus `json:"-"`
3022
3023	ProjectID *string `json:"-"`
3024
3025	OrganizationID *string `json:"-"`
3026
3027	IsExternal *bool `json:"-"`
3028}
3029
3030// ListDomains: list domains
3031//
3032// Returns a list of domains owned by the user.
3033func (s *RegistrarAPI) ListDomains(req *RegistrarAPIListDomainsRequest, opts ...scw.RequestOption) (*ListDomainsResponse, error) {
3034	var err error
3035
3036	defaultPageSize, exist := s.client.GetDefaultPageSize()
3037	if (req.PageSize == nil || *req.PageSize == 0) && exist {
3038		req.PageSize = &defaultPageSize
3039	}
3040
3041	query := url.Values{}
3042	parameter.AddToQuery(query, "page", req.Page)
3043	parameter.AddToQuery(query, "page_size", req.PageSize)
3044	parameter.AddToQuery(query, "order_by", req.OrderBy)
3045	parameter.AddToQuery(query, "registrar", req.Registrar)
3046	parameter.AddToQuery(query, "status", req.Status)
3047	parameter.AddToQuery(query, "project_id", req.ProjectID)
3048	parameter.AddToQuery(query, "organization_id", req.OrganizationID)
3049	parameter.AddToQuery(query, "is_external", req.IsExternal)
3050
3051	scwReq := &scw.ScalewayRequest{
3052		Method:  "GET",
3053		Path:    "/domain/v2beta1/domains",
3054		Query:   query,
3055		Headers: http.Header{},
3056	}
3057
3058	var resp ListDomainsResponse
3059
3060	err = s.client.Do(scwReq, &resp, opts...)
3061	if err != nil {
3062		return nil, err
3063	}
3064	return &resp, nil
3065}
3066
3067// UnsafeGetTotalCount should not be used
3068// Internal usage only
3069func (r *ListDomainsResponse) UnsafeGetTotalCount() uint32 {
3070	return r.TotalCount
3071}
3072
3073// UnsafeAppend should not be used
3074// Internal usage only
3075func (r *ListDomainsResponse) UnsafeAppend(res interface{}) (uint32, error) {
3076	results, ok := res.(*ListDomainsResponse)
3077	if !ok {
3078		return 0, errors.New("%T type cannot be appended to type %T", res, r)
3079	}
3080
3081	r.Domains = append(r.Domains, results.Domains...)
3082	r.TotalCount += uint32(len(results.Domains))
3083	return uint32(len(results.Domains)), nil
3084}
3085
3086type RegistrarAPIGetDomainRequest struct {
3087	Domain string `json:"-"`
3088}
3089
3090// GetDomain: get domain
3091//
3092// Returns a the domain with more informations.
3093func (s *RegistrarAPI) GetDomain(req *RegistrarAPIGetDomainRequest, opts ...scw.RequestOption) (*Domain, error) {
3094	var err error
3095
3096	if fmt.Sprint(req.Domain) == "" {
3097		return nil, errors.New("field Domain cannot be empty in request")
3098	}
3099
3100	scwReq := &scw.ScalewayRequest{
3101		Method:  "GET",
3102		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "",
3103		Headers: http.Header{},
3104	}
3105
3106	var resp Domain
3107
3108	err = s.client.Do(scwReq, &resp, opts...)
3109	if err != nil {
3110		return nil, err
3111	}
3112	return &resp, nil
3113}
3114
3115type RegistrarAPIUpdateDomainRequest struct {
3116	Domain string `json:"-"`
3117
3118	// Precisely one of TechnicalContact, TechnicalContactID must be set.
3119	TechnicalContactID *string `json:"technical_contact_id,omitempty"`
3120
3121	// Precisely one of TechnicalContact, TechnicalContactID must be set.
3122	TechnicalContact *NewContact `json:"technical_contact,omitempty"`
3123
3124	// Precisely one of OwnerContact, OwnerContactID must be set.
3125	OwnerContactID *string `json:"owner_contact_id,omitempty"`
3126
3127	// Precisely one of OwnerContact, OwnerContactID must be set.
3128	OwnerContact *NewContact `json:"owner_contact,omitempty"`
3129
3130	// Precisely one of AdministrativeContact, AdministrativeContactID must be set.
3131	AdministrativeContactID *string `json:"administrative_contact_id,omitempty"`
3132
3133	// Precisely one of AdministrativeContact, AdministrativeContactID must be set.
3134	AdministrativeContact *NewContact `json:"administrative_contact,omitempty"`
3135}
3136
3137// UpdateDomain: update a domain
3138//
3139// Update the domain contacts or create a new one.<br/>
3140// If you add the same contact for multiple roles. Only one ID will be created and used for all of them.
3141//
3142func (s *RegistrarAPI) UpdateDomain(req *RegistrarAPIUpdateDomainRequest, opts ...scw.RequestOption) (*Domain, error) {
3143	var err error
3144
3145	if fmt.Sprint(req.Domain) == "" {
3146		return nil, errors.New("field Domain cannot be empty in request")
3147	}
3148
3149	scwReq := &scw.ScalewayRequest{
3150		Method:  "PATCH",
3151		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "",
3152		Headers: http.Header{},
3153	}
3154
3155	err = scwReq.SetBody(req)
3156	if err != nil {
3157		return nil, err
3158	}
3159
3160	var resp Domain
3161
3162	err = s.client.Do(scwReq, &resp, opts...)
3163	if err != nil {
3164		return nil, err
3165	}
3166	return &resp, nil
3167}
3168
3169type RegistrarAPILockDomainTransferRequest struct {
3170	Domain string `json:"-"`
3171}
3172
3173// LockDomainTransfer: lock domain transfer
3174//
3175// Lock domain transfer. A locked domain transfer can't be transferred and the auth code can't be requested.
3176//
3177func (s *RegistrarAPI) LockDomainTransfer(req *RegistrarAPILockDomainTransferRequest, opts ...scw.RequestOption) (*Domain, error) {
3178	var err error
3179
3180	if fmt.Sprint(req.Domain) == "" {
3181		return nil, errors.New("field Domain cannot be empty in request")
3182	}
3183
3184	scwReq := &scw.ScalewayRequest{
3185		Method:  "POST",
3186		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/lock-transfer",
3187		Headers: http.Header{},
3188	}
3189
3190	err = scwReq.SetBody(req)
3191	if err != nil {
3192		return nil, err
3193	}
3194
3195	var resp Domain
3196
3197	err = s.client.Do(scwReq, &resp, opts...)
3198	if err != nil {
3199		return nil, err
3200	}
3201	return &resp, nil
3202}
3203
3204type RegistrarAPIUnlockDomainTransferRequest struct {
3205	Domain string `json:"-"`
3206}
3207
3208// UnlockDomainTransfer: unlock domain transfer
3209//
3210// Unlock domain transfer. An unlocked domain can be transferred and the auth code can be requested for this.
3211//
3212func (s *RegistrarAPI) UnlockDomainTransfer(req *RegistrarAPIUnlockDomainTransferRequest, opts ...scw.RequestOption) (*Domain, error) {
3213	var err error
3214
3215	if fmt.Sprint(req.Domain) == "" {
3216		return nil, errors.New("field Domain cannot be empty in request")
3217	}
3218
3219	scwReq := &scw.ScalewayRequest{
3220		Method:  "POST",
3221		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/unlock-transfer",
3222		Headers: http.Header{},
3223	}
3224
3225	err = scwReq.SetBody(req)
3226	if err != nil {
3227		return nil, err
3228	}
3229
3230	var resp Domain
3231
3232	err = s.client.Do(scwReq, &resp, opts...)
3233	if err != nil {
3234		return nil, err
3235	}
3236	return &resp, nil
3237}
3238
3239type RegistrarAPIEnableDomainAutoRenewRequest struct {
3240	Domain string `json:"-"`
3241}
3242
3243// EnableDomainAutoRenew: enable domain auto renew
3244func (s *RegistrarAPI) EnableDomainAutoRenew(req *RegistrarAPIEnableDomainAutoRenewRequest, opts ...scw.RequestOption) (*Domain, error) {
3245	var err error
3246
3247	if fmt.Sprint(req.Domain) == "" {
3248		return nil, errors.New("field Domain cannot be empty in request")
3249	}
3250
3251	scwReq := &scw.ScalewayRequest{
3252		Method:  "POST",
3253		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/enable-auto-renew",
3254		Headers: http.Header{},
3255	}
3256
3257	err = scwReq.SetBody(req)
3258	if err != nil {
3259		return nil, err
3260	}
3261
3262	var resp Domain
3263
3264	err = s.client.Do(scwReq, &resp, opts...)
3265	if err != nil {
3266		return nil, err
3267	}
3268	return &resp, nil
3269}
3270
3271type RegistrarAPIDisableDomainAutoRenewRequest struct {
3272	Domain string `json:"-"`
3273}
3274
3275// DisableDomainAutoRenew: disable domain auto renew
3276func (s *RegistrarAPI) DisableDomainAutoRenew(req *RegistrarAPIDisableDomainAutoRenewRequest, opts ...scw.RequestOption) (*Domain, error) {
3277	var err error
3278
3279	if fmt.Sprint(req.Domain) == "" {
3280		return nil, errors.New("field Domain cannot be empty in request")
3281	}
3282
3283	scwReq := &scw.ScalewayRequest{
3284		Method:  "POST",
3285		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/disable-auto-renew",
3286		Headers: http.Header{},
3287	}
3288
3289	err = scwReq.SetBody(req)
3290	if err != nil {
3291		return nil, err
3292	}
3293
3294	var resp Domain
3295
3296	err = s.client.Do(scwReq, &resp, opts...)
3297	if err != nil {
3298		return nil, err
3299	}
3300	return &resp, nil
3301}
3302
3303type RegistrarAPIGetDomainAuthCodeRequest struct {
3304	Domain string `json:"-"`
3305}
3306
3307// GetDomainAuthCode: return domain auth code
3308//
3309// If possible, return the auth code for an unlocked domain transfer, or an error if the domain is locked.
3310// Some TLD may have a different procedure to retrieve the auth code, in that case, the information is given in the message field.
3311//
3312func (s *RegistrarAPI) GetDomainAuthCode(req *RegistrarAPIGetDomainAuthCodeRequest, opts ...scw.RequestOption) (*GetDomainAuthCodeResponse, error) {
3313	var err error
3314
3315	if fmt.Sprint(req.Domain) == "" {
3316		return nil, errors.New("field Domain cannot be empty in request")
3317	}
3318
3319	scwReq := &scw.ScalewayRequest{
3320		Method:  "GET",
3321		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/auth-code",
3322		Headers: http.Header{},
3323	}
3324
3325	var resp GetDomainAuthCodeResponse
3326
3327	err = s.client.Do(scwReq, &resp, opts...)
3328	if err != nil {
3329		return nil, err
3330	}
3331	return &resp, nil
3332}
3333
3334type RegistrarAPIEnableDomainDNSSECRequest struct {
3335	Domain string `json:"-"`
3336
3337	DsRecord *DSRecord `json:"ds_record"`
3338}
3339
3340// EnableDomainDNSSEC: update domain DNSSEC
3341//
3342// If your domain has the default Scaleway NS and uses another registrar, you have to update the DS record manually.
3343// For the algorithm, here are the code numbers for each type:
3344//   - 1: RSAMD5
3345//   - 2: DIFFIE_HELLMAN
3346//   - 3: DSA_SHA1
3347//   - 5: RSA_SHA1
3348//   - 6: DSA_NSEC3_SHA1
3349//   - 7: RSASHA1_NSEC3_SHA1
3350//   - 8: RSASHA256
3351//   - 10: RSASHA512
3352//   - 12: ECC_GOST
3353//   - 13: ECDSAP256SHA256
3354//   - 14: ECDSAP384SHA384
3355//
3356// And for the digest type:
3357//   - 1: SHA_1
3358//   - 2: SHA_256
3359//   - 3: GOST_R_34_11_94
3360//   - 4: SHA_384
3361//
3362func (s *RegistrarAPI) EnableDomainDNSSEC(req *RegistrarAPIEnableDomainDNSSECRequest, opts ...scw.RequestOption) (*Domain, error) {
3363	var err error
3364
3365	if fmt.Sprint(req.Domain) == "" {
3366		return nil, errors.New("field Domain cannot be empty in request")
3367	}
3368
3369	scwReq := &scw.ScalewayRequest{
3370		Method:  "POST",
3371		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/enable-dnssec",
3372		Headers: http.Header{},
3373	}
3374
3375	err = scwReq.SetBody(req)
3376	if err != nil {
3377		return nil, err
3378	}
3379
3380	var resp Domain
3381
3382	err = s.client.Do(scwReq, &resp, opts...)
3383	if err != nil {
3384		return nil, err
3385	}
3386	return &resp, nil
3387}
3388
3389type RegistrarAPIDisableDomainDNSSECRequest struct {
3390	Domain string `json:"-"`
3391}
3392
3393// DisableDomainDNSSEC: disable domain DNSSEC
3394func (s *RegistrarAPI) DisableDomainDNSSEC(req *RegistrarAPIDisableDomainDNSSECRequest, opts ...scw.RequestOption) (*Domain, error) {
3395	var err error
3396
3397	if fmt.Sprint(req.Domain) == "" {
3398		return nil, errors.New("field Domain cannot be empty in request")
3399	}
3400
3401	scwReq := &scw.ScalewayRequest{
3402		Method:  "POST",
3403		Path:    "/domain/v2beta1/domains/" + fmt.Sprint(req.Domain) + "/disable-dnssec",
3404		Headers: http.Header{},
3405	}
3406
3407	err = scwReq.SetBody(req)
3408	if err != nil {
3409		return nil, err
3410	}
3411
3412	var resp Domain
3413
3414	err = s.client.Do(scwReq, &resp, opts...)
3415	if err != nil {
3416		return nil, err
3417	}
3418	return &resp, nil
3419}
3420