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 iot provides methods and message types of the iot v1beta1 API. 5package iot 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: this API allows you to manage IoT hubs and devices 43type API struct { 44 client *scw.Client 45} 46 47// NewAPI returns a API object from a Scaleway client. 48func NewAPI(client *scw.Client) *API { 49 return &API{ 50 client: client, 51 } 52} 53 54type DeviceMessageFiltersPolicy string 55 56const ( 57 // DeviceMessageFiltersPolicyUnknown is [insert doc]. 58 DeviceMessageFiltersPolicyUnknown = DeviceMessageFiltersPolicy("unknown") 59 // DeviceMessageFiltersPolicyAccept is [insert doc]. 60 DeviceMessageFiltersPolicyAccept = DeviceMessageFiltersPolicy("accept") 61 // DeviceMessageFiltersPolicyReject is [insert doc]. 62 DeviceMessageFiltersPolicyReject = DeviceMessageFiltersPolicy("reject") 63) 64 65func (enum DeviceMessageFiltersPolicy) String() string { 66 if enum == "" { 67 // return default value if empty 68 return "unknown" 69 } 70 return string(enum) 71} 72 73func (enum DeviceMessageFiltersPolicy) MarshalJSON() ([]byte, error) { 74 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 75} 76 77func (enum *DeviceMessageFiltersPolicy) UnmarshalJSON(data []byte) error { 78 tmp := "" 79 80 if err := json.Unmarshal(data, &tmp); err != nil { 81 return err 82 } 83 84 *enum = DeviceMessageFiltersPolicy(DeviceMessageFiltersPolicy(tmp).String()) 85 return nil 86} 87 88type DeviceStatus string 89 90const ( 91 // DeviceStatusError is [insert doc]. 92 DeviceStatusError = DeviceStatus("error") 93 // DeviceStatusEnabled is [insert doc]. 94 DeviceStatusEnabled = DeviceStatus("enabled") 95 // DeviceStatusDisabled is [insert doc]. 96 DeviceStatusDisabled = DeviceStatus("disabled") 97) 98 99func (enum DeviceStatus) String() string { 100 if enum == "" { 101 // return default value if empty 102 return "error" 103 } 104 return string(enum) 105} 106 107func (enum DeviceStatus) MarshalJSON() ([]byte, error) { 108 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 109} 110 111func (enum *DeviceStatus) UnmarshalJSON(data []byte) error { 112 tmp := "" 113 114 if err := json.Unmarshal(data, &tmp); err != nil { 115 return err 116 } 117 118 *enum = DeviceStatus(DeviceStatus(tmp).String()) 119 return nil 120} 121 122type HubStatus string 123 124const ( 125 // HubStatusError is [insert doc]. 126 HubStatusError = HubStatus("error") 127 // HubStatusEnabling is [insert doc]. 128 HubStatusEnabling = HubStatus("enabling") 129 // HubStatusReady is [insert doc]. 130 HubStatusReady = HubStatus("ready") 131 // HubStatusDisabling is [insert doc]. 132 HubStatusDisabling = HubStatus("disabling") 133 // HubStatusDisabled is [insert doc]. 134 HubStatusDisabled = HubStatus("disabled") 135) 136 137func (enum HubStatus) String() string { 138 if enum == "" { 139 // return default value if empty 140 return "error" 141 } 142 return string(enum) 143} 144 145func (enum HubStatus) MarshalJSON() ([]byte, error) { 146 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 147} 148 149func (enum *HubStatus) UnmarshalJSON(data []byte) error { 150 tmp := "" 151 152 if err := json.Unmarshal(data, &tmp); err != nil { 153 return err 154 } 155 156 *enum = HubStatus(HubStatus(tmp).String()) 157 return nil 158} 159 160type ListDevicesRequestOrderBy string 161 162const ( 163 // ListDevicesRequestOrderByNameAsc is [insert doc]. 164 ListDevicesRequestOrderByNameAsc = ListDevicesRequestOrderBy("name_asc") 165 // ListDevicesRequestOrderByNameDesc is [insert doc]. 166 ListDevicesRequestOrderByNameDesc = ListDevicesRequestOrderBy("name_desc") 167 // ListDevicesRequestOrderByStatusAsc is [insert doc]. 168 ListDevicesRequestOrderByStatusAsc = ListDevicesRequestOrderBy("status_asc") 169 // ListDevicesRequestOrderByStatusDesc is [insert doc]. 170 ListDevicesRequestOrderByStatusDesc = ListDevicesRequestOrderBy("status_desc") 171 // ListDevicesRequestOrderByHubIDAsc is [insert doc]. 172 ListDevicesRequestOrderByHubIDAsc = ListDevicesRequestOrderBy("hub_id_asc") 173 // ListDevicesRequestOrderByHubIDDesc is [insert doc]. 174 ListDevicesRequestOrderByHubIDDesc = ListDevicesRequestOrderBy("hub_id_desc") 175 // ListDevicesRequestOrderByCreatedAtAsc is [insert doc]. 176 ListDevicesRequestOrderByCreatedAtAsc = ListDevicesRequestOrderBy("created_at_asc") 177 // ListDevicesRequestOrderByCreatedAtDesc is [insert doc]. 178 ListDevicesRequestOrderByCreatedAtDesc = ListDevicesRequestOrderBy("created_at_desc") 179 // ListDevicesRequestOrderByUpdatedAtAsc is [insert doc]. 180 ListDevicesRequestOrderByUpdatedAtAsc = ListDevicesRequestOrderBy("updated_at_asc") 181 // ListDevicesRequestOrderByUpdatedAtDesc is [insert doc]. 182 ListDevicesRequestOrderByUpdatedAtDesc = ListDevicesRequestOrderBy("updated_at_desc") 183 // ListDevicesRequestOrderByAllowInsecureAsc is [insert doc]. 184 ListDevicesRequestOrderByAllowInsecureAsc = ListDevicesRequestOrderBy("allow_insecure_asc") 185 // ListDevicesRequestOrderByAllowInsecureDesc is [insert doc]. 186 ListDevicesRequestOrderByAllowInsecureDesc = ListDevicesRequestOrderBy("allow_insecure_desc") 187) 188 189func (enum ListDevicesRequestOrderBy) String() string { 190 if enum == "" { 191 // return default value if empty 192 return "name_asc" 193 } 194 return string(enum) 195} 196 197func (enum ListDevicesRequestOrderBy) MarshalJSON() ([]byte, error) { 198 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 199} 200 201func (enum *ListDevicesRequestOrderBy) UnmarshalJSON(data []byte) error { 202 tmp := "" 203 204 if err := json.Unmarshal(data, &tmp); err != nil { 205 return err 206 } 207 208 *enum = ListDevicesRequestOrderBy(ListDevicesRequestOrderBy(tmp).String()) 209 return nil 210} 211 212type ListHubsRequestOrderBy string 213 214const ( 215 // ListHubsRequestOrderByNameAsc is [insert doc]. 216 ListHubsRequestOrderByNameAsc = ListHubsRequestOrderBy("name_asc") 217 // ListHubsRequestOrderByNameDesc is [insert doc]. 218 ListHubsRequestOrderByNameDesc = ListHubsRequestOrderBy("name_desc") 219 // ListHubsRequestOrderByStatusAsc is [insert doc]. 220 ListHubsRequestOrderByStatusAsc = ListHubsRequestOrderBy("status_asc") 221 // ListHubsRequestOrderByStatusDesc is [insert doc]. 222 ListHubsRequestOrderByStatusDesc = ListHubsRequestOrderBy("status_desc") 223 // ListHubsRequestOrderByProductPlanAsc is [insert doc]. 224 ListHubsRequestOrderByProductPlanAsc = ListHubsRequestOrderBy("product_plan_asc") 225 // ListHubsRequestOrderByProductPlanDesc is [insert doc]. 226 ListHubsRequestOrderByProductPlanDesc = ListHubsRequestOrderBy("product_plan_desc") 227 // ListHubsRequestOrderByCreatedAtAsc is [insert doc]. 228 ListHubsRequestOrderByCreatedAtAsc = ListHubsRequestOrderBy("created_at_asc") 229 // ListHubsRequestOrderByCreatedAtDesc is [insert doc]. 230 ListHubsRequestOrderByCreatedAtDesc = ListHubsRequestOrderBy("created_at_desc") 231 // ListHubsRequestOrderByUpdatedAtAsc is [insert doc]. 232 ListHubsRequestOrderByUpdatedAtAsc = ListHubsRequestOrderBy("updated_at_asc") 233 // ListHubsRequestOrderByUpdatedAtDesc is [insert doc]. 234 ListHubsRequestOrderByUpdatedAtDesc = ListHubsRequestOrderBy("updated_at_desc") 235) 236 237func (enum ListHubsRequestOrderBy) String() string { 238 if enum == "" { 239 // return default value if empty 240 return "name_asc" 241 } 242 return string(enum) 243} 244 245func (enum ListHubsRequestOrderBy) MarshalJSON() ([]byte, error) { 246 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 247} 248 249func (enum *ListHubsRequestOrderBy) UnmarshalJSON(data []byte) error { 250 tmp := "" 251 252 if err := json.Unmarshal(data, &tmp); err != nil { 253 return err 254 } 255 256 *enum = ListHubsRequestOrderBy(ListHubsRequestOrderBy(tmp).String()) 257 return nil 258} 259 260type ListNetworksRequestOrderBy string 261 262const ( 263 // ListNetworksRequestOrderByNameAsc is [insert doc]. 264 ListNetworksRequestOrderByNameAsc = ListNetworksRequestOrderBy("name_asc") 265 // ListNetworksRequestOrderByNameDesc is [insert doc]. 266 ListNetworksRequestOrderByNameDesc = ListNetworksRequestOrderBy("name_desc") 267 // ListNetworksRequestOrderByTypeAsc is [insert doc]. 268 ListNetworksRequestOrderByTypeAsc = ListNetworksRequestOrderBy("type_asc") 269 // ListNetworksRequestOrderByTypeDesc is [insert doc]. 270 ListNetworksRequestOrderByTypeDesc = ListNetworksRequestOrderBy("type_desc") 271 // ListNetworksRequestOrderByCreatedAtAsc is [insert doc]. 272 ListNetworksRequestOrderByCreatedAtAsc = ListNetworksRequestOrderBy("created_at_asc") 273 // ListNetworksRequestOrderByCreatedAtDesc is [insert doc]. 274 ListNetworksRequestOrderByCreatedAtDesc = ListNetworksRequestOrderBy("created_at_desc") 275) 276 277func (enum ListNetworksRequestOrderBy) String() string { 278 if enum == "" { 279 // return default value if empty 280 return "name_asc" 281 } 282 return string(enum) 283} 284 285func (enum ListNetworksRequestOrderBy) MarshalJSON() ([]byte, error) { 286 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 287} 288 289func (enum *ListNetworksRequestOrderBy) UnmarshalJSON(data []byte) error { 290 tmp := "" 291 292 if err := json.Unmarshal(data, &tmp); err != nil { 293 return err 294 } 295 296 *enum = ListNetworksRequestOrderBy(ListNetworksRequestOrderBy(tmp).String()) 297 return nil 298} 299 300type ListRoutesRequestOrderBy string 301 302const ( 303 // ListRoutesRequestOrderByNameAsc is [insert doc]. 304 ListRoutesRequestOrderByNameAsc = ListRoutesRequestOrderBy("name_asc") 305 // ListRoutesRequestOrderByNameDesc is [insert doc]. 306 ListRoutesRequestOrderByNameDesc = ListRoutesRequestOrderBy("name_desc") 307 // ListRoutesRequestOrderByHubIDAsc is [insert doc]. 308 ListRoutesRequestOrderByHubIDAsc = ListRoutesRequestOrderBy("hub_id_asc") 309 // ListRoutesRequestOrderByHubIDDesc is [insert doc]. 310 ListRoutesRequestOrderByHubIDDesc = ListRoutesRequestOrderBy("hub_id_desc") 311 // ListRoutesRequestOrderByTypeAsc is [insert doc]. 312 ListRoutesRequestOrderByTypeAsc = ListRoutesRequestOrderBy("type_asc") 313 // ListRoutesRequestOrderByTypeDesc is [insert doc]. 314 ListRoutesRequestOrderByTypeDesc = ListRoutesRequestOrderBy("type_desc") 315 // ListRoutesRequestOrderByCreatedAtAsc is [insert doc]. 316 ListRoutesRequestOrderByCreatedAtAsc = ListRoutesRequestOrderBy("created_at_asc") 317 // ListRoutesRequestOrderByCreatedAtDesc is [insert doc]. 318 ListRoutesRequestOrderByCreatedAtDesc = ListRoutesRequestOrderBy("created_at_desc") 319) 320 321func (enum ListRoutesRequestOrderBy) String() string { 322 if enum == "" { 323 // return default value if empty 324 return "name_asc" 325 } 326 return string(enum) 327} 328 329func (enum ListRoutesRequestOrderBy) MarshalJSON() ([]byte, error) { 330 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 331} 332 333func (enum *ListRoutesRequestOrderBy) UnmarshalJSON(data []byte) error { 334 tmp := "" 335 336 if err := json.Unmarshal(data, &tmp); err != nil { 337 return err 338 } 339 340 *enum = ListRoutesRequestOrderBy(ListRoutesRequestOrderBy(tmp).String()) 341 return nil 342} 343 344type MetricsPeriod string 345 346const ( 347 // MetricsPeriodHour is [insert doc]. 348 MetricsPeriodHour = MetricsPeriod("hour") 349 // MetricsPeriodDay is [insert doc]. 350 MetricsPeriodDay = MetricsPeriod("day") 351 // MetricsPeriodWeek is [insert doc]. 352 MetricsPeriodWeek = MetricsPeriod("week") 353 // MetricsPeriodMonth is [insert doc]. 354 MetricsPeriodMonth = MetricsPeriod("month") 355 // MetricsPeriodYear is [insert doc]. 356 MetricsPeriodYear = MetricsPeriod("year") 357) 358 359func (enum MetricsPeriod) String() string { 360 if enum == "" { 361 // return default value if empty 362 return "hour" 363 } 364 return string(enum) 365} 366 367func (enum MetricsPeriod) MarshalJSON() ([]byte, error) { 368 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 369} 370 371func (enum *MetricsPeriod) UnmarshalJSON(data []byte) error { 372 tmp := "" 373 374 if err := json.Unmarshal(data, &tmp); err != nil { 375 return err 376 } 377 378 *enum = MetricsPeriod(MetricsPeriod(tmp).String()) 379 return nil 380} 381 382type NetworkNetworkType string 383 384const ( 385 // NetworkNetworkTypeUnknown is [insert doc]. 386 NetworkNetworkTypeUnknown = NetworkNetworkType("unknown") 387 // NetworkNetworkTypeSigfox is [insert doc]. 388 NetworkNetworkTypeSigfox = NetworkNetworkType("sigfox") 389 // NetworkNetworkTypeRest is [insert doc]. 390 NetworkNetworkTypeRest = NetworkNetworkType("rest") 391) 392 393func (enum NetworkNetworkType) String() string { 394 if enum == "" { 395 // return default value if empty 396 return "unknown" 397 } 398 return string(enum) 399} 400 401func (enum NetworkNetworkType) MarshalJSON() ([]byte, error) { 402 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 403} 404 405func (enum *NetworkNetworkType) UnmarshalJSON(data []byte) error { 406 tmp := "" 407 408 if err := json.Unmarshal(data, &tmp); err != nil { 409 return err 410 } 411 412 *enum = NetworkNetworkType(NetworkNetworkType(tmp).String()) 413 return nil 414} 415 416type ProductPlan string 417 418const ( 419 // ProductPlanPlanUnknown is [insert doc]. 420 ProductPlanPlanUnknown = ProductPlan("plan_unknown") 421 // ProductPlanPlanShared is [insert doc]. 422 ProductPlanPlanShared = ProductPlan("plan_shared") 423 // ProductPlanPlanDedicated is [insert doc]. 424 ProductPlanPlanDedicated = ProductPlan("plan_dedicated") 425 // ProductPlanPlanHa is [insert doc]. 426 ProductPlanPlanHa = ProductPlan("plan_ha") 427) 428 429func (enum ProductPlan) String() string { 430 if enum == "" { 431 // return default value if empty 432 return "plan_unknown" 433 } 434 return string(enum) 435} 436 437func (enum ProductPlan) MarshalJSON() ([]byte, error) { 438 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 439} 440 441func (enum *ProductPlan) UnmarshalJSON(data []byte) error { 442 tmp := "" 443 444 if err := json.Unmarshal(data, &tmp); err != nil { 445 return err 446 } 447 448 *enum = ProductPlan(ProductPlan(tmp).String()) 449 return nil 450} 451 452type RestRouteHTTPVerb string 453 454const ( 455 // RestRouteHTTPVerbGet is [insert doc]. 456 RestRouteHTTPVerbGet = RestRouteHTTPVerb("get") 457 // RestRouteHTTPVerbPost is [insert doc]. 458 RestRouteHTTPVerbPost = RestRouteHTTPVerb("post") 459 // RestRouteHTTPVerbPut is [insert doc]. 460 RestRouteHTTPVerbPut = RestRouteHTTPVerb("put") 461 // RestRouteHTTPVerbPatch is [insert doc]. 462 RestRouteHTTPVerbPatch = RestRouteHTTPVerb("patch") 463 // RestRouteHTTPVerbDelete is [insert doc]. 464 RestRouteHTTPVerbDelete = RestRouteHTTPVerb("delete") 465) 466 467func (enum RestRouteHTTPVerb) String() string { 468 if enum == "" { 469 // return default value if empty 470 return "get" 471 } 472 return string(enum) 473} 474 475func (enum RestRouteHTTPVerb) MarshalJSON() ([]byte, error) { 476 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 477} 478 479func (enum *RestRouteHTTPVerb) UnmarshalJSON(data []byte) error { 480 tmp := "" 481 482 if err := json.Unmarshal(data, &tmp); err != nil { 483 return err 484 } 485 486 *enum = RestRouteHTTPVerb(RestRouteHTTPVerb(tmp).String()) 487 return nil 488} 489 490type RouteRouteType string 491 492const ( 493 // RouteRouteTypeUnknown is [insert doc]. 494 RouteRouteTypeUnknown = RouteRouteType("unknown") 495 // RouteRouteTypeS3 is [insert doc]. 496 RouteRouteTypeS3 = RouteRouteType("s3") 497 // RouteRouteTypeDatabase is [insert doc]. 498 RouteRouteTypeDatabase = RouteRouteType("database") 499 // RouteRouteTypeRest is [insert doc]. 500 RouteRouteTypeRest = RouteRouteType("rest") 501) 502 503func (enum RouteRouteType) String() string { 504 if enum == "" { 505 // return default value if empty 506 return "unknown" 507 } 508 return string(enum) 509} 510 511func (enum RouteRouteType) MarshalJSON() ([]byte, error) { 512 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 513} 514 515func (enum *RouteRouteType) UnmarshalJSON(data []byte) error { 516 tmp := "" 517 518 if err := json.Unmarshal(data, &tmp); err != nil { 519 return err 520 } 521 522 *enum = RouteRouteType(RouteRouteType(tmp).String()) 523 return nil 524} 525 526type S3RouteStrategy string 527 528const ( 529 // S3RouteStrategyPerTopic is [insert doc]. 530 S3RouteStrategyPerTopic = S3RouteStrategy("per_topic") 531 // S3RouteStrategyPerMessage is [insert doc]. 532 S3RouteStrategyPerMessage = S3RouteStrategy("per_message") 533) 534 535func (enum S3RouteStrategy) String() string { 536 if enum == "" { 537 // return default value if empty 538 return "per_topic" 539 } 540 return string(enum) 541} 542 543func (enum S3RouteStrategy) MarshalJSON() ([]byte, error) { 544 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 545} 546 547func (enum *S3RouteStrategy) UnmarshalJSON(data []byte) error { 548 tmp := "" 549 550 if err := json.Unmarshal(data, &tmp); err != nil { 551 return err 552 } 553 554 *enum = S3RouteStrategy(S3RouteStrategy(tmp).String()) 555 return nil 556} 557 558// CreateDeviceResponse: create device response 559type CreateDeviceResponse struct { 560 // Device: created device information 561 Device *Device `json:"device"` 562 // Crt: device certificate 563 Crt string `json:"crt"` 564 // Key: device certificate key 565 Key string `json:"key"` 566} 567 568// CreateNetworkResponse: create network response 569type CreateNetworkResponse struct { 570 // Network: created network 571 Network *Network `json:"network"` 572 // Secret: endpoint Key to keep secret. This cannot be retrieved later 573 Secret string `json:"secret"` 574} 575 576// DatabaseRoute: database route 577type DatabaseRoute struct { 578 // ID: route ID 579 ID string `json:"id"` 580 // Name: route name 581 Name string `json:"name"` 582 // OrganizationID: organization owning the route 583 OrganizationID string `json:"organization_id"` 584 // HubID: ID of the route's hub 585 HubID string `json:"hub_id"` 586 // Topic: topic the route subscribes to (wildcards allowed). It must be a valid MQTT topic and up to 65535 characters 587 Topic string `json:"topic"` 588 // CreatedAt: route creation date 589 CreatedAt *time.Time `json:"created_at"` 590 // Query: SQL query to be executed ($TOPIC and $PAYLOAD variables are available, see documentation) 591 Query string `json:"query"` 592 // Database: database settings 593 Database *DatabaseSettings `json:"database"` 594} 595 596// DatabaseSettings: database settings 597type DatabaseSettings struct { 598 // Host: database host 599 Host string `json:"host"` 600 // Port: database port 601 Port uint32 `json:"port"` 602 // Dbname: database name 603 Dbname string `json:"dbname"` 604 // Username: database username. Make sure this account can execute the provided query 605 Username string `json:"username"` 606 // Password: database password 607 Password string `json:"password"` 608} 609 610// Device: device 611type Device struct { 612 // ID: device ID, also used as MQTT Client ID or Username 613 ID string `json:"id"` 614 // Name: device name 615 Name string `json:"name"` 616 // Status: device status 617 // 618 // Default value: error 619 Status DeviceStatus `json:"status"` 620 // HubID: hub ID 621 HubID string `json:"hub_id"` 622 // LastActivityAt: device last connection/activity date 623 LastActivityAt *time.Time `json:"last_activity_at"` 624 // IsConnected: whether the device is connected to the Hub or not 625 IsConnected bool `json:"is_connected"` 626 // AllowInsecure: whether to allow device to connect without TLS mutual authentication 627 AllowInsecure bool `json:"allow_insecure"` 628 // AllowMultipleConnections: whether to allow multiple physical devices to connect with this device's credentials 629 AllowMultipleConnections bool `json:"allow_multiple_connections"` 630 // MessageFilters: filter-sets to restrict the topics the device can publish/subscribe to 631 MessageFilters *DeviceMessageFilters `json:"message_filters"` 632 // CreatedAt: device add date 633 CreatedAt *time.Time `json:"created_at"` 634 // UpdatedAt: device last modification date 635 UpdatedAt *time.Time `json:"updated_at"` 636 // OrganizationID: organization owning the resource 637 OrganizationID string `json:"organization_id"` 638} 639 640// DeviceMessageFilters: device message filters 641type DeviceMessageFilters struct { 642 // Publish: filter-set to restrict topics the device can publish to 643 Publish *DeviceMessageFiltersMessageFilterSet `json:"publish"` 644 // Subscribe: filter-set to restrict topics the device can subscribe to 645 Subscribe *DeviceMessageFiltersMessageFilterSet `json:"subscribe"` 646} 647 648type DeviceMessageFiltersMessageFilterSet struct { 649 // Policy: 650 // 651 // Default value: unknown 652 Policy DeviceMessageFiltersPolicy `json:"policy"` 653 654 Topics *[]string `json:"topics"` 655} 656 657// Hub: hub 658type Hub struct { 659 // ID: hub ID 660 ID string `json:"id"` 661 // Name: hub name 662 Name string `json:"name"` 663 // Status: current status of the Hub 664 // 665 // Default value: error 666 Status HubStatus `json:"status"` 667 // ProductPlan: hub feature set 668 // 669 // Default value: plan_unknown 670 ProductPlan ProductPlan `json:"product_plan"` 671 // Enabled: whether the hub has been enabled 672 Enabled bool `json:"enabled"` 673 // DeviceCount: number of registered devices 674 DeviceCount uint64 `json:"device_count"` 675 // ConnectedDeviceCount: number of currently connected devices 676 ConnectedDeviceCount uint64 `json:"connected_device_count"` 677 // Endpoint: host to connect your devices to 678 // 679 // Devices should be connected to this host, port may be 1883 (MQTT), 8883 (MQTT over TLS), 80 (MQTT over Websocket) or 443 (MQTT over Websocket over TLS). 680 Endpoint string `json:"endpoint"` 681 // EventsEnabled: wether Hub events are enabled or not 682 EventsEnabled bool `json:"events_enabled"` 683 // EventsTopicPrefix: hub events topic prefix 684 EventsTopicPrefix string `json:"events_topic_prefix"` 685 // Region: region of the Hub 686 Region scw.Region `json:"region"` 687 // CreatedAt: hub creation date 688 CreatedAt *time.Time `json:"created_at"` 689 // UpdatedAt: hub last modification date 690 UpdatedAt *time.Time `json:"updated_at"` 691 // OrganizationID: organization owning the resource 692 OrganizationID string `json:"organization_id"` 693} 694 695// ListDevicesResponse: list devices response 696type ListDevicesResponse struct { 697 // TotalCount: total number of devices 698 TotalCount uint32 `json:"total_count"` 699 // Devices: a page of devices 700 Devices []*Device `json:"devices"` 701} 702 703// ListHubsResponse: list hubs response 704type ListHubsResponse struct { 705 // TotalCount: total number of hubs 706 TotalCount uint32 `json:"total_count"` 707 // Hubs: a page of hubs 708 Hubs []*Hub `json:"hubs"` 709} 710 711// ListNetworksResponse: list networks response 712type ListNetworksResponse struct { 713 // TotalCount: total number of Networks 714 TotalCount uint32 `json:"total_count"` 715 // Networks: a page of networks 716 Networks []*Network `json:"networks"` 717} 718 719// ListRoutesResponse: list routes response 720type ListRoutesResponse struct { 721 // TotalCount: total number of routes 722 TotalCount uint32 `json:"total_count"` 723 // Routes: a page of routes 724 Routes []*Route `json:"routes"` 725} 726 727// Metrics: metrics 728type Metrics struct { 729 // Metrics: metrics for a hub or a device, over the requested period 730 Metrics []*MetricsMetric `json:"metrics"` 731} 732 733// MetricsMetric: metrics. metric 734type MetricsMetric struct { 735 // Name: metric name 736 Name string `json:"name"` 737 // Values: metric values over the selected period 738 Values []*MetricsMetricValue `json:"values"` 739} 740 741// MetricsMetricValue: metrics. metric. value 742type MetricsMetricValue struct { 743 // Time: timestamp for the value 744 Time *time.Time `json:"time"` 745 // Value: numeric value 746 Value int64 `json:"value"` 747} 748 749// Network: network 750type Network struct { 751 // ID: network ID 752 ID string `json:"id"` 753 // Name: network name 754 Name string `json:"name"` 755 // Type: type of network to connect with 756 // 757 // Default value: unknown 758 Type NetworkNetworkType `json:"type"` 759 // Endpoint: endpoint to use for interacting with the network 760 Endpoint string `json:"endpoint"` 761 // HubID: hub ID to connect the Network to 762 HubID string `json:"hub_id"` 763 // CreatedAt: network creation date 764 CreatedAt *time.Time `json:"created_at"` 765 // TopicPrefix: topic prefix for the Network 766 // 767 // This prefix will be prepended to all topics for this Network. 768 TopicPrefix string `json:"topic_prefix"` 769 // Region: region of the Network 770 Region scw.Region `json:"region"` 771 // OrganizationID: organization owning the resource 772 OrganizationID string `json:"organization_id"` 773} 774 775// RestRoute: rest route 776type RestRoute struct { 777 // ID: route ID 778 ID string `json:"id"` 779 // Name: route name 780 Name string `json:"name"` 781 // OrganizationID: organization owning the route 782 OrganizationID string `json:"organization_id"` 783 // HubID: ID of the route's hub 784 HubID string `json:"hub_id"` 785 // Topic: topic the route subscribes to. It must be a valid MQTT topic and up to 65535 characters 786 Topic string `json:"topic"` 787 // CreatedAt: route creation date 788 CreatedAt *time.Time `json:"created_at"` 789 // Verb: HTTP Verb used to call REST URI 790 // 791 // Default value: get 792 Verb RestRouteHTTPVerb `json:"verb"` 793 // URI: URI of the REST endpoint 794 URI string `json:"uri"` 795 // Headers: HTTP call extra headers 796 Headers map[string]string `json:"headers"` 797} 798 799// Route: route 800type Route struct { 801 // ID: route ID 802 ID string `json:"id"` 803 // Name: route name 804 Name string `json:"name"` 805 // OrganizationID: organization owning the resource 806 OrganizationID string `json:"organization_id"` 807 // HubID: ID of the route's hub 808 HubID string `json:"hub_id"` 809 // Topic: topic the route subscribes to. It must be a valid MQTT topic and up to 65535 characters 810 Topic string `json:"topic"` 811 // Type: route type 812 // 813 // Default value: unknown 814 Type RouteRouteType `json:"type"` 815 // CreatedAt: route creation date 816 CreatedAt *time.Time `json:"created_at"` 817} 818 819// S3Route: s3 route 820type S3Route struct { 821 // ID: route ID 822 ID string `json:"id"` 823 // Name: route name 824 Name string `json:"name"` 825 // OrganizationID: organization owning the route 826 OrganizationID string `json:"organization_id"` 827 // HubID: ID of the route's hub 828 HubID string `json:"hub_id"` 829 // Topic: topic the route subscribes to. It must be a valid MQTT topic and up to 65535 characters 830 Topic string `json:"topic"` 831 // CreatedAt: route creation date 832 CreatedAt *time.Time `json:"created_at"` 833 // BucketRegion: region of the S3 route's destination bucket (eg 'fr-par') 834 BucketRegion string `json:"bucket_region"` 835 // BucketName: name of the S3 route's destination bucket 836 BucketName string `json:"bucket_name"` 837 // ObjectPrefix: optional string to prefix object names with 838 ObjectPrefix string `json:"object_prefix"` 839 // Strategy: how the S3 route's objects will be created: one per topic or one per message 840 // 841 // Default value: per_topic 842 Strategy S3RouteStrategy `json:"strategy"` 843} 844 845// Service API 846 847type GetServiceInfoRequest struct { 848 Region scw.Region `json:"-"` 849} 850 851func (s *API) GetServiceInfo(req *GetServiceInfoRequest, opts ...scw.RequestOption) (*scw.ServiceInfo, error) { 852 var err error 853 854 if req.Region == "" { 855 defaultRegion, _ := s.client.GetDefaultRegion() 856 req.Region = defaultRegion 857 } 858 859 if fmt.Sprint(req.Region) == "" { 860 return nil, errors.New("field Region cannot be empty in request") 861 } 862 863 scwReq := &scw.ScalewayRequest{ 864 Method: "GET", 865 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "", 866 Headers: http.Header{}, 867 } 868 869 var resp scw.ServiceInfo 870 871 err = s.client.Do(scwReq, &resp, opts...) 872 if err != nil { 873 return nil, err 874 } 875 return &resp, nil 876} 877 878type ListHubsRequest struct { 879 Region scw.Region `json:"-"` 880 // Page: page number 881 Page *int32 `json:"-"` 882 // PageSize: page size. The maximum value is 100 883 PageSize *uint32 `json:"-"` 884 // OrderBy: ordering of requested hub 885 // 886 // Default value: name_asc 887 OrderBy ListHubsRequestOrderBy `json:"-"` 888 // OrganizationID: filter on the organization 889 OrganizationID *string `json:"-"` 890 // Name: filter on the name 891 Name *string `json:"-"` 892} 893 894// ListHubs: list hubs 895func (s *API) ListHubs(req *ListHubsRequest, opts ...scw.RequestOption) (*ListHubsResponse, error) { 896 var err error 897 898 if req.Region == "" { 899 defaultRegion, _ := s.client.GetDefaultRegion() 900 req.Region = defaultRegion 901 } 902 903 defaultPageSize, exist := s.client.GetDefaultPageSize() 904 if (req.PageSize == nil || *req.PageSize == 0) && exist { 905 req.PageSize = &defaultPageSize 906 } 907 908 query := url.Values{} 909 parameter.AddToQuery(query, "page", req.Page) 910 parameter.AddToQuery(query, "page_size", req.PageSize) 911 parameter.AddToQuery(query, "order_by", req.OrderBy) 912 parameter.AddToQuery(query, "organization_id", req.OrganizationID) 913 parameter.AddToQuery(query, "name", req.Name) 914 915 if fmt.Sprint(req.Region) == "" { 916 return nil, errors.New("field Region cannot be empty in request") 917 } 918 919 scwReq := &scw.ScalewayRequest{ 920 Method: "GET", 921 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/hubs", 922 Query: query, 923 Headers: http.Header{}, 924 } 925 926 var resp ListHubsResponse 927 928 err = s.client.Do(scwReq, &resp, opts...) 929 if err != nil { 930 return nil, err 931 } 932 return &resp, nil 933} 934 935// UnsafeGetTotalCount should not be used 936// Internal usage only 937func (r *ListHubsResponse) UnsafeGetTotalCount() uint32 { 938 return r.TotalCount 939} 940 941// UnsafeAppend should not be used 942// Internal usage only 943func (r *ListHubsResponse) UnsafeAppend(res interface{}) (uint32, error) { 944 results, ok := res.(*ListHubsResponse) 945 if !ok { 946 return 0, errors.New("%T type cannot be appended to type %T", res, r) 947 } 948 949 r.Hubs = append(r.Hubs, results.Hubs...) 950 r.TotalCount += uint32(len(results.Hubs)) 951 return uint32(len(results.Hubs)), nil 952} 953 954type CreateHubRequest struct { 955 Region scw.Region `json:"-"` 956 // Name: hub name (up to 255 characters) 957 Name string `json:"name"` 958 // OrganizationID: organization owning the resource 959 OrganizationID string `json:"organization_id"` 960 // ProductPlan: hub feature set 961 // 962 // Default value: plan_shared 963 ProductPlan ProductPlan `json:"product_plan"` 964 // DisableEvents: disable Hub events (default false) 965 DisableEvents *bool `json:"disable_events"` 966 // EventsTopicPrefix: hub events topic prefix (default '$SCW/events') 967 EventsTopicPrefix *string `json:"events_topic_prefix"` 968} 969 970// CreateHub: create a hub 971func (s *API) CreateHub(req *CreateHubRequest, opts ...scw.RequestOption) (*Hub, error) { 972 var err error 973 974 if req.OrganizationID == "" { 975 defaultOrganizationID, _ := s.client.GetDefaultOrganizationID() 976 req.OrganizationID = defaultOrganizationID 977 } 978 979 if req.Region == "" { 980 defaultRegion, _ := s.client.GetDefaultRegion() 981 req.Region = defaultRegion 982 } 983 984 if req.Name == "" { 985 req.Name = namegenerator.GetRandomName("hub") 986 } 987 988 if fmt.Sprint(req.Region) == "" { 989 return nil, errors.New("field Region cannot be empty in request") 990 } 991 992 scwReq := &scw.ScalewayRequest{ 993 Method: "POST", 994 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/hubs", 995 Headers: http.Header{}, 996 } 997 998 err = scwReq.SetBody(req) 999 if err != nil { 1000 return nil, err 1001 } 1002 1003 var resp Hub 1004 1005 err = s.client.Do(scwReq, &resp, opts...) 1006 if err != nil { 1007 return nil, err 1008 } 1009 return &resp, nil 1010} 1011 1012type GetHubRequest struct { 1013 Region scw.Region `json:"-"` 1014 // HubID: hub ID 1015 HubID string `json:"-"` 1016} 1017 1018// GetHub: get a hub 1019func (s *API) GetHub(req *GetHubRequest, opts ...scw.RequestOption) (*Hub, error) { 1020 var err error 1021 1022 if req.Region == "" { 1023 defaultRegion, _ := s.client.GetDefaultRegion() 1024 req.Region = defaultRegion 1025 } 1026 1027 if fmt.Sprint(req.Region) == "" { 1028 return nil, errors.New("field Region cannot be empty in request") 1029 } 1030 1031 if fmt.Sprint(req.HubID) == "" { 1032 return nil, errors.New("field HubID cannot be empty in request") 1033 } 1034 1035 scwReq := &scw.ScalewayRequest{ 1036 Method: "GET", 1037 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/hubs/" + fmt.Sprint(req.HubID) + "", 1038 Headers: http.Header{}, 1039 } 1040 1041 var resp Hub 1042 1043 err = s.client.Do(scwReq, &resp, opts...) 1044 if err != nil { 1045 return nil, err 1046 } 1047 return &resp, nil 1048} 1049 1050type UpdateHubRequest struct { 1051 Region scw.Region `json:"-"` 1052 // HubID: hub ID 1053 HubID string `json:"-"` 1054 // Name: hub name (up to 255 characters) 1055 Name *string `json:"name"` 1056 // ProductPlan: hub feature set 1057 // 1058 // Default value: plan_unknown 1059 ProductPlan ProductPlan `json:"product_plan"` 1060 // DisableEvents: disable Hub events 1061 DisableEvents *bool `json:"disable_events"` 1062 // EventsTopicPrefix: hub events topic prefix 1063 EventsTopicPrefix *string `json:"events_topic_prefix"` 1064} 1065 1066// UpdateHub: update a hub 1067func (s *API) UpdateHub(req *UpdateHubRequest, opts ...scw.RequestOption) (*Hub, error) { 1068 var err error 1069 1070 if req.Region == "" { 1071 defaultRegion, _ := s.client.GetDefaultRegion() 1072 req.Region = defaultRegion 1073 } 1074 1075 if fmt.Sprint(req.Region) == "" { 1076 return nil, errors.New("field Region cannot be empty in request") 1077 } 1078 1079 if fmt.Sprint(req.HubID) == "" { 1080 return nil, errors.New("field HubID cannot be empty in request") 1081 } 1082 1083 scwReq := &scw.ScalewayRequest{ 1084 Method: "PATCH", 1085 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/hubs/" + fmt.Sprint(req.HubID) + "", 1086 Headers: http.Header{}, 1087 } 1088 1089 err = scwReq.SetBody(req) 1090 if err != nil { 1091 return nil, err 1092 } 1093 1094 var resp Hub 1095 1096 err = s.client.Do(scwReq, &resp, opts...) 1097 if err != nil { 1098 return nil, err 1099 } 1100 return &resp, nil 1101} 1102 1103type EnableHubRequest struct { 1104 Region scw.Region `json:"-"` 1105 // HubID: hub ID 1106 HubID string `json:"-"` 1107} 1108 1109// EnableHub: enable a hub 1110func (s *API) EnableHub(req *EnableHubRequest, opts ...scw.RequestOption) (*Hub, error) { 1111 var err error 1112 1113 if req.Region == "" { 1114 defaultRegion, _ := s.client.GetDefaultRegion() 1115 req.Region = defaultRegion 1116 } 1117 1118 if fmt.Sprint(req.Region) == "" { 1119 return nil, errors.New("field Region cannot be empty in request") 1120 } 1121 1122 if fmt.Sprint(req.HubID) == "" { 1123 return nil, errors.New("field HubID cannot be empty in request") 1124 } 1125 1126 scwReq := &scw.ScalewayRequest{ 1127 Method: "POST", 1128 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/hubs/" + fmt.Sprint(req.HubID) + "/enable", 1129 Headers: http.Header{}, 1130 } 1131 1132 var resp Hub 1133 1134 err = s.client.Do(scwReq, &resp, opts...) 1135 if err != nil { 1136 return nil, err 1137 } 1138 return &resp, nil 1139} 1140 1141type DisableHubRequest struct { 1142 Region scw.Region `json:"-"` 1143 // HubID: hub ID 1144 HubID string `json:"-"` 1145} 1146 1147// DisableHub: disable a hub 1148func (s *API) DisableHub(req *DisableHubRequest, opts ...scw.RequestOption) (*Hub, error) { 1149 var err error 1150 1151 if req.Region == "" { 1152 defaultRegion, _ := s.client.GetDefaultRegion() 1153 req.Region = defaultRegion 1154 } 1155 1156 if fmt.Sprint(req.Region) == "" { 1157 return nil, errors.New("field Region cannot be empty in request") 1158 } 1159 1160 if fmt.Sprint(req.HubID) == "" { 1161 return nil, errors.New("field HubID cannot be empty in request") 1162 } 1163 1164 scwReq := &scw.ScalewayRequest{ 1165 Method: "POST", 1166 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/hubs/" + fmt.Sprint(req.HubID) + "/disable", 1167 Headers: http.Header{}, 1168 } 1169 1170 var resp Hub 1171 1172 err = s.client.Do(scwReq, &resp, opts...) 1173 if err != nil { 1174 return nil, err 1175 } 1176 return &resp, nil 1177} 1178 1179type DeleteHubRequest struct { 1180 Region scw.Region `json:"-"` 1181 // HubID: hub ID 1182 HubID string `json:"-"` 1183 // DeleteDevices: force deletion of devices added to this hub instead of rejecting operation 1184 DeleteDevices *bool `json:"delete_devices"` 1185} 1186 1187// DeleteHub: delete a hub 1188func (s *API) DeleteHub(req *DeleteHubRequest, opts ...scw.RequestOption) error { 1189 var err error 1190 1191 if req.Region == "" { 1192 defaultRegion, _ := s.client.GetDefaultRegion() 1193 req.Region = defaultRegion 1194 } 1195 1196 if fmt.Sprint(req.Region) == "" { 1197 return errors.New("field Region cannot be empty in request") 1198 } 1199 1200 if fmt.Sprint(req.HubID) == "" { 1201 return errors.New("field HubID cannot be empty in request") 1202 } 1203 1204 scwReq := &scw.ScalewayRequest{ 1205 Method: "DELETE", 1206 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/hubs/" + fmt.Sprint(req.HubID) + "", 1207 Headers: http.Header{}, 1208 } 1209 1210 err = scwReq.SetBody(req) 1211 if err != nil { 1212 return err 1213 } 1214 1215 err = s.client.Do(scwReq, nil, opts...) 1216 if err != nil { 1217 return err 1218 } 1219 return nil 1220} 1221 1222type GetHubMetricsRequest struct { 1223 Region scw.Region `json:"-"` 1224 // HubID: hub ID 1225 HubID string `json:"-"` 1226 // Period: period over which the metrics span 1227 // 1228 // Default value: hour 1229 Period MetricsPeriod `json:"-"` 1230} 1231 1232// GetHubMetrics: get a hub's metrics 1233func (s *API) GetHubMetrics(req *GetHubMetricsRequest, opts ...scw.RequestOption) (*Metrics, error) { 1234 var err error 1235 1236 if req.Region == "" { 1237 defaultRegion, _ := s.client.GetDefaultRegion() 1238 req.Region = defaultRegion 1239 } 1240 1241 query := url.Values{} 1242 parameter.AddToQuery(query, "period", req.Period) 1243 1244 if fmt.Sprint(req.Region) == "" { 1245 return nil, errors.New("field Region cannot be empty in request") 1246 } 1247 1248 if fmt.Sprint(req.HubID) == "" { 1249 return nil, errors.New("field HubID cannot be empty in request") 1250 } 1251 1252 scwReq := &scw.ScalewayRequest{ 1253 Method: "GET", 1254 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/hubs/" + fmt.Sprint(req.HubID) + "/metrics", 1255 Query: query, 1256 Headers: http.Header{}, 1257 } 1258 1259 var resp Metrics 1260 1261 err = s.client.Do(scwReq, &resp, opts...) 1262 if err != nil { 1263 return nil, err 1264 } 1265 return &resp, nil 1266} 1267 1268type ListDevicesRequest struct { 1269 Region scw.Region `json:"-"` 1270 // Page: page number 1271 Page *int32 `json:"-"` 1272 // PageSize: page size. The maximum value is 100 1273 PageSize *uint32 `json:"-"` 1274 // OrderBy: ordering of requested devices 1275 // 1276 // Default value: name_asc 1277 OrderBy ListDevicesRequestOrderBy `json:"-"` 1278 // OrganizationID: filter on the organization 1279 OrganizationID *string `json:"-"` 1280 // Name: filter on the name 1281 Name *string `json:"-"` 1282 // HubID: filter on the hub 1283 HubID *string `json:"-"` 1284 // Deprecated: Enabled: deprecated, ignored filter 1285 Enabled *bool `json:"-"` 1286 // AllowInsecure: filter on the allow_insecure flag 1287 AllowInsecure *bool `json:"-"` 1288 // Deprecated: IsConnected: deprecated, ignored filter 1289 IsConnected *bool `json:"-"` 1290} 1291 1292// ListDevices: list devices 1293func (s *API) ListDevices(req *ListDevicesRequest, opts ...scw.RequestOption) (*ListDevicesResponse, error) { 1294 var err error 1295 1296 if req.Region == "" { 1297 defaultRegion, _ := s.client.GetDefaultRegion() 1298 req.Region = defaultRegion 1299 } 1300 1301 defaultPageSize, exist := s.client.GetDefaultPageSize() 1302 if (req.PageSize == nil || *req.PageSize == 0) && exist { 1303 req.PageSize = &defaultPageSize 1304 } 1305 1306 query := url.Values{} 1307 parameter.AddToQuery(query, "page", req.Page) 1308 parameter.AddToQuery(query, "page_size", req.PageSize) 1309 parameter.AddToQuery(query, "order_by", req.OrderBy) 1310 parameter.AddToQuery(query, "organization_id", req.OrganizationID) 1311 parameter.AddToQuery(query, "name", req.Name) 1312 parameter.AddToQuery(query, "hub_id", req.HubID) 1313 parameter.AddToQuery(query, "enabled", req.Enabled) 1314 parameter.AddToQuery(query, "allow_insecure", req.AllowInsecure) 1315 parameter.AddToQuery(query, "is_connected", req.IsConnected) 1316 1317 if fmt.Sprint(req.Region) == "" { 1318 return nil, errors.New("field Region cannot be empty in request") 1319 } 1320 1321 scwReq := &scw.ScalewayRequest{ 1322 Method: "GET", 1323 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/devices", 1324 Query: query, 1325 Headers: http.Header{}, 1326 } 1327 1328 var resp ListDevicesResponse 1329 1330 err = s.client.Do(scwReq, &resp, opts...) 1331 if err != nil { 1332 return nil, err 1333 } 1334 return &resp, nil 1335} 1336 1337// UnsafeGetTotalCount should not be used 1338// Internal usage only 1339func (r *ListDevicesResponse) UnsafeGetTotalCount() uint32 { 1340 return r.TotalCount 1341} 1342 1343// UnsafeAppend should not be used 1344// Internal usage only 1345func (r *ListDevicesResponse) UnsafeAppend(res interface{}) (uint32, error) { 1346 results, ok := res.(*ListDevicesResponse) 1347 if !ok { 1348 return 0, errors.New("%T type cannot be appended to type %T", res, r) 1349 } 1350 1351 r.Devices = append(r.Devices, results.Devices...) 1352 r.TotalCount += uint32(len(results.Devices)) 1353 return uint32(len(results.Devices)), nil 1354} 1355 1356type CreateDeviceRequest struct { 1357 Region scw.Region `json:"-"` 1358 // Name: device name 1359 Name string `json:"name"` 1360 // HubID: ID of the device's hub 1361 HubID string `json:"hub_id"` 1362 // AllowInsecure: allow plain and server-authenticated SSL connections in addition to mutually-authenticated ones 1363 AllowInsecure bool `json:"allow_insecure"` 1364 // AllowMultipleConnections: allow multiple physical devices to connect with this device's credentials 1365 AllowMultipleConnections bool `json:"allow_multiple_connections"` 1366 // MessageFilters: filter-sets to authorize or deny the device to publish/subscribe to specific topics 1367 MessageFilters *DeviceMessageFilters `json:"message_filters"` 1368} 1369 1370// CreateDevice: add a device 1371func (s *API) CreateDevice(req *CreateDeviceRequest, opts ...scw.RequestOption) (*CreateDeviceResponse, error) { 1372 var err error 1373 1374 if req.Region == "" { 1375 defaultRegion, _ := s.client.GetDefaultRegion() 1376 req.Region = defaultRegion 1377 } 1378 1379 if req.Name == "" { 1380 req.Name = namegenerator.GetRandomName("device") 1381 } 1382 1383 if fmt.Sprint(req.Region) == "" { 1384 return nil, errors.New("field Region cannot be empty in request") 1385 } 1386 1387 scwReq := &scw.ScalewayRequest{ 1388 Method: "POST", 1389 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/devices", 1390 Headers: http.Header{}, 1391 } 1392 1393 err = scwReq.SetBody(req) 1394 if err != nil { 1395 return nil, err 1396 } 1397 1398 var resp CreateDeviceResponse 1399 1400 err = s.client.Do(scwReq, &resp, opts...) 1401 if err != nil { 1402 return nil, err 1403 } 1404 return &resp, nil 1405} 1406 1407type GetDeviceRequest struct { 1408 Region scw.Region `json:"-"` 1409 // DeviceID: device ID 1410 DeviceID string `json:"-"` 1411} 1412 1413// GetDevice: get a device 1414func (s *API) GetDevice(req *GetDeviceRequest, opts ...scw.RequestOption) (*Device, error) { 1415 var err error 1416 1417 if req.Region == "" { 1418 defaultRegion, _ := s.client.GetDefaultRegion() 1419 req.Region = defaultRegion 1420 } 1421 1422 if fmt.Sprint(req.Region) == "" { 1423 return nil, errors.New("field Region cannot be empty in request") 1424 } 1425 1426 if fmt.Sprint(req.DeviceID) == "" { 1427 return nil, errors.New("field DeviceID cannot be empty in request") 1428 } 1429 1430 scwReq := &scw.ScalewayRequest{ 1431 Method: "GET", 1432 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/devices/" + fmt.Sprint(req.DeviceID) + "", 1433 Headers: http.Header{}, 1434 } 1435 1436 var resp Device 1437 1438 err = s.client.Do(scwReq, &resp, opts...) 1439 if err != nil { 1440 return nil, err 1441 } 1442 return &resp, nil 1443} 1444 1445type UpdateDeviceRequest struct { 1446 Region scw.Region `json:"-"` 1447 // DeviceID: device ID 1448 DeviceID string `json:"-"` 1449 // Name: device name 1450 Name *string `json:"name"` 1451 // AllowInsecure: allow plain and server-authenticated SSL connections in addition to mutually-authenticated ones 1452 AllowInsecure *bool `json:"allow_insecure"` 1453 // AllowMultipleConnections: allow multiple physical devices to connect with this device's credentials 1454 AllowMultipleConnections *bool `json:"allow_multiple_connections"` 1455 // MessageFilters: filter-sets to restrict the topics the device can publish/subscribe to 1456 MessageFilters *DeviceMessageFilters `json:"message_filters"` 1457 // HubID: change Hub for this device, additional fees may apply, see IoT Hub pricing 1458 HubID *string `json:"hub_id"` 1459} 1460 1461// UpdateDevice: update a device 1462func (s *API) UpdateDevice(req *UpdateDeviceRequest, opts ...scw.RequestOption) (*Device, error) { 1463 var err error 1464 1465 if req.Region == "" { 1466 defaultRegion, _ := s.client.GetDefaultRegion() 1467 req.Region = defaultRegion 1468 } 1469 1470 if fmt.Sprint(req.Region) == "" { 1471 return nil, errors.New("field Region cannot be empty in request") 1472 } 1473 1474 if fmt.Sprint(req.DeviceID) == "" { 1475 return nil, errors.New("field DeviceID cannot be empty in request") 1476 } 1477 1478 scwReq := &scw.ScalewayRequest{ 1479 Method: "PATCH", 1480 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/devices/" + fmt.Sprint(req.DeviceID) + "", 1481 Headers: http.Header{}, 1482 } 1483 1484 err = scwReq.SetBody(req) 1485 if err != nil { 1486 return nil, err 1487 } 1488 1489 var resp Device 1490 1491 err = s.client.Do(scwReq, &resp, opts...) 1492 if err != nil { 1493 return nil, err 1494 } 1495 return &resp, nil 1496} 1497 1498type EnableDeviceRequest struct { 1499 Region scw.Region `json:"-"` 1500 // DeviceID: device ID 1501 DeviceID string `json:"-"` 1502} 1503 1504// EnableDevice: enable a device 1505func (s *API) EnableDevice(req *EnableDeviceRequest, opts ...scw.RequestOption) (*Device, error) { 1506 var err error 1507 1508 if req.Region == "" { 1509 defaultRegion, _ := s.client.GetDefaultRegion() 1510 req.Region = defaultRegion 1511 } 1512 1513 if fmt.Sprint(req.Region) == "" { 1514 return nil, errors.New("field Region cannot be empty in request") 1515 } 1516 1517 if fmt.Sprint(req.DeviceID) == "" { 1518 return nil, errors.New("field DeviceID cannot be empty in request") 1519 } 1520 1521 scwReq := &scw.ScalewayRequest{ 1522 Method: "POST", 1523 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/devices/" + fmt.Sprint(req.DeviceID) + "/enable", 1524 Headers: http.Header{}, 1525 } 1526 1527 var resp Device 1528 1529 err = s.client.Do(scwReq, &resp, opts...) 1530 if err != nil { 1531 return nil, err 1532 } 1533 return &resp, nil 1534} 1535 1536type DisableDeviceRequest struct { 1537 Region scw.Region `json:"-"` 1538 // DeviceID: device ID 1539 DeviceID string `json:"-"` 1540} 1541 1542// DisableDevice: disable a device 1543func (s *API) DisableDevice(req *DisableDeviceRequest, opts ...scw.RequestOption) (*Device, error) { 1544 var err error 1545 1546 if req.Region == "" { 1547 defaultRegion, _ := s.client.GetDefaultRegion() 1548 req.Region = defaultRegion 1549 } 1550 1551 if fmt.Sprint(req.Region) == "" { 1552 return nil, errors.New("field Region cannot be empty in request") 1553 } 1554 1555 if fmt.Sprint(req.DeviceID) == "" { 1556 return nil, errors.New("field DeviceID cannot be empty in request") 1557 } 1558 1559 scwReq := &scw.ScalewayRequest{ 1560 Method: "POST", 1561 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/devices/" + fmt.Sprint(req.DeviceID) + "/disable", 1562 Headers: http.Header{}, 1563 } 1564 1565 var resp Device 1566 1567 err = s.client.Do(scwReq, &resp, opts...) 1568 if err != nil { 1569 return nil, err 1570 } 1571 return &resp, nil 1572} 1573 1574type DeleteDeviceRequest struct { 1575 Region scw.Region `json:"-"` 1576 // DeviceID: device ID 1577 DeviceID string `json:"-"` 1578} 1579 1580// DeleteDevice: remove a device 1581func (s *API) DeleteDevice(req *DeleteDeviceRequest, opts ...scw.RequestOption) error { 1582 var err error 1583 1584 if req.Region == "" { 1585 defaultRegion, _ := s.client.GetDefaultRegion() 1586 req.Region = defaultRegion 1587 } 1588 1589 if fmt.Sprint(req.Region) == "" { 1590 return errors.New("field Region cannot be empty in request") 1591 } 1592 1593 if fmt.Sprint(req.DeviceID) == "" { 1594 return errors.New("field DeviceID cannot be empty in request") 1595 } 1596 1597 scwReq := &scw.ScalewayRequest{ 1598 Method: "DELETE", 1599 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/devices/" + fmt.Sprint(req.DeviceID) + "", 1600 Headers: http.Header{}, 1601 } 1602 1603 err = s.client.Do(scwReq, nil, opts...) 1604 if err != nil { 1605 return err 1606 } 1607 return nil 1608} 1609 1610type GetDeviceMetricsRequest struct { 1611 Region scw.Region `json:"-"` 1612 // DeviceID: device ID 1613 DeviceID string `json:"-"` 1614 // Period: period over which the metrics span 1615 // 1616 // Default value: hour 1617 Period MetricsPeriod `json:"-"` 1618} 1619 1620// GetDeviceMetrics: get a device's metrics 1621func (s *API) GetDeviceMetrics(req *GetDeviceMetricsRequest, opts ...scw.RequestOption) (*Metrics, error) { 1622 var err error 1623 1624 if req.Region == "" { 1625 defaultRegion, _ := s.client.GetDefaultRegion() 1626 req.Region = defaultRegion 1627 } 1628 1629 query := url.Values{} 1630 parameter.AddToQuery(query, "period", req.Period) 1631 1632 if fmt.Sprint(req.Region) == "" { 1633 return nil, errors.New("field Region cannot be empty in request") 1634 } 1635 1636 if fmt.Sprint(req.DeviceID) == "" { 1637 return nil, errors.New("field DeviceID cannot be empty in request") 1638 } 1639 1640 scwReq := &scw.ScalewayRequest{ 1641 Method: "GET", 1642 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/devices/" + fmt.Sprint(req.DeviceID) + "/metrics", 1643 Query: query, 1644 Headers: http.Header{}, 1645 } 1646 1647 var resp Metrics 1648 1649 err = s.client.Do(scwReq, &resp, opts...) 1650 if err != nil { 1651 return nil, err 1652 } 1653 return &resp, nil 1654} 1655 1656type ListRoutesRequest struct { 1657 Region scw.Region `json:"-"` 1658 // Page: page number 1659 Page *int32 `json:"-"` 1660 // PageSize: page size. The maximum value is 100 1661 PageSize *uint32 `json:"-"` 1662 // OrderBy: ordering of requested routes 1663 // 1664 // Default value: name_asc 1665 OrderBy ListRoutesRequestOrderBy `json:"-"` 1666 // OrganizationID: filter on the organization 1667 OrganizationID *string `json:"-"` 1668 // HubID: filter on the hub 1669 HubID *string `json:"-"` 1670 // Name: filter on route's name 1671 Name *string `json:"-"` 1672} 1673 1674// ListRoutes: list routes 1675func (s *API) ListRoutes(req *ListRoutesRequest, opts ...scw.RequestOption) (*ListRoutesResponse, error) { 1676 var err error 1677 1678 if req.Region == "" { 1679 defaultRegion, _ := s.client.GetDefaultRegion() 1680 req.Region = defaultRegion 1681 } 1682 1683 defaultPageSize, exist := s.client.GetDefaultPageSize() 1684 if (req.PageSize == nil || *req.PageSize == 0) && exist { 1685 req.PageSize = &defaultPageSize 1686 } 1687 1688 query := url.Values{} 1689 parameter.AddToQuery(query, "page", req.Page) 1690 parameter.AddToQuery(query, "page_size", req.PageSize) 1691 parameter.AddToQuery(query, "order_by", req.OrderBy) 1692 parameter.AddToQuery(query, "organization_id", req.OrganizationID) 1693 parameter.AddToQuery(query, "hub_id", req.HubID) 1694 parameter.AddToQuery(query, "name", req.Name) 1695 1696 if fmt.Sprint(req.Region) == "" { 1697 return nil, errors.New("field Region cannot be empty in request") 1698 } 1699 1700 scwReq := &scw.ScalewayRequest{ 1701 Method: "GET", 1702 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes", 1703 Query: query, 1704 Headers: http.Header{}, 1705 } 1706 1707 var resp ListRoutesResponse 1708 1709 err = s.client.Do(scwReq, &resp, opts...) 1710 if err != nil { 1711 return nil, err 1712 } 1713 return &resp, nil 1714} 1715 1716// UnsafeGetTotalCount should not be used 1717// Internal usage only 1718func (r *ListRoutesResponse) UnsafeGetTotalCount() uint32 { 1719 return r.TotalCount 1720} 1721 1722// UnsafeAppend should not be used 1723// Internal usage only 1724func (r *ListRoutesResponse) UnsafeAppend(res interface{}) (uint32, error) { 1725 results, ok := res.(*ListRoutesResponse) 1726 if !ok { 1727 return 0, errors.New("%T type cannot be appended to type %T", res, r) 1728 } 1729 1730 r.Routes = append(r.Routes, results.Routes...) 1731 r.TotalCount += uint32(len(results.Routes)) 1732 return uint32(len(results.Routes)), nil 1733} 1734 1735type CreateS3RouteRequest struct { 1736 Region scw.Region `json:"-"` 1737 // Name: name of the route 1738 Name string `json:"name"` 1739 // HubID: ID of the route's hub 1740 HubID string `json:"hub_id"` 1741 // Topic: topic the route subscribes to. It must be a valid MQTT topic and up to 65535 characters 1742 Topic string `json:"topic"` 1743 // BucketRegion: region of the S3 route's destination bucket (eg 'fr-par') 1744 BucketRegion string `json:"bucket_region"` 1745 // BucketName: name of the S3 route's destination bucket 1746 BucketName string `json:"bucket_name"` 1747 // ObjectPrefix: optional string to prefix object names with 1748 ObjectPrefix string `json:"object_prefix"` 1749 // Strategy: how the S3 route's objects will be created: one per topic or one per message 1750 // 1751 // Default value: per_topic 1752 Strategy S3RouteStrategy `json:"strategy"` 1753} 1754 1755// CreateS3Route: create an S3 route 1756// 1757// Create a route that will put subscribed MQTT messages into an S3 bucket. 1758// You need to create the bucket yourself and grant us write access: 1759// ```bash 1760// > s3cmd setacl s3://<my-bucket> --acl-grant=write:555c69c3-87d0-4bf8-80f1-99a2f757d031:555c69c3-87d0-4bf8-80f1-99a2f757d031 1761// ``` 1762// 1763func (s *API) CreateS3Route(req *CreateS3RouteRequest, opts ...scw.RequestOption) (*S3Route, error) { 1764 var err error 1765 1766 if req.Region == "" { 1767 defaultRegion, _ := s.client.GetDefaultRegion() 1768 req.Region = defaultRegion 1769 } 1770 1771 if fmt.Sprint(req.Region) == "" { 1772 return nil, errors.New("field Region cannot be empty in request") 1773 } 1774 1775 scwReq := &scw.ScalewayRequest{ 1776 Method: "POST", 1777 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/s3", 1778 Headers: http.Header{}, 1779 } 1780 1781 err = scwReq.SetBody(req) 1782 if err != nil { 1783 return nil, err 1784 } 1785 1786 var resp S3Route 1787 1788 err = s.client.Do(scwReq, &resp, opts...) 1789 if err != nil { 1790 return nil, err 1791 } 1792 return &resp, nil 1793} 1794 1795type GetS3RouteRequest struct { 1796 Region scw.Region `json:"-"` 1797 // RouteID: route ID 1798 RouteID string `json:"-"` 1799} 1800 1801// GetS3Route: get an S3 route 1802func (s *API) GetS3Route(req *GetS3RouteRequest, opts ...scw.RequestOption) (*S3Route, error) { 1803 var err error 1804 1805 if req.Region == "" { 1806 defaultRegion, _ := s.client.GetDefaultRegion() 1807 req.Region = defaultRegion 1808 } 1809 1810 if fmt.Sprint(req.Region) == "" { 1811 return nil, errors.New("field Region cannot be empty in request") 1812 } 1813 1814 if fmt.Sprint(req.RouteID) == "" { 1815 return nil, errors.New("field RouteID cannot be empty in request") 1816 } 1817 1818 scwReq := &scw.ScalewayRequest{ 1819 Method: "GET", 1820 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/s3/" + fmt.Sprint(req.RouteID) + "", 1821 Headers: http.Header{}, 1822 } 1823 1824 var resp S3Route 1825 1826 err = s.client.Do(scwReq, &resp, opts...) 1827 if err != nil { 1828 return nil, err 1829 } 1830 return &resp, nil 1831} 1832 1833type DeleteS3RouteRequest struct { 1834 Region scw.Region `json:"-"` 1835 // RouteID: route ID 1836 RouteID string `json:"-"` 1837} 1838 1839// DeleteS3Route: delete an S3 route 1840func (s *API) DeleteS3Route(req *DeleteS3RouteRequest, opts ...scw.RequestOption) error { 1841 var err error 1842 1843 if req.Region == "" { 1844 defaultRegion, _ := s.client.GetDefaultRegion() 1845 req.Region = defaultRegion 1846 } 1847 1848 if fmt.Sprint(req.Region) == "" { 1849 return errors.New("field Region cannot be empty in request") 1850 } 1851 1852 if fmt.Sprint(req.RouteID) == "" { 1853 return errors.New("field RouteID cannot be empty in request") 1854 } 1855 1856 scwReq := &scw.ScalewayRequest{ 1857 Method: "DELETE", 1858 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/s3/" + fmt.Sprint(req.RouteID) + "", 1859 Headers: http.Header{}, 1860 } 1861 1862 err = s.client.Do(scwReq, nil, opts...) 1863 if err != nil { 1864 return err 1865 } 1866 return nil 1867} 1868 1869type CreateDatabaseRouteRequest struct { 1870 Region scw.Region `json:"-"` 1871 // Name: name of the route 1872 Name string `json:"name"` 1873 // HubID: ID of the route's hub 1874 HubID string `json:"hub_id"` 1875 // Topic: topic the route subscribes to (wildcards allowed). It must be a valid MQTT topic and up to 65535 characters 1876 Topic string `json:"topic"` 1877 // Query: SQL query to be executed ($TOPIC and $PAYLOAD variables are available, see documentation) 1878 Query string `json:"query"` 1879 // Database: database settings 1880 Database *DatabaseSettings `json:"database"` 1881} 1882 1883// CreateDatabaseRoute: create a Database route 1884// 1885// Create a route that will record subscribed MQTT messages into your database. 1886// <b>You need to manage the database by yourself</b>. 1887// 1888func (s *API) CreateDatabaseRoute(req *CreateDatabaseRouteRequest, opts ...scw.RequestOption) (*DatabaseRoute, error) { 1889 var err error 1890 1891 if req.Region == "" { 1892 defaultRegion, _ := s.client.GetDefaultRegion() 1893 req.Region = defaultRegion 1894 } 1895 1896 if fmt.Sprint(req.Region) == "" { 1897 return nil, errors.New("field Region cannot be empty in request") 1898 } 1899 1900 scwReq := &scw.ScalewayRequest{ 1901 Method: "POST", 1902 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/database", 1903 Headers: http.Header{}, 1904 } 1905 1906 err = scwReq.SetBody(req) 1907 if err != nil { 1908 return nil, err 1909 } 1910 1911 var resp DatabaseRoute 1912 1913 err = s.client.Do(scwReq, &resp, opts...) 1914 if err != nil { 1915 return nil, err 1916 } 1917 return &resp, nil 1918} 1919 1920type GetDatabaseRouteRequest struct { 1921 Region scw.Region `json:"-"` 1922 // RouteID: route ID 1923 RouteID string `json:"-"` 1924} 1925 1926// GetDatabaseRoute: get a Database route 1927func (s *API) GetDatabaseRoute(req *GetDatabaseRouteRequest, opts ...scw.RequestOption) (*DatabaseRoute, error) { 1928 var err error 1929 1930 if req.Region == "" { 1931 defaultRegion, _ := s.client.GetDefaultRegion() 1932 req.Region = defaultRegion 1933 } 1934 1935 if fmt.Sprint(req.Region) == "" { 1936 return nil, errors.New("field Region cannot be empty in request") 1937 } 1938 1939 if fmt.Sprint(req.RouteID) == "" { 1940 return nil, errors.New("field RouteID cannot be empty in request") 1941 } 1942 1943 scwReq := &scw.ScalewayRequest{ 1944 Method: "GET", 1945 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/database/" + fmt.Sprint(req.RouteID) + "", 1946 Headers: http.Header{}, 1947 } 1948 1949 var resp DatabaseRoute 1950 1951 err = s.client.Do(scwReq, &resp, opts...) 1952 if err != nil { 1953 return nil, err 1954 } 1955 return &resp, nil 1956} 1957 1958type DeleteDatabaseRouteRequest struct { 1959 Region scw.Region `json:"-"` 1960 // RouteID: route ID 1961 RouteID string `json:"-"` 1962} 1963 1964// DeleteDatabaseRoute: delete a Database route 1965func (s *API) DeleteDatabaseRoute(req *DeleteDatabaseRouteRequest, opts ...scw.RequestOption) error { 1966 var err error 1967 1968 if req.Region == "" { 1969 defaultRegion, _ := s.client.GetDefaultRegion() 1970 req.Region = defaultRegion 1971 } 1972 1973 if fmt.Sprint(req.Region) == "" { 1974 return errors.New("field Region cannot be empty in request") 1975 } 1976 1977 if fmt.Sprint(req.RouteID) == "" { 1978 return errors.New("field RouteID cannot be empty in request") 1979 } 1980 1981 scwReq := &scw.ScalewayRequest{ 1982 Method: "DELETE", 1983 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/database/" + fmt.Sprint(req.RouteID) + "", 1984 Headers: http.Header{}, 1985 } 1986 1987 err = s.client.Do(scwReq, nil, opts...) 1988 if err != nil { 1989 return err 1990 } 1991 return nil 1992} 1993 1994type CreateRestRouteRequest struct { 1995 Region scw.Region `json:"-"` 1996 // Name: name of the route 1997 Name string `json:"name"` 1998 // HubID: ID of the route's hub 1999 HubID string `json:"hub_id"` 2000 // Topic: topic the route subscribes to. It must be a valid MQTT topic and up to 65535 characters 2001 Topic string `json:"topic"` 2002 // Verb: HTTP Verb used to call REST URI 2003 // 2004 // Default value: get 2005 Verb RestRouteHTTPVerb `json:"verb"` 2006 // URI: URI of the REST endpoint 2007 URI string `json:"uri"` 2008 // Headers: HTTP call extra headers 2009 Headers map[string]string `json:"headers"` 2010} 2011 2012// CreateRestRoute: create a Rest route 2013// 2014// Create a route that will call a REST API on received subscribed MQTT messages. 2015// 2016func (s *API) CreateRestRoute(req *CreateRestRouteRequest, opts ...scw.RequestOption) (*RestRoute, error) { 2017 var err error 2018 2019 if req.Region == "" { 2020 defaultRegion, _ := s.client.GetDefaultRegion() 2021 req.Region = defaultRegion 2022 } 2023 2024 if fmt.Sprint(req.Region) == "" { 2025 return nil, errors.New("field Region cannot be empty in request") 2026 } 2027 2028 scwReq := &scw.ScalewayRequest{ 2029 Method: "POST", 2030 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/rest", 2031 Headers: http.Header{}, 2032 } 2033 2034 err = scwReq.SetBody(req) 2035 if err != nil { 2036 return nil, err 2037 } 2038 2039 var resp RestRoute 2040 2041 err = s.client.Do(scwReq, &resp, opts...) 2042 if err != nil { 2043 return nil, err 2044 } 2045 return &resp, nil 2046} 2047 2048type GetRestRouteRequest struct { 2049 Region scw.Region `json:"-"` 2050 // RouteID: route ID 2051 RouteID string `json:"-"` 2052} 2053 2054// GetRestRoute: get a Rest route 2055func (s *API) GetRestRoute(req *GetRestRouteRequest, opts ...scw.RequestOption) (*RestRoute, error) { 2056 var err error 2057 2058 if req.Region == "" { 2059 defaultRegion, _ := s.client.GetDefaultRegion() 2060 req.Region = defaultRegion 2061 } 2062 2063 if fmt.Sprint(req.Region) == "" { 2064 return nil, errors.New("field Region cannot be empty in request") 2065 } 2066 2067 if fmt.Sprint(req.RouteID) == "" { 2068 return nil, errors.New("field RouteID cannot be empty in request") 2069 } 2070 2071 scwReq := &scw.ScalewayRequest{ 2072 Method: "GET", 2073 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/rest/" + fmt.Sprint(req.RouteID) + "", 2074 Headers: http.Header{}, 2075 } 2076 2077 var resp RestRoute 2078 2079 err = s.client.Do(scwReq, &resp, opts...) 2080 if err != nil { 2081 return nil, err 2082 } 2083 return &resp, nil 2084} 2085 2086type DeleteRestRouteRequest struct { 2087 Region scw.Region `json:"-"` 2088 // RouteID: route ID 2089 RouteID string `json:"-"` 2090} 2091 2092// DeleteRestRoute: delete a Rest route 2093func (s *API) DeleteRestRoute(req *DeleteRestRouteRequest, opts ...scw.RequestOption) error { 2094 var err error 2095 2096 if req.Region == "" { 2097 defaultRegion, _ := s.client.GetDefaultRegion() 2098 req.Region = defaultRegion 2099 } 2100 2101 if fmt.Sprint(req.Region) == "" { 2102 return errors.New("field Region cannot be empty in request") 2103 } 2104 2105 if fmt.Sprint(req.RouteID) == "" { 2106 return errors.New("field RouteID cannot be empty in request") 2107 } 2108 2109 scwReq := &scw.ScalewayRequest{ 2110 Method: "DELETE", 2111 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/routes/rest/" + fmt.Sprint(req.RouteID) + "", 2112 Headers: http.Header{}, 2113 } 2114 2115 err = s.client.Do(scwReq, nil, opts...) 2116 if err != nil { 2117 return err 2118 } 2119 return nil 2120} 2121 2122type ListNetworksRequest struct { 2123 Region scw.Region `json:"-"` 2124 // Page: page number 2125 Page *int32 `json:"-"` 2126 // PageSize: page size. The maximum value is 100 2127 PageSize *uint32 `json:"-"` 2128 // OrderBy: ordering of requested routes 2129 // 2130 // Default value: name_asc 2131 OrderBy ListNetworksRequestOrderBy `json:"-"` 2132 // OrganizationID: filter on the organization 2133 OrganizationID *string `json:"-"` 2134 // Name: filter on Network name 2135 Name *string `json:"-"` 2136 // HubID: filter on the hub 2137 HubID *string `json:"-"` 2138 // TopicPrefix: filter on the topic prefix 2139 TopicPrefix *string `json:"-"` 2140} 2141 2142// ListNetworks: list the Networks 2143func (s *API) ListNetworks(req *ListNetworksRequest, opts ...scw.RequestOption) (*ListNetworksResponse, error) { 2144 var err error 2145 2146 if req.Region == "" { 2147 defaultRegion, _ := s.client.GetDefaultRegion() 2148 req.Region = defaultRegion 2149 } 2150 2151 defaultPageSize, exist := s.client.GetDefaultPageSize() 2152 if (req.PageSize == nil || *req.PageSize == 0) && exist { 2153 req.PageSize = &defaultPageSize 2154 } 2155 2156 query := url.Values{} 2157 parameter.AddToQuery(query, "page", req.Page) 2158 parameter.AddToQuery(query, "page_size", req.PageSize) 2159 parameter.AddToQuery(query, "order_by", req.OrderBy) 2160 parameter.AddToQuery(query, "organization_id", req.OrganizationID) 2161 parameter.AddToQuery(query, "name", req.Name) 2162 parameter.AddToQuery(query, "hub_id", req.HubID) 2163 parameter.AddToQuery(query, "topic_prefix", req.TopicPrefix) 2164 2165 if fmt.Sprint(req.Region) == "" { 2166 return nil, errors.New("field Region cannot be empty in request") 2167 } 2168 2169 scwReq := &scw.ScalewayRequest{ 2170 Method: "GET", 2171 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/networks", 2172 Query: query, 2173 Headers: http.Header{}, 2174 } 2175 2176 var resp ListNetworksResponse 2177 2178 err = s.client.Do(scwReq, &resp, opts...) 2179 if err != nil { 2180 return nil, err 2181 } 2182 return &resp, nil 2183} 2184 2185// UnsafeGetTotalCount should not be used 2186// Internal usage only 2187func (r *ListNetworksResponse) UnsafeGetTotalCount() uint32 { 2188 return r.TotalCount 2189} 2190 2191// UnsafeAppend should not be used 2192// Internal usage only 2193func (r *ListNetworksResponse) UnsafeAppend(res interface{}) (uint32, error) { 2194 results, ok := res.(*ListNetworksResponse) 2195 if !ok { 2196 return 0, errors.New("%T type cannot be appended to type %T", res, r) 2197 } 2198 2199 r.Networks = append(r.Networks, results.Networks...) 2200 r.TotalCount += uint32(len(results.Networks)) 2201 return uint32(len(results.Networks)), nil 2202} 2203 2204type CreateNetworkRequest struct { 2205 Region scw.Region `json:"-"` 2206 // Name: network name 2207 Name string `json:"name"` 2208 // Deprecated: OrganizationID: deprecated: Organization owning the resource, do not use 2209 // 2210 // Will always be assigned to the organization owning the IoT hub. 2211 OrganizationID string `json:"organization_id"` 2212 // Type: type of network to connect with 2213 // 2214 // Default value: unknown 2215 Type NetworkNetworkType `json:"type"` 2216 // HubID: hub ID to connect the Network to 2217 HubID string `json:"hub_id"` 2218 // TopicPrefix: topic prefix for the Network 2219 TopicPrefix string `json:"topic_prefix"` 2220} 2221 2222// CreateNetwork: create a new Network 2223func (s *API) CreateNetwork(req *CreateNetworkRequest, opts ...scw.RequestOption) (*CreateNetworkResponse, error) { 2224 var err error 2225 2226 if req.OrganizationID == "" { 2227 defaultOrganizationID, _ := s.client.GetDefaultOrganizationID() 2228 req.OrganizationID = defaultOrganizationID 2229 } 2230 2231 if req.Region == "" { 2232 defaultRegion, _ := s.client.GetDefaultRegion() 2233 req.Region = defaultRegion 2234 } 2235 2236 if req.Name == "" { 2237 req.Name = namegenerator.GetRandomName("network") 2238 } 2239 2240 if fmt.Sprint(req.Region) == "" { 2241 return nil, errors.New("field Region cannot be empty in request") 2242 } 2243 2244 scwReq := &scw.ScalewayRequest{ 2245 Method: "POST", 2246 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/networks", 2247 Headers: http.Header{}, 2248 } 2249 2250 err = scwReq.SetBody(req) 2251 if err != nil { 2252 return nil, err 2253 } 2254 2255 var resp CreateNetworkResponse 2256 2257 err = s.client.Do(scwReq, &resp, opts...) 2258 if err != nil { 2259 return nil, err 2260 } 2261 return &resp, nil 2262} 2263 2264type GetNetworkRequest struct { 2265 Region scw.Region `json:"-"` 2266 // NetworkID: network ID 2267 NetworkID string `json:"-"` 2268} 2269 2270// GetNetwork: retrieve a specific Network 2271func (s *API) GetNetwork(req *GetNetworkRequest, opts ...scw.RequestOption) (*Network, error) { 2272 var err error 2273 2274 if req.Region == "" { 2275 defaultRegion, _ := s.client.GetDefaultRegion() 2276 req.Region = defaultRegion 2277 } 2278 2279 if fmt.Sprint(req.Region) == "" { 2280 return nil, errors.New("field Region cannot be empty in request") 2281 } 2282 2283 if fmt.Sprint(req.NetworkID) == "" { 2284 return nil, errors.New("field NetworkID cannot be empty in request") 2285 } 2286 2287 scwReq := &scw.ScalewayRequest{ 2288 Method: "GET", 2289 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/networks/" + fmt.Sprint(req.NetworkID) + "", 2290 Headers: http.Header{}, 2291 } 2292 2293 var resp Network 2294 2295 err = s.client.Do(scwReq, &resp, opts...) 2296 if err != nil { 2297 return nil, err 2298 } 2299 return &resp, nil 2300} 2301 2302type DeleteNetworkRequest struct { 2303 Region scw.Region `json:"-"` 2304 // NetworkID: network ID 2305 NetworkID string `json:"-"` 2306} 2307 2308// DeleteNetwork: delete a Network 2309func (s *API) DeleteNetwork(req *DeleteNetworkRequest, opts ...scw.RequestOption) error { 2310 var err error 2311 2312 if req.Region == "" { 2313 defaultRegion, _ := s.client.GetDefaultRegion() 2314 req.Region = defaultRegion 2315 } 2316 2317 if fmt.Sprint(req.Region) == "" { 2318 return errors.New("field Region cannot be empty in request") 2319 } 2320 2321 if fmt.Sprint(req.NetworkID) == "" { 2322 return errors.New("field NetworkID cannot be empty in request") 2323 } 2324 2325 scwReq := &scw.ScalewayRequest{ 2326 Method: "DELETE", 2327 Path: "/iot/v1beta1/regions/" + fmt.Sprint(req.Region) + "/networks/" + fmt.Sprint(req.NetworkID) + "", 2328 Headers: http.Header{}, 2329 } 2330 2331 err = s.client.Do(scwReq, nil, opts...) 2332 if err != nil { 2333 return err 2334 } 2335 return nil 2336} 2337