Skip to main content

winterbaume_ec2/
types.rs

1pub type Tags = std::collections::HashMap<String, String>;
2
3#[derive(Debug, Clone)]
4pub struct Vpc {
5    pub vpc_id: String,
6    pub cidr_block: String,
7    pub state: String,
8    pub dhcp_options_id: String,
9    pub instance_tenancy: String,
10    pub is_default: bool,
11    pub enable_dns_hostnames: bool,
12    pub enable_dns_support: bool,
13    pub secondary_cidr_blocks: Vec<(String, String)>, // (assoc_id, cidr_block)
14    pub tags: Tags,
15    /// EC2-Classic ClassicLink toggle. AWS retired EC2-Classic but still
16    /// honours `DescribeVpcClassicLink`; new VPCs always report `false`.
17    pub classic_link_enabled: bool,
18}
19
20#[derive(Debug, Clone)]
21pub struct Subnet {
22    pub subnet_id: String,
23    pub vpc_id: String,
24    pub cidr_block: String,
25    pub availability_zone: String,
26    pub state: String,
27    pub available_ip_address_count: i64,
28    pub map_public_ip_on_launch: bool,
29    pub ipv6_cidr_blocks: Vec<SubnetIpv6CidrAssoc>,
30    pub tags: Tags,
31}
32
33#[derive(Debug, Clone)]
34pub struct SubnetIpv6CidrAssoc {
35    pub association_id: String,
36    pub ipv6_cidr_block: String,
37    pub state: String,
38}
39
40#[derive(Debug, Clone)]
41pub struct InternetGateway {
42    pub igw_id: String,
43    pub attachments: Vec<IgwAttachment>,
44    pub tags: Tags,
45}
46
47#[derive(Debug, Clone)]
48pub struct IgwAttachment {
49    pub vpc_id: String,
50    pub state: String,
51}
52
53#[derive(Debug, Clone)]
54pub struct SecurityGroup {
55    pub group_id: String,
56    pub group_name: String,
57    pub description: String,
58    pub vpc_id: String,
59    pub owner_id: String,
60    pub ingress_rules: Vec<IpPermission>,
61    pub egress_rules: Vec<IpPermission>,
62    pub tags: Tags,
63}
64
65#[derive(Debug, Clone)]
66pub struct IpPermission {
67    pub rule_id: String,
68    pub from_port: Option<i64>,
69    pub to_port: Option<i64>,
70    pub ip_protocol: String,
71    pub ip_ranges: Vec<IpRange>,
72    pub ipv6_ranges: Vec<Ipv6Range>,
73    pub user_id_group_pairs: Vec<UserIdGroupPair>,
74}
75
76#[derive(Debug, Clone)]
77pub struct IpRange {
78    pub cidr_ip: String,
79    pub description: Option<String>,
80}
81
82#[derive(Debug, Clone)]
83pub struct Ipv6Range {
84    pub cidr_ipv6: String,
85    pub description: Option<String>,
86}
87
88#[derive(Debug, Clone)]
89pub struct UserIdGroupPair {
90    pub group_id: String,
91    pub user_id: Option<String>,
92}
93
94#[derive(Debug, Clone)]
95pub struct RouteTable {
96    pub route_table_id: String,
97    pub vpc_id: String,
98    pub routes: Vec<Route>,
99    pub associations: Vec<RouteTableAssociation>,
100    /// Virtual private gateway IDs ( `vgw-*` ) propagating routes into this
101    /// route table. Populated by `EnableVgwRoutePropagation` and consulted
102    /// by `DescribeRouteTables`. Empty when no VGW is propagating.
103    pub propagating_vgws: Vec<String>,
104    pub tags: Tags,
105}
106
107#[derive(Debug, Clone)]
108pub struct Route {
109    pub destination_cidr_block: Option<String>,
110    pub destination_ipv6_cidr_block: Option<String>,
111    pub gateway_id: Option<String>,
112    pub state: String,
113    pub origin: String,
114}
115
116#[derive(Debug, Clone)]
117pub struct RouteTableAssociation {
118    pub association_id: String,
119    pub subnet_id: Option<String>,
120    /// Gateway ID this route table is associated with, set by
121    /// `AssociateRouteTable` with the `GatewayId` parameter ( edge
122    /// associations -- typically `igw-*` for ingress routing ).
123    /// Mutually exclusive with `subnet_id`.
124    pub gateway_id: Option<String>,
125    pub main: bool,
126    pub state: String,
127}
128
129#[derive(Debug, Clone)]
130pub struct KeyPair {
131    pub key_pair_id: String,
132    pub key_name: String,
133    pub fingerprint: String,
134    pub tags: Tags,
135}
136
137// Network ACL types
138
139#[derive(Debug, Clone)]
140pub struct NetworkAcl {
141    pub network_acl_id: String,
142    pub vpc_id: String,
143    pub is_default: bool,
144    pub entries: Vec<NetworkAclEntry>,
145    pub associations: Vec<NetworkAclAssociation>,
146    pub tags: Tags,
147}
148
149#[derive(Debug, Clone)]
150pub struct NetworkAclEntry {
151    pub rule_number: i32,
152    pub protocol: String,
153    pub rule_action: String,
154    pub egress: bool,
155    pub cidr_block: Option<String>,
156    pub ipv6_cidr_block: Option<String>,
157    pub port_range: Option<PortRange>,
158    pub icmp_type_code: Option<IcmpTypeCode>,
159}
160
161#[derive(Debug, Clone)]
162pub struct PortRange {
163    pub from: i32,
164    pub to: i32,
165}
166
167#[derive(Debug, Clone)]
168pub struct IcmpTypeCode {
169    pub type_num: i32,
170    pub code: i32,
171}
172
173#[derive(Debug, Clone)]
174pub struct NetworkAclAssociation {
175    pub network_acl_association_id: String,
176    pub network_acl_id: String,
177    pub subnet_id: String,
178}
179
180// Elastic IP types
181
182#[derive(Debug, Clone)]
183pub struct ElasticIp {
184    pub allocation_id: String,
185    pub public_ip: String,
186    pub association_id: Option<String>,
187    pub instance_id: Option<String>,
188    pub network_interface_id: Option<String>,
189    pub private_ip_address: Option<String>,
190    /// Reverse-DNS PTR record domain name. Set via `ModifyAddressAttribute`,
191    /// cleared via `ResetAddressAttribute`.
192    pub address_attribute_ptr_record: Option<String>,
193    /// Address scope: "vpc" (default) or "standard" (Classic), used by
194    /// `MoveAddressToVpc` / `RestoreAddressToClassic` legacy operations.
195    pub domain: String,
196    /// Account ID an `EnableAddressTransfer` offer was issued to. Cleared by
197    /// `DisableAddressTransfer` (and on completion of the transfer).
198    pub pending_transfer: Option<String>,
199    pub tags: Tags,
200}
201
202// NAT Gateway types
203
204#[derive(Debug, Clone)]
205pub struct NatGateway {
206    pub nat_gateway_id: String,
207    pub vpc_id: String,
208    pub subnet_id: String,
209    pub state: String,
210    pub connectivity_type: String,
211    pub allocation_id: Option<String>,
212    pub public_ip: Option<String>,
213    /// Secondary addresses (assigned via `AssignPrivateNatGatewayAddress` /
214    /// `AssociateNatGatewayAddress`).
215    pub secondary_addresses: Vec<NatGatewayAddressAssociation>,
216    pub tags: Tags,
217}
218
219/// One element of a NAT gateway's address set.
220#[derive(Debug, Clone)]
221pub struct NatGatewayAddressAssociation {
222    pub allocation_id: Option<String>,
223    pub association_id: Option<String>,
224    pub network_interface_id: Option<String>,
225    pub private_ip: Option<String>,
226    pub public_ip: Option<String>,
227    /// One of "assigning", "unassigning", "associating", "disassociating",
228    /// "succeeded", "failed", "failed-disassociating".
229    pub status: String,
230    pub is_primary: bool,
231}
232
233// BYOIP CIDR types
234
235#[derive(Debug, Clone)]
236pub struct ByoipCidr {
237    pub cidr: String,
238    pub description: Option<String>,
239    /// One of "pending-provision", "provisioned", "pending-advertisement",
240    /// "advertised", "pending-deprovision", "deprovisioned".
241    pub state: String,
242    /// ASN association for this CIDR, if a BYOASN has been associated.
243    pub asn_association: Option<AsnAssociation>,
244    /// IPAM pool ID this CIDR has been moved into via `MoveByoipCidrToIpam`.
245    pub ipam_pool_id: Option<String>,
246}
247
248/// Association between a BYO-ASN and a BYOIP CIDR.
249#[derive(Debug, Clone)]
250pub struct AsnAssociation {
251    pub asn: String,
252    pub cidr: String,
253    /// `pending-association` / `associated` / `pending-disassociation` /
254    /// `disassociated` / `failed-association` / `failed-disassociation`.
255    pub state: String,
256    pub status_message: Option<String>,
257}
258
259// Public IPv4 pool types
260
261#[derive(Debug, Clone)]
262pub struct PublicIpv4Pool {
263    pub pool_id: String,
264    pub description: Option<String>,
265    pub network_border_group: Option<String>,
266    pub total_address_count: i32,
267    pub total_available_address_count: i32,
268    pub pool_address_ranges: Vec<PublicIpv4PoolRange>,
269    pub tags: Tags,
270}
271
272#[derive(Debug, Clone)]
273pub struct PublicIpv4PoolRange {
274    pub first_address: String,
275    pub last_address: String,
276    pub address_count: i32,
277    pub available_address_count: i32,
278}
279
280// COIP CIDR types
281
282#[derive(Debug, Clone)]
283pub struct CoipCidr {
284    pub cidr: String,
285    pub coip_pool_id: String,
286}
287
288// Address transfer types
289
290#[derive(Debug, Clone)]
291pub struct AddressTransfer {
292    pub allocation_id: String,
293    pub public_ip: String,
294    pub transfer_account_id: String,
295    pub transfer_offer_expiration_timestamp: String,
296    pub transfer_offer_accepted_timestamp: Option<String>,
297    /// One of "pending", "accepted", "disabled".
298    pub address_transfer_status: String,
299}
300
301// DHCP Options types
302
303#[derive(Debug, Clone)]
304pub struct DhcpOptions {
305    pub dhcp_options_id: String,
306    pub configurations: Vec<DhcpConfiguration>,
307    pub tags: Tags,
308}
309
310#[derive(Debug, Clone)]
311pub struct DhcpConfiguration {
312    pub key: String,
313    pub values: Vec<String>,
314}
315
316// Egress-only internet gateway types
317
318#[derive(Debug, Clone)]
319pub struct EgressOnlyInternetGateway {
320    pub eigw_id: String,
321    pub state: String,
322    pub attachments: Vec<EoigwAttachment>,
323    pub tags: Tags,
324}
325
326#[derive(Debug, Clone)]
327pub struct EoigwAttachment {
328    pub vpc_id: String,
329    pub state: String,
330}
331
332// Flow log types
333
334#[derive(Debug, Clone)]
335pub struct FlowLog {
336    pub flow_log_id: String,
337    pub resource_id: String,
338    pub traffic_type: String,
339    pub log_destination_type: String,
340    pub log_destination: Option<String>,
341    pub log_group_name: Option<String>,
342    pub deliver_logs_status: String,
343    pub flow_log_status: String,
344    pub tags: Tags,
345}
346
347// VPC peering types
348
349#[derive(Debug, Clone)]
350pub struct VpcPeeringConnection {
351    pub peering_id: String,
352    pub requester_vpc_id: String,
353    pub accepter_vpc_id: Option<String>,
354    pub status: String,
355    pub tags: Tags,
356    /// Peering options on the requester side, set by
357    /// `ModifyVpcPeeringConnectionOptions`.
358    pub requester_peering_options: Option<VpcPeeringConnectionOptions>,
359    /// Peering options on the accepter side.
360    pub accepter_peering_options: Option<VpcPeeringConnectionOptions>,
361}
362
363/// Peering options for either side of a VPC peering connection.
364#[derive(Debug, Clone, Default)]
365pub struct VpcPeeringConnectionOptions {
366    pub allow_dns_resolution_from_remote_vpc: bool,
367    pub allow_egress_from_local_classic_link_to_remote_vpc: bool,
368    pub allow_egress_from_local_vpc_to_remote_classic_link: bool,
369}
370
371// VPC endpoint types
372
373#[derive(Debug, Clone)]
374pub struct VpcEndpoint {
375    pub endpoint_id: String,
376    pub vpc_id: String,
377    pub service_name: String,
378    pub endpoint_type: String,
379    pub state: String,
380    pub policy_document: Option<String>,
381    pub route_table_ids: Vec<String>,
382    pub subnet_ids: Vec<String>,
383    pub security_group_ids: Vec<String>,
384    /// `private_dns_enabled` flag for Interface endpoints ( ignored for
385    /// Gateway endpoints ). `None` preserves the legacy unset case so the
386    /// terraform converter can distinguish "not specified" from
387    /// "explicitly false".
388    pub private_dns_enabled: Option<bool>,
389    pub tags: Tags,
390}
391
392// Managed prefix list types
393
394#[derive(Debug, Clone)]
395pub struct ManagedPrefixList {
396    pub prefix_list_id: String,
397    pub prefix_list_name: String,
398    pub state: String,
399    pub address_family: String,
400    pub max_entries: i32,
401    pub entries: Vec<TypesPrefixListEntry>,
402    pub tags: Tags,
403    pub version: i64,
404    /// Snapshot of (version, entries) for each historical version. Allows
405    /// `RestoreManagedPrefixListVersion` to revert to a prior state.
406    pub version_history: Vec<ManagedPrefixListVersion>,
407}
408
409#[derive(Debug, Clone)]
410pub struct ManagedPrefixListVersion {
411    pub version: i64,
412    pub entries: Vec<TypesPrefixListEntry>,
413}
414
415#[derive(Debug, Clone)]
416pub struct TypesPrefixListEntry {
417    pub cidr: String,
418    pub description: Option<String>,
419}
420
421// Customer gateway types
422
423#[derive(Debug, Clone)]
424pub struct CustomerGateway {
425    pub customer_gateway_id: String,
426    pub bgp_asn: String,
427    pub ip_address: String,
428    pub gateway_type: String,
429    pub state: String,
430    pub tags: Tags,
431}
432
433// VPN gateway types
434
435#[derive(Debug, Clone)]
436pub struct VpnGateway {
437    pub vpn_gateway_id: String,
438    pub gateway_type: String,
439    pub state: String,
440    pub amazon_side_asn: Option<i64>,
441    pub vpc_attachments: Vec<VgwVpcAttachment>,
442    pub tags: Tags,
443}
444
445#[derive(Debug, Clone)]
446pub struct VgwVpcAttachment {
447    pub vpc_id: String,
448    pub state: String,
449}
450
451// VPN connection types
452
453#[derive(Debug, Clone, Default)]
454pub struct VpnConnection {
455    pub vpn_connection_id: String,
456    pub vpn_gateway_id: String,
457    pub customer_gateway_id: String,
458    /// Optional alternative target endpoint -- a transit gateway. AWS allows
459    /// `ModifyVpnConnection` to switch the target between VGW / TGW.
460    pub transit_gateway_id: Option<String>,
461    pub connection_type: String,
462    pub state: String,
463    pub tags: Tags,
464    /// Static routes added via `CreateVpnConnectionRoute`.
465    pub routes: Vec<VpnStaticRoute>,
466    /// Tunnel and traffic options. Modified by `ModifyVpnConnectionOptions`
467    /// and `ModifyVpnTunnelOptions`.
468    pub options: Option<VpnConnectionOptions>,
469    /// State of any in-flight tunnel replacement triggered by
470    /// `ReplaceVpnTunnel`. One of "available", "pending".
471    pub tunnel_replacement_status: Option<String>,
472}
473
474#[derive(Debug, Clone)]
475pub struct VpnStaticRoute {
476    pub destination_cidr_block: String,
477    /// Always "Static" for routes added via `CreateVpnConnectionRoute`.
478    pub source: String,
479    pub state: String,
480}
481
482#[derive(Debug, Clone, Default)]
483pub struct VpnConnectionOptions {
484    pub local_ipv4_network_cidr: Option<String>,
485    pub local_ipv6_network_cidr: Option<String>,
486    pub remote_ipv4_network_cidr: Option<String>,
487    pub remote_ipv6_network_cidr: Option<String>,
488    pub tunnel_inside_ip_version: Option<String>,
489    pub static_routes_only: Option<bool>,
490    pub tunnel_options: Vec<VpnTunnelOptions>,
491}
492
493#[derive(Debug, Clone, Default)]
494pub struct VpnTunnelOptions {
495    /// Inside-tunnel IPv4 CIDR (e.g. "169.254.10.0/30").
496    pub tunnel_inside_cidr: Option<String>,
497    pub tunnel_inside_ipv6_cidr: Option<String>,
498    pub pre_shared_key: Option<String>,
499    /// Outside IP address that identifies this tunnel.
500    pub outside_ip_address: Option<String>,
501    /// Certificate ARN, set by `ModifyVpnTunnelCertificate`.
502    pub certificate_arn: Option<String>,
503}
504
505// VPN Concentrator types -- a less-documented internal AWS resource. Modelled
506// as a thin record so `Create`/`Describe`/`Delete` round-trip cleanly.
507
508#[derive(Debug, Clone)]
509pub struct VpnConcentrator {
510    pub vpn_concentrator_id: String,
511    pub concentrator_type: String,
512    pub state: String,
513    pub transit_gateway_id: Option<String>,
514    pub transit_gateway_attachment_id: Option<String>,
515    pub tags: Tags,
516}
517
518// Carrier gateway types
519
520#[derive(Debug, Clone)]
521pub struct CarrierGateway {
522    pub carrier_gateway_id: String,
523    pub vpc_id: String,
524    pub state: String,
525    pub tags: Tags,
526}
527
528// Network interface types
529
530#[derive(Debug, Clone)]
531pub struct NetworkInterface {
532    pub network_interface_id: String,
533    pub subnet_id: String,
534    pub vpc_id: String,
535    pub description: String,
536    pub private_ip_address: String,
537    pub status: String,
538    pub attachment_id: Option<String>,
539    pub instance_id: Option<String>,
540    pub device_index: Option<i32>,
541    pub security_groups: Vec<String>,
542    pub source_dest_check: bool,
543    pub tags: Tags,
544    /// Public IP DNS name options hostname type.
545    pub public_ip_dns_hostname_type: Option<String>,
546}
547
548// Transit Gateway types
549
550#[derive(Debug, Clone)]
551pub struct TransitGateway {
552    pub transit_gateway_id: String,
553    pub state: String,
554    pub amazon_side_asn: i64,
555    pub description: String,
556    pub dns_support: String,
557    pub vpn_ecmp_support: String,
558    pub multicast_support: String,
559    pub tags: Tags,
560}
561
562#[derive(Debug, Clone)]
563pub struct TransitGatewayVpcAttachment {
564    pub attachment_id: String,
565    pub transit_gateway_id: String,
566    pub vpc_id: String,
567    pub subnet_ids: Vec<String>,
568    pub state: String,
569    pub tags: Tags,
570}
571
572#[derive(Debug, Clone)]
573pub struct TransitGatewayPeeringAttachment {
574    pub attachment_id: String,
575    pub transit_gateway_id: String,
576    pub peer_transit_gateway_id: String,
577    pub peer_account_id: String,
578    pub peer_region: String,
579    pub state: String,
580    pub tags: Tags,
581}
582
583#[derive(Debug, Clone)]
584pub struct TransitGatewayRouteTable {
585    pub route_table_id: String,
586    pub transit_gateway_id: String,
587    pub state: String,
588    pub default_association_route_table: bool,
589    pub default_propagation_route_table: bool,
590    pub tags: Tags,
591}
592
593#[derive(Debug, Clone)]
594pub struct TransitGatewayRoute {
595    pub destination_cidr_block: String,
596    pub route_type: String,
597    pub state: String,
598    pub attachment_id: Option<String>,
599}
600
601// Instance types
602
603#[derive(Debug, Clone)]
604pub struct InstanceState {
605    pub code: i32,
606    pub name: String,
607}
608
609#[derive(Debug, Clone)]
610pub struct Instance {
611    pub instance_id: String,
612    pub image_id: String,
613    pub instance_type: String,
614    pub state: InstanceState,
615    pub private_ip_address: Option<String>,
616    pub public_ip_address: Option<String>,
617    pub subnet_id: Option<String>,
618    pub vpc_id: Option<String>,
619    pub key_name: Option<String>,
620    pub security_groups: Vec<String>,
621    pub launch_time: String,
622    pub tags: Tags,
623    pub iam_instance_profile_arn: Option<String>,
624    pub monitoring_state: String,
625    pub placement_az: String,
626    pub placement_group_name: Option<String>,
627    pub placement_tenancy: Option<String>,
628    pub placement_host_id: Option<String>,
629    pub placement_affinity: Option<String>,
630    pub placement_partition_number: Option<i32>,
631    pub owner_id: String,
632    /// ClassicLink VPC association: (vpc_id, [security_group_ids])
633    pub classic_link_vpc: Option<(String, Vec<String>)>,
634    /// Private DNS hostname type (e.g. "ip-name", "resource-name").
635    pub private_dns_hostname_type: Option<String>,
636    /// Whether to enable A record IP-based hostnames.
637    pub enable_resource_name_dns_a_record: Option<bool>,
638    /// Whether to enable AAAA record IP-based hostnames.
639    pub enable_resource_name_dns_aaaa_record: Option<bool>,
640    /// Per-instance burstable credit specification: "standard" | "unlimited".
641    pub credit_specification: Option<String>,
642    /// CPU options: (core_count, threads_per_core, amd_sev_snp).
643    pub cpu_options: Option<InstanceCpuOptions>,
644    /// Maintenance options.
645    pub maintenance_options: Option<InstanceMaintenanceOptions>,
646    /// Network performance bandwidth weighting: "default" | "vpc-1" | "ebs-1".
647    pub network_bandwidth_weighting: Option<String>,
648    /// Lifecycle code: e.g. "spot", "scheduled".
649    pub lifecycle: Option<String>,
650    /// Product codes attached to this instance (each `(code, code_type)`).
651    pub product_codes: Vec<(String, String)>,
652    /// Group 10: per-instance capacity-reservation specification.
653    pub capacity_reservation_specification: Option<CapacityReservationSpecificationResponse>,
654}
655
656#[derive(Debug, Clone, Default)]
657pub struct InstanceCpuOptions {
658    pub core_count: Option<i32>,
659    pub threads_per_core: Option<i32>,
660    pub amd_sev_snp: Option<String>,
661}
662
663#[derive(Debug, Clone, Default)]
664pub struct InstanceMaintenanceOptions {
665    pub auto_recovery: Option<String>,
666    pub reboot_migration: Option<String>,
667}
668
669/// Account-level / per-region instance metadata defaults.
670#[derive(Debug, Clone, Default)]
671pub struct InstanceMetadataDefaults {
672    pub http_tokens: Option<String>,
673    pub http_put_response_hop_limit: Option<i32>,
674    pub http_endpoint: Option<String>,
675    pub instance_metadata_tags: Option<String>,
676}
677
678// EBS Volume types
679
680#[derive(Debug, Clone)]
681pub struct VolumeAttachment {
682    pub volume_id: String,
683    pub instance_id: String,
684    pub device: String,
685    pub state: String,
686    pub attach_time: String,
687    pub delete_on_termination: bool,
688}
689
690#[derive(Debug, Clone)]
691pub struct Volume {
692    pub volume_id: String,
693    pub size: i32,
694    pub snapshot_id: Option<String>,
695    pub availability_zone: String,
696    pub state: String,
697    pub volume_type: String,
698    pub iops: Option<i32>,
699    pub throughput: Option<i32>,
700    pub encrypted: bool,
701    pub create_time: String,
702    pub attachments: Vec<VolumeAttachment>,
703    pub tags: Tags,
704    /// One of "in-recycle-bin" or empty. Set when the volume is moved to
705    /// the Recycle Bin (mock policy treats every deletion as recoverable).
706    pub recycle_bin_state: Option<String>,
707    /// Set when the volume was created via `CopyVolumes`.
708    pub source_volume_id: Option<String>,
709}
710
711// EBS Snapshot types
712
713#[derive(Debug, Clone)]
714pub struct Snapshot {
715    pub snapshot_id: String,
716    pub volume_id: String,
717    pub volume_size: i32,
718    pub state: String,
719    pub description: String,
720    pub start_time: String,
721    pub progress: String,
722    pub owner_id: String,
723    pub encrypted: bool,
724    pub tags: Tags,
725    /// Lock state: "governance" | "compliance" | "none".
726    pub lock_state: String,
727    pub lock_duration: Option<i32>,
728    pub lock_created_on: Option<String>,
729    pub lock_expires_on: Option<String>,
730    pub lock_duration_start_time: Option<String>,
731    pub cool_off_period: Option<i32>,
732    pub cool_off_period_expires_on: Option<String>,
733    /// Storage tier: "standard" | "archive".
734    pub storage_tier: String,
735    /// Status of the most recent tier-change operation.
736    pub last_tiering_operation_status: Option<String>,
737    /// Per-AZ fast-snapshot-restore states. Mutated by
738    /// `EnableFastSnapshotRestores` / `DisableFastSnapshotRestores`.
739    pub fast_snapshot_restore_states: Vec<FastSnapshotRestoreState>,
740}
741
742#[derive(Debug, Clone, Default)]
743pub struct FastSnapshotRestoreState {
744    pub availability_zone: String,
745    /// One of `enabling`, `optimizing`, `enabled`, `disabling`, `disabled`.
746    pub state: String,
747}
748
749// AMI / Image types
750
751#[derive(Debug, Clone)]
752pub struct Image {
753    pub image_id: String,
754    pub name: String,
755    pub description: String,
756    pub state: String,
757    pub owner_id: String,
758    pub architecture: String,
759    pub image_type: String,
760    pub platform: Option<String>,
761    pub virtualization_type: String,
762    pub root_device_type: String,
763    pub root_device_name: String,
764    pub public: bool,
765    pub tags: Tags,
766    pub source_instance_id: Option<String>,
767    pub source_instance_type: String,
768    pub launch_permissions: Vec<LaunchPermission>,
769    /// Set to "recycled" while the AMI is in the Recycle Bin (after
770    /// `DeregisterImage`); cleared on `RestoreImageFromRecycleBin`.
771    pub recycle_bin_state: Option<String>,
772    /// RFC 3339 timestamp set by `EnableImageDeprecation`; cleared by
773    /// `DisableImageDeprecation`.
774    pub deprecation_time: Option<String>,
775    /// RFC 3339 timestamp at which the AMI entered the Recycle Bin. Set when
776    /// `recycle_bin_state` becomes `recycled`.
777    pub recycle_bin_enter_time: Option<String>,
778    /// Account product-code list (optional).
779    pub product_codes: Vec<(String, String)>,
780    /// Fast-launch (`Windows AMI`) configuration set by `EnableFastLaunch` /
781    /// `DisableFastLaunch`. `None` when fast-launch has never been configured.
782    pub fast_launch_state: Option<FastLaunchState>,
783    /// Image deregistration protection state. One of `enabled`,
784    /// `enabled-with-cooldown`, `disabled`. `None` when never configured.
785    pub deregistration_protection: Option<String>,
786    /// Kernel AMI ID ( for older paravirtual / HVM-with-kernel AMIs ).
787    pub kernel_id: Option<String>,
788    /// Ramdisk AMI ID.
789    pub ramdisk_id: Option<String>,
790    /// `EnaSupport`: whether the AMI is configured for ENA networking.
791    pub ena_support: Option<bool>,
792    /// `SriovNetSupport`: typically `"simple"` when SR-IOV is enabled.
793    pub sriov_net_support: Option<String>,
794    /// `TpmSupport`: e.g. `"v2.0"`.
795    pub tpm_support: Option<String>,
796    /// `BootMode`: `"legacy-bios"`, `"uefi"`, `"uefi-preferred"`.
797    pub boot_mode: Option<String>,
798    /// `ImdsSupport`: e.g. `"v2.0"` to require IMDSv2.
799    pub imds_support: Option<String>,
800    /// `ImageLocation`: S3-style path, set by `RegisterImage` flows that
801    /// reference an existing manifest.
802    pub image_location: Option<String>,
803    /// `SourceImageId`: for AMIs created via `CopyImage`, the source AMI's
804    /// ID. `None` for natively created AMIs.
805    pub source_image_id: Option<String>,
806    /// `SourceRegion`: for AMIs created via `CopyImage`, the region the
807    /// source AMI lived in. `None` for natively created AMIs.
808    pub source_region: Option<String>,
809}
810
811#[derive(Debug, Clone, Default)]
812pub struct FastLaunchState {
813    /// One of "enabling", "enabled", "disabling", "disabled".
814    pub state: String,
815    pub image_id: String,
816    /// Always "snapshot" today (the only supported `ResourceType`).
817    pub resource_type: String,
818    pub snapshot_configuration: SnapshotConfigurationRequest,
819    pub launch_template: FastLaunchLaunchTemplateSpecification,
820    pub max_parallel_launches: i32,
821    pub owner_id: String,
822    pub state_transition_time: String,
823}
824
825#[derive(Debug, Clone, Default)]
826pub struct SnapshotConfigurationRequest {
827    pub target_resource_count: Option<i32>,
828}
829
830#[derive(Debug, Clone, Default)]
831pub struct FastLaunchLaunchTemplateSpecification {
832    pub launch_template_id: Option<String>,
833    pub launch_template_name: Option<String>,
834    pub version: Option<String>,
835}
836
837#[derive(Debug, Clone, Default, PartialEq, Eq)]
838pub struct LaunchPermission {
839    pub user_id: Option<String>,
840    pub group: Option<String>,
841}
842
843// Launch Template types
844
845#[derive(Debug, Clone)]
846pub struct LaunchTemplate {
847    pub launch_template_id: String,
848    pub launch_template_name: String,
849    pub default_version_number: i64,
850    pub latest_version_number: i64,
851    pub tags: Tags,
852}
853
854#[derive(Debug, Clone)]
855pub struct LaunchTemplateVersion {
856    pub version_number: i64,
857    pub launch_template_id: String,
858    pub launch_template_name: String,
859    pub version_description: String,
860    pub data: std::collections::HashMap<String, String>,
861    pub default_version: bool,
862}
863
864// Spot Instance types
865
866#[derive(Debug, Clone)]
867pub struct SpotInstanceRequest {
868    pub spot_instance_request_id: String,
869    pub spot_price: String,
870    pub instance_type: String,
871    pub image_id: String,
872    pub state: String,
873    pub status_code: String,
874    pub instance_id: Option<String>,
875    pub tags: Tags,
876}
877
878/// Singleton per-account spot-instance datafeed subscription. AWS allows
879/// at most one subscription per account; `CreateSpotDatafeedSubscription`
880/// fails with `AlreadyExists` if one is already present, and
881/// `DeleteSpotDatafeedSubscription` clears it.
882#[derive(Debug, Clone)]
883pub struct SpotDatafeedSubscription {
884    pub bucket: String,
885    pub prefix: Option<String>,
886    pub owner_id: String,
887    /// `"Active"` after `Create`, no other states are reachable in the
888    /// emulator. Real AWS also exposes `Inactive` while propagation to
889    /// S3 fails, which we don't model.
890    pub state: String,
891}
892
893// IAM Instance Profile Association
894
895#[derive(Debug, Clone)]
896pub struct IamInstanceProfileAssociation {
897    pub association_id: String,
898    pub instance_id: String,
899    pub iam_instance_profile_arn: String,
900    pub iam_instance_profile_name: String,
901    pub state: String,
902}
903
904// Dedicated Host types
905
906#[derive(Debug, Clone)]
907pub struct DedicatedHost {
908    pub host_id: String,
909    pub availability_zone: String,
910    pub instance_type: Option<String>,
911    pub auto_placement: String,
912    pub host_recovery: String,
913    pub state: String,
914    pub tags: Tags,
915}
916
917// EC2 Fleet types
918
919#[derive(Debug, Clone)]
920pub struct Ec2Fleet {
921    pub fleet_id: String,
922    pub state: String,
923    pub fleet_type: String,
924    pub create_time: String,
925    pub tags: Tags,
926    /// Total target capacity (modifiable via `ModifyFleet`).
927    pub total_target_capacity: Option<i32>,
928    /// On-demand portion of target capacity.
929    pub on_demand_target_capacity: Option<i32>,
930    /// Spot portion of target capacity.
931    pub spot_target_capacity: Option<i32>,
932    /// Free-form context string (modifiable via `ModifyFleet`).
933    pub context: Option<String>,
934}
935
936// VPC Endpoint Service Configuration types
937
938#[derive(Debug, Clone, Default)]
939pub struct VpcEndpointServiceConfiguration {
940    pub service_id: String,
941    pub service_name: String,
942    pub service_type: String,
943    pub acceptance_required: bool,
944    pub state: String,
945    pub network_load_balancer_arns: Vec<String>,
946    pub gateway_load_balancer_arns: Vec<String>,
947    pub allowed_principals: Vec<String>,
948    pub tags: Tags,
949    /// One of "ServiceOwner", "Endpoint". Toggled by
950    /// `ModifyVpcEndpointServicePayerResponsibility`.
951    pub payer_responsibility: Option<String>,
952    /// State of the service's private DNS verification. One of
953    /// "pendingVerification", "verifying", "verified", "failed".
954    pub private_dns_state: Option<String>,
955}
956
957// VPC Endpoint Connection types -- represents an endpoint that has connected
958// to a service configuration. Created implicitly by `CreateVpcEndpoint` against
959// a service ID, transitioned by `Accept`/`RejectVpcEndpointConnections`.
960
961#[derive(Debug, Clone)]
962pub struct VpcEndpointConnection {
963    pub service_id: String,
964    pub vpc_endpoint_id: String,
965    pub vpc_endpoint_owner: String,
966    /// One of "pendingAcceptance", "available", "rejected", "deleted".
967    pub vpc_endpoint_state: String,
968    pub creation_timestamp: String,
969}
970
971// VPC Endpoint Connection Notification (SNS topic for endpoint events).
972
973#[derive(Debug, Clone)]
974pub struct VpcEndpointConnectionNotification {
975    pub connection_notification_id: String,
976    pub connection_notification_arn: String,
977    pub connection_events: Vec<String>,
978    pub connection_notification_state: String,
979    pub connection_notification_type: String,
980    pub service_id: Option<String>,
981    pub vpc_endpoint_id: Option<String>,
982}
983
984// VPC Block Public Access exclusion -- an opt-out scoped to a single VPC or
985// subnet, allowing internet egress (or both directions) even when the
986// account-level block is on.
987
988#[derive(Debug, Clone)]
989pub struct VpcBlockPublicAccessExclusion {
990    pub exclusion_id: String,
991    /// One of "allow-bidirectional", "allow-egress", "block-bidirectional".
992    pub internet_gateway_exclusion_mode: String,
993    pub resource_arn: String,
994    /// One of "create-in-progress", "create-complete", "update-in-progress",
995    /// "update-complete", "delete-in-progress", "delete-complete".
996    pub state: String,
997    pub creation_timestamp: String,
998    pub last_update_timestamp: String,
999    pub tags: Tags,
1000}
1001
1002// VPC Block Public Access account-level options -- single-value per
1003// account/region, modified by `ModifyVpcBlockPublicAccessOptions`.
1004
1005#[derive(Debug, Clone)]
1006pub struct VpcBlockPublicAccessOptions {
1007    pub aws_account_id: String,
1008    pub aws_region: String,
1009    /// One of "off", "block-bidirectional", "block-ingress".
1010    pub internet_gateway_block_mode: String,
1011    /// One of "default", "update-in-progress", "update-complete".
1012    pub state: String,
1013    pub last_update_timestamp: String,
1014}
1015
1016// Per-VPC encryption control resource.
1017
1018#[derive(Debug, Clone)]
1019pub struct VpcEncryptionControl {
1020    pub vpc_encryption_control_id: String,
1021    pub vpc_id: String,
1022    /// One of "enforce", "monitor".
1023    pub mode: String,
1024    /// One of "enforce-in-progress", "enforce-complete", "monitor-in-progress",
1025    /// "monitor-complete", "delete-in-progress", "delete-complete".
1026    pub state: String,
1027    /// History of mode changes ((mode, timestamp)).
1028    pub mode_history: Vec<(String, String)>,
1029    pub tags: Tags,
1030}
1031
1032// Spot Fleet types
1033
1034#[derive(Debug, Clone)]
1035pub struct SpotFleetRequest {
1036    pub spot_fleet_request_id: String,
1037    pub spot_fleet_request_state: String,
1038    pub target_capacity: i32,
1039    pub iam_fleet_role: String,
1040    pub create_time: String,
1041    pub tags: Tags,
1042}
1043
1044// Subnet CIDR Reservation types
1045
1046#[derive(Debug, Clone)]
1047pub struct SubnetCidrReservationEntry {
1048    pub reservation_id: String,
1049    pub subnet_id: String,
1050    pub cidr: String,
1051    pub reservation_type: String,
1052    pub description: String,
1053    pub owner_id: String,
1054}
1055
1056// Subnet IPv6 CIDR association
1057
1058#[derive(Debug, Clone)]
1059pub struct SubnetIpv6Cidr {
1060    pub association_id: String,
1061    pub ipv6_cidr_block: String,
1062    pub state: String,
1063}
1064
1065// Placement Group
1066
1067#[derive(Debug, Clone)]
1068pub struct PlacementGroup {
1069    pub group_id: String,
1070    pub group_name: String,
1071    pub group_arn: String,
1072    pub strategy: String,
1073    pub state: String,
1074    pub partition_count: Option<i32>,
1075    pub spread_level: Option<String>,
1076    pub tags: Tags,
1077}
1078
1079// Network Interface Permission
1080
1081#[derive(Debug, Clone)]
1082pub struct NetworkInterfacePermission {
1083    pub network_interface_permission_id: String,
1084    pub network_interface_id: String,
1085    pub aws_account_id: Option<String>,
1086    pub aws_service: Option<String>,
1087    pub permission: String,
1088    pub permission_state: String,
1089}
1090
1091// Capacity Reservation
1092
1093#[derive(Debug, Clone)]
1094pub struct CapacityReservation {
1095    pub capacity_reservation_id: String,
1096    pub capacity_reservation_arn: String,
1097    pub owner_id: String,
1098    pub instance_type: String,
1099    pub instance_platform: String,
1100    pub availability_zone: String,
1101    pub tenancy: String,
1102    pub total_instance_count: i32,
1103    pub available_instance_count: i32,
1104    pub ebs_optimized: bool,
1105    pub ephemeral_storage: bool,
1106    pub state: String,
1107    pub start_date: String,
1108    pub end_date: Option<String>,
1109    pub end_date_type: String,
1110    pub instance_match_criteria: String,
1111    pub create_date: String,
1112    pub outpost_arn: Option<String>,
1113    pub placement_group_arn: Option<String>,
1114    pub tags: Tags,
1115    /// Group 10: pending billing-ownership transfer target account ID.
1116    pub pending_billing_owner_account_id: Option<String>,
1117    /// Group 10: account ID that currently owns the unused-reservation billing.
1118    pub billing_owner_account_id: Option<String>,
1119    /// Group 10: when this reservation was split off, the parent reservation ID.
1120    pub target_capacity_reservation_id: Option<String>,
1121    /// Group 10: reservation type (e.g. "default", "capacity-block").
1122    pub reservation_type: Option<String>,
1123    /// Group 10: optional commitment details.
1124    pub commitment_info: Option<CapacityReservationCommitmentInfo>,
1125}
1126
1127// Instance Connect Endpoint
1128
1129#[derive(Debug, Clone)]
1130pub struct InstanceConnectEndpoint {
1131    pub instance_connect_endpoint_id: String,
1132    pub instance_connect_endpoint_arn: String,
1133    pub subnet_id: String,
1134    pub vpc_id: String,
1135    pub availability_zone: String,
1136    pub state: String,
1137    pub created_at: String,
1138    pub preserve_client_ip: bool,
1139    pub security_group_ids: Vec<String>,
1140    pub network_interface_ids: Vec<String>,
1141    pub dns_name: String,
1142    pub fips_dns_name: String,
1143    pub ip_address_type: String,
1144    pub owner_id: String,
1145    pub tags: Tags,
1146}
1147
1148// COIP (Customer-Owned IP) Pool
1149
1150#[derive(Debug, Clone)]
1151pub struct CoipPool {
1152    pub pool_id: String,
1153    pub pool_arn: String,
1154    pub local_gateway_route_table_id: String,
1155    pub pool_cidrs: Vec<String>,
1156    pub tags: Tags,
1157}
1158
1159// Security Group VPC Association
1160
1161#[derive(Debug, Clone)]
1162pub struct SecurityGroupVpcAssociation {
1163    pub group_id: String,
1164    pub vpc_id: String,
1165    pub vpc_owner_id: String,
1166    pub state: String,
1167}
1168
1169// Enclave Certificate IAM Role Association
1170
1171#[derive(Debug, Clone)]
1172pub struct EnclaveCertificateIamRoleAssociation {
1173    pub certificate_arn: String,
1174    pub role_arn: String,
1175    pub certificate_s3_bucket_name: String,
1176    pub certificate_s3_object_key: String,
1177    pub encryption_kms_key_id: String,
1178}
1179
1180// Mac System Integrity Protection Modification Task
1181
1182#[derive(Debug, Clone)]
1183pub struct MacSipModificationTask {
1184    pub task_id: String,
1185    pub instance_id: String,
1186    pub task_type: String,
1187    pub task_state: String,
1188    pub start_time: String,
1189    pub apple_internal: Option<String>,
1190    pub base_system: Option<String>,
1191    pub debugging_restrictions: Option<String>,
1192    pub dtrace_restrictions: Option<String>,
1193    pub filesystem_protections: Option<String>,
1194    pub kext_signing: Option<String>,
1195    pub nvram_protections: Option<String>,
1196    pub status: Option<String>,
1197    pub tags: Tags,
1198}
1199
1200// Declarative Policies Report
1201
1202#[derive(Debug, Clone)]
1203pub struct DeclarativePoliciesReport {
1204    pub report_id: String,
1205    pub s3_bucket: String,
1206    pub s3_prefix: Option<String>,
1207    pub target_id: String,
1208    pub status: String,
1209    pub start_time: String,
1210    pub end_time: Option<String>,
1211    pub tags: Tags,
1212}
1213
1214// Capacity Reservation Fleet
1215
1216#[derive(Debug, Clone)]
1217pub struct CapacityReservationFleetInstanceSpec {
1218    pub instance_type: String,
1219    pub instance_platform: String,
1220    pub availability_zone: Option<String>,
1221    pub ebs_optimized: Option<bool>,
1222    pub priority: Option<i32>,
1223    pub weight: Option<f64>,
1224}
1225
1226#[derive(Debug, Clone)]
1227pub struct CapacityReservationFleet {
1228    pub capacity_reservation_fleet_id: String,
1229    pub capacity_reservation_fleet_arn: String,
1230    pub state: String,
1231    pub tenancy: String,
1232    pub allocation_strategy: String,
1233    pub instance_match_criteria: String,
1234    pub total_target_capacity: i32,
1235    pub total_fulfilled_capacity: f64,
1236    pub create_time: String,
1237    pub end_date: Option<String>,
1238    pub instance_type_specifications: Vec<CapacityReservationFleetInstanceSpec>,
1239    pub tags: Tags,
1240}
1241
1242// Mac Volume Ownership Delegation Task
1243
1244#[derive(Debug, Clone)]
1245pub struct MacVolumeOwnershipTask {
1246    pub task_id: String,
1247    /// One of "pending", "in-progress", "completed", "failed".
1248    pub mac_volume_ownership_task_state: String,
1249    pub volume_id: String,
1250    pub source_volume_owner_account_id: String,
1251    pub target_volume_owner_account_id: String,
1252    pub creation_time: String,
1253    pub completion_time: Option<String>,
1254}
1255
1256// Replace Root Volume Task
1257
1258#[derive(Debug, Clone)]
1259pub struct ReplaceRootVolumeTask {
1260    pub task_id: String,
1261    pub instance_id: String,
1262    /// One of "pending", "in-progress", "failing", "succeeding", "failed",
1263    /// "succeeded".
1264    pub task_state: String,
1265    pub image_id: Option<String>,
1266    pub snapshot_id: Option<String>,
1267    pub delete_replaced_root_volume: bool,
1268    pub start_time: String,
1269    pub complete_time: Option<String>,
1270    pub tags: Tags,
1271}
1272
1273// Snapshot Import Task
1274
1275#[derive(Debug, Clone)]
1276pub struct SnapshotImportTask {
1277    pub import_task_id: String,
1278    /// One of "active", "cancelling", "cancelled", "deleting", "deleted",
1279    /// "completed".
1280    pub status: String,
1281    pub description: Option<String>,
1282    pub disk_image_size: Option<f64>,
1283    pub format: Option<String>,
1284    pub url: Option<String>,
1285    pub user_bucket_s3_bucket: Option<String>,
1286    pub user_bucket_s3_key: Option<String>,
1287    pub owner_id: String,
1288    pub encrypted: bool,
1289    pub kms_key_id: Option<String>,
1290    /// Set after the task completes and a snapshot is materialised.
1291    pub snapshot_id: Option<String>,
1292    pub tags: Tags,
1293}
1294
1295// Conversion Task (ImportInstance / ImportVolume)
1296
1297#[derive(Debug, Clone)]
1298pub struct ImportInstanceVolumeDetail {
1299    pub availability_zone: Option<String>,
1300    pub bytes_converted: Option<i64>,
1301    pub description: Option<String>,
1302    pub status: String,
1303}
1304
1305#[derive(Debug, Clone)]
1306pub struct ConversionTask {
1307    pub conversion_task_id: String,
1308    pub expiration_time: String,
1309    pub description: Option<String>,
1310    pub instance_id: Option<String>,
1311    /// One of "Windows", "Linux".
1312    pub platform: String,
1313    pub volumes: Vec<ImportInstanceVolumeDetail>,
1314    /// One of "active", "cancelling", "cancelled", "completed".
1315    pub state: String,
1316    pub status_message: Option<String>,
1317    pub tags: Tags,
1318}
1319
1320// Export Task (CreateInstanceExportTask)
1321
1322#[derive(Debug, Clone)]
1323pub struct ExportTask {
1324    pub export_task_id: String,
1325    pub description: String,
1326    pub instance_id: String,
1327    /// One of "citrix", "vmware", "microsoft".
1328    pub target_environment: String,
1329    /// One of "vmdk", "raw", "vhd".
1330    pub disk_image_format: String,
1331    pub container_format: Option<String>,
1332    pub s3_bucket: String,
1333    pub s3_prefix: Option<String>,
1334    pub s3_key: String,
1335    /// One of "active", "cancelling", "cancelled", "completed".
1336    pub status: String,
1337    pub status_message: Option<String>,
1338    pub tags: Tags,
1339}
1340
1341// Trunk Interface Association
1342
1343#[derive(Debug, Clone)]
1344pub struct TrunkInterfaceAssociation {
1345    pub association_id: String,
1346    pub branch_interface_id: String,
1347    pub trunk_interface_id: String,
1348    /// One of "vlan", "gre".
1349    pub interface_protocol: String,
1350    pub vlan_id: Option<i32>,
1351    pub gre_key: Option<i32>,
1352    pub tags: Tags,
1353}
1354
1355// Secondary Network and Subnet
1356
1357#[derive(Debug, Clone)]
1358pub struct SecondaryNetwork {
1359    pub network_id: String,
1360    pub vpc_id: String,
1361    pub primary_cidr_block: String,
1362    pub secondary_cidr_blocks: Vec<String>,
1363    /// One of "pending", "available", "deleting", "deleted".
1364    pub state: String,
1365    pub network_border_group: Option<String>,
1366    pub tags: Tags,
1367}
1368
1369#[derive(Debug, Clone)]
1370pub struct SecondarySubnet {
1371    pub subnet_id: String,
1372    pub vpc_id: String,
1373    pub secondary_network_id: String,
1374    pub cidr_block: String,
1375    pub availability_zone: String,
1376    pub state: String,
1377    pub tags: Tags,
1378}
1379
1380// ---------------------------------------------------------------------------
1381// Group 5 additions: Reserved Instances, FPGA Image, Image tasks, Instance
1382// Event windows / events, Host reservations, Scheduled instances.
1383// ---------------------------------------------------------------------------
1384
1385/// Quote acceptance record from `AcceptReservedInstancesExchangeQuote`.
1386#[derive(Debug, Clone)]
1387pub struct ReservedInstancesExchange {
1388    pub exchange_id: String,
1389    pub target_reserved_instances_ids: Vec<String>,
1390    pub source_reserved_instances_ids: Vec<String>,
1391    pub status: String,
1392    pub status_message: Option<String>,
1393    pub time: String,
1394}
1395
1396#[derive(Debug, Clone)]
1397pub struct ReservedInstancesListing {
1398    pub listing_id: String,
1399    pub reserved_instances_id: String,
1400    pub instance_count: i32,
1401    pub price_schedules: Vec<PriceSchedule>,
1402    pub status: String,
1403    pub status_message: Option<String>,
1404    pub create_date: String,
1405    pub update_date: String,
1406    pub client_token: Option<String>,
1407    pub tags: Tags,
1408}
1409
1410#[derive(Debug, Clone)]
1411pub struct PriceSchedule {
1412    pub term: i64,
1413    pub price: f64,
1414    pub currency_code: String,
1415    pub active: bool,
1416}
1417
1418#[derive(Debug, Clone)]
1419pub struct ReservedInstancesPurchase {
1420    pub purchase_id: String,
1421    pub reserved_instances_offering_id: String,
1422    pub instance_count: i32,
1423    pub limit_price: Option<String>,
1424    pub purchase_time: String,
1425    pub tags: Tags,
1426    /// Whether this purchase is queued (not yet active). Set to `true` when
1427    /// the request specifies `PurchaseTime` in the future.
1428    pub queued: bool,
1429    /// The reserved instances created by this purchase.
1430    pub reserved_instances_id: Option<String>,
1431}
1432
1433#[derive(Debug, Clone)]
1434pub struct ReservedInstances {
1435    pub reserved_instances_id: String,
1436    pub instance_type: String,
1437    pub instance_count: i32,
1438    pub product_description: String,
1439    pub scope: String,
1440    pub currency_code: String,
1441    pub duration: i64,
1442    pub fixed_price: f64,
1443    pub usage_price: f64,
1444    pub offering_class: String,
1445    pub offering_type: String,
1446    pub instance_tenancy: String,
1447    pub start: String,
1448    pub end: String,
1449    pub state: String,
1450    pub tags: Tags,
1451}
1452
1453#[derive(Debug, Clone)]
1454pub struct ReservedInstancesModification {
1455    pub modification_id: String,
1456    pub reserved_instances_ids: Vec<String>,
1457    pub target_configurations: Vec<ReservedInstancesConfiguration>,
1458    pub status: String,
1459    pub status_message: Option<String>,
1460    pub create_date: String,
1461    pub update_date: String,
1462    pub effective_date: String,
1463    pub client_token: Option<String>,
1464}
1465
1466#[derive(Debug, Clone)]
1467pub struct ReservedInstancesConfiguration {
1468    pub availability_zone: Option<String>,
1469    pub instance_count: Option<i32>,
1470    pub instance_type: Option<String>,
1471    pub platform: Option<String>,
1472    pub scope: Option<String>,
1473}
1474
1475#[derive(Debug, Clone)]
1476pub struct FpgaImage {
1477    pub fpga_image_id: String,
1478    pub fpga_image_global_id: String,
1479    pub name: String,
1480    pub description: Option<String>,
1481    pub shell_version: Option<String>,
1482    pub pci_id_vendor: Option<String>,
1483    pub pci_id_device: Option<String>,
1484    pub state: String,
1485    pub create_time: String,
1486    pub update_time: String,
1487    pub owner_id: String,
1488    pub owner_alias: Option<String>,
1489    pub product_codes: Vec<(String, String)>,
1490    pub tags: Tags,
1491    pub public: bool,
1492    pub data_retention_support: bool,
1493    pub instance_types: Vec<String>,
1494    /// Per-account load permissions: each is a `(scope, value)` pair where
1495    /// `scope` is "user_id" or "group".
1496    pub load_permissions: Vec<(String, String)>,
1497}
1498
1499#[derive(Debug, Clone)]
1500pub struct ImageUsageReport {
1501    pub report_id: String,
1502    pub image_id: String,
1503    pub account_filters: Vec<String>,
1504    pub resource_types: Vec<String>,
1505    pub status: String,
1506    pub creation_time: String,
1507    pub completion_time: Option<String>,
1508    pub tags: Tags,
1509}
1510
1511#[derive(Debug, Clone)]
1512pub struct RestoreImageTask {
1513    pub image_id: String,
1514    pub name: String,
1515    pub s3_object_url: String,
1516    pub status: String,
1517    pub status_message: Option<String>,
1518    pub creation_time: String,
1519}
1520
1521#[derive(Debug, Clone)]
1522pub struct StoreImageTask {
1523    pub image_id: String,
1524    pub ami_id: String,
1525    pub bucket: String,
1526    pub s3_object_key: String,
1527    pub store_task_state: String,
1528    pub store_task_failure_reason: Option<String>,
1529    pub progress_percentage: i32,
1530    pub task_start_time: String,
1531}
1532
1533#[derive(Debug, Clone)]
1534pub struct ImportImageTask {
1535    pub import_task_id: String,
1536    pub architecture: Option<String>,
1537    pub description: Option<String>,
1538    pub encrypted: bool,
1539    pub hypervisor: Option<String>,
1540    pub image_id: Option<String>,
1541    pub license_type: Option<String>,
1542    pub platform: Option<String>,
1543    pub progress: Option<String>,
1544    pub snapshot_details: Vec<ImportImageSnapshotDetail>,
1545    pub status: String,
1546    pub status_message: Option<String>,
1547    pub tags: Tags,
1548    pub usage_operation: Option<String>,
1549    pub boot_mode: Option<String>,
1550}
1551
1552#[derive(Debug, Clone)]
1553pub struct ImportImageSnapshotDetail {
1554    pub disk_image_size: Option<f64>,
1555    pub format: Option<String>,
1556    pub progress: Option<String>,
1557    pub snapshot_id: Option<String>,
1558    pub status: Option<String>,
1559    pub url: Option<String>,
1560    pub user_bucket_s3_bucket: Option<String>,
1561    pub user_bucket_s3_key: Option<String>,
1562}
1563
1564/// Per-region allowed AMI criteria entry (image owners, names, etc.).
1565#[derive(Debug, Clone, Default)]
1566pub struct AllowedImageCriterion {
1567    pub image_providers: Vec<String>,
1568    pub marketplace_product_codes: Vec<String>,
1569    pub deprecation_time_condition: Option<String>,
1570}
1571
1572#[derive(Debug, Clone)]
1573pub struct InstanceEventWindow {
1574    pub instance_event_window_id: String,
1575    pub name: String,
1576    pub time_ranges: Vec<InstanceEventWindowTimeRange>,
1577    pub cron_expression: Option<String>,
1578    pub association_target: Option<InstanceEventWindowAssociation>,
1579    pub state: String,
1580    pub tags: Tags,
1581}
1582
1583#[derive(Debug, Clone, Default)]
1584pub struct InstanceEventWindowTimeRange {
1585    pub start_week_day: Option<String>,
1586    pub start_hour: Option<i32>,
1587    pub end_week_day: Option<String>,
1588    pub end_hour: Option<i32>,
1589}
1590
1591#[derive(Debug, Clone, Default)]
1592pub struct InstanceEventWindowAssociation {
1593    pub instance_ids: Vec<String>,
1594    pub dedicated_host_ids: Vec<String>,
1595    pub tags: Vec<(String, String)>,
1596}
1597
1598/// One scheduled instance status event (e.g. retirement, system reboot).
1599#[derive(Debug, Clone)]
1600pub struct InstanceEvent {
1601    pub event_id: String,
1602    pub instance_id: String,
1603    pub code: String,
1604    pub description: String,
1605    pub not_before: String,
1606    pub not_after: String,
1607    pub not_before_deadline: Option<String>,
1608}
1609
1610/// Subscribe-by-tag instance event notification attribute.
1611#[derive(Debug, Clone, Default)]
1612pub struct InstanceTagNotificationAttributes {
1613    pub include_all_tags_of_instance: bool,
1614    pub instance_tag_keys: Vec<String>,
1615}
1616
1617#[derive(Debug, Clone)]
1618pub struct HostReservation {
1619    pub host_reservation_id: String,
1620    pub host_id_set: Vec<String>,
1621    pub currency_code: String,
1622    pub duration: i32,
1623    pub end: Option<String>,
1624    pub hourly_price: String,
1625    pub instance_family: String,
1626    pub offering_id: String,
1627    pub payment_option: String,
1628    pub start: String,
1629    pub state: String,
1630    pub upfront_price: String,
1631    pub tags: Tags,
1632}
1633
1634#[derive(Debug, Clone)]
1635pub struct ScheduledInstance {
1636    pub scheduled_instance_id: String,
1637    pub instance_type: String,
1638    pub platform: String,
1639    pub network_platform: String,
1640    pub availability_zone: String,
1641    pub instance_count: i32,
1642    pub hourly_price: String,
1643    pub total_scheduled_instance_hours: i32,
1644    pub term_start_date: String,
1645    pub term_end_date: String,
1646    pub recurrence: ScheduledInstanceRecurrence,
1647    pub slot_duration_in_hours: i32,
1648    pub previous_slot_end_time: Option<String>,
1649    pub next_slot_start_time: Option<String>,
1650    pub create_date: String,
1651}
1652
1653#[derive(Debug, Clone, Default)]
1654pub struct ScheduledInstanceRecurrence {
1655    pub frequency: Option<String>,
1656    pub interval: Option<i32>,
1657    pub occurrence_day_set: Vec<i32>,
1658    pub occurrence_relative_to_end: Option<bool>,
1659    pub occurrence_unit: Option<String>,
1660}
1661
1662/// Per-instance status report submitted via `ReportInstanceStatus`.
1663#[derive(Debug, Clone)]
1664pub struct InstanceStatusReport {
1665    pub instance_id: String,
1666    pub status: String,
1667    pub reason_codes: Vec<String>,
1668    pub start_time: Option<String>,
1669    pub end_time: Option<String>,
1670    pub description: Option<String>,
1671}
1672
1673// ===== Group 6: Network Insights =====
1674
1675#[derive(Debug, Clone, Default)]
1676pub struct PathStatementSpec {
1677    pub packet_header_statement: Option<PacketHeaderStatementSpec>,
1678    pub resource_statement: Option<ResourceStatementSpec>,
1679}
1680
1681#[derive(Debug, Clone, Default)]
1682pub struct PacketHeaderStatementSpec {
1683    pub destination_addresses: Vec<String>,
1684    pub destination_ports: Vec<String>,
1685    pub destination_prefix_lists: Vec<String>,
1686    pub protocols: Vec<String>,
1687    pub source_addresses: Vec<String>,
1688    pub source_ports: Vec<String>,
1689    pub source_prefix_lists: Vec<String>,
1690}
1691
1692#[derive(Debug, Clone, Default)]
1693pub struct ResourceStatementSpec {
1694    pub resource_types: Vec<String>,
1695    pub resources: Vec<String>,
1696}
1697
1698#[derive(Debug, Clone, Default)]
1699pub struct AccessScopePathSpec {
1700    pub source: Option<PathStatementSpec>,
1701    pub destination: Option<PathStatementSpec>,
1702    pub through_resources: Vec<ResourceStatementSpec>,
1703}
1704
1705#[derive(Debug, Clone)]
1706pub struct NetworkInsightsAccessScope {
1707    pub network_insights_access_scope_id: String,
1708    pub network_insights_access_scope_arn: String,
1709    pub created_date: String,
1710    pub updated_date: String,
1711    pub tags: Tags,
1712    pub match_paths: Vec<AccessScopePathSpec>,
1713    pub exclude_paths: Vec<AccessScopePathSpec>,
1714}
1715
1716#[derive(Debug, Clone)]
1717pub struct NetworkInsightsAccessScopeAnalysis {
1718    pub network_insights_access_scope_analysis_id: String,
1719    pub network_insights_access_scope_analysis_arn: String,
1720    pub network_insights_access_scope_id: String,
1721    pub status: String,
1722    pub status_message: Option<String>,
1723    pub warning_message: Option<String>,
1724    pub start_date: String,
1725    pub end_date: Option<String>,
1726    pub findings_found: String,
1727    pub analyzed_eni_count: i32,
1728    pub tags: Tags,
1729}
1730
1731#[derive(Debug, Clone, Default)]
1732pub struct NetworkInsightsPathFilterPortRange {
1733    pub from_port: Option<i32>,
1734    pub to_port: Option<i32>,
1735}
1736
1737#[derive(Debug, Clone, Default)]
1738pub struct NetworkInsightsPathFilter {
1739    pub destination_address: Option<String>,
1740    pub destination_port_range: Option<NetworkInsightsPathFilterPortRange>,
1741    pub source_address: Option<String>,
1742    pub source_port_range: Option<NetworkInsightsPathFilterPortRange>,
1743}
1744
1745#[derive(Debug, Clone)]
1746pub struct NetworkInsightsPath {
1747    pub network_insights_path_id: String,
1748    pub network_insights_path_arn: String,
1749    pub created_date: String,
1750    pub source: Option<String>,
1751    pub destination: Option<String>,
1752    pub source_arn: Option<String>,
1753    pub destination_arn: Option<String>,
1754    pub source_ip: Option<String>,
1755    pub destination_ip: Option<String>,
1756    pub protocol: String,
1757    pub destination_port: Option<i32>,
1758    pub tags: Tags,
1759    pub filter_at_source: NetworkInsightsPathFilter,
1760    pub filter_at_destination: NetworkInsightsPathFilter,
1761}
1762
1763#[derive(Debug, Clone)]
1764pub struct NetworkInsightsAnalysis {
1765    pub network_insights_analysis_id: String,
1766    pub network_insights_analysis_arn: String,
1767    pub network_insights_path_id: String,
1768    pub additional_accounts: Vec<String>,
1769    pub filter_in_arns: Vec<String>,
1770    pub start_date: String,
1771    pub end_date: Option<String>,
1772    pub status: String,
1773    pub status_message: Option<String>,
1774    pub warning_message: Option<String>,
1775    pub network_path_found: bool,
1776    pub tags: Tags,
1777}
1778
1779// ===== Group 6: Traffic Mirror =====
1780
1781#[derive(Debug, Clone, Default)]
1782pub struct TrafficMirrorPortRange {
1783    pub from_port: Option<i32>,
1784    pub to_port: Option<i32>,
1785}
1786
1787#[derive(Debug, Clone)]
1788pub struct TrafficMirrorFilterRule {
1789    pub traffic_mirror_filter_rule_id: String,
1790    pub traffic_mirror_filter_id: String,
1791    pub traffic_direction: String,
1792    pub rule_number: i32,
1793    pub rule_action: String,
1794    pub protocol: Option<i32>,
1795    pub destination_port_range: Option<TrafficMirrorPortRange>,
1796    pub source_port_range: Option<TrafficMirrorPortRange>,
1797    pub destination_cidr_block: String,
1798    pub source_cidr_block: String,
1799    pub description: Option<String>,
1800    pub tags: Tags,
1801}
1802
1803#[derive(Debug, Clone)]
1804pub struct TrafficMirrorFilter {
1805    pub traffic_mirror_filter_id: String,
1806    pub description: Option<String>,
1807    pub ingress_filter_rules: Vec<TrafficMirrorFilterRule>,
1808    pub egress_filter_rules: Vec<TrafficMirrorFilterRule>,
1809    pub network_services: Vec<String>,
1810    pub tags: Tags,
1811}
1812
1813#[derive(Debug, Clone)]
1814pub struct TrafficMirrorSession {
1815    pub traffic_mirror_session_id: String,
1816    pub traffic_mirror_target_id: String,
1817    pub traffic_mirror_filter_id: String,
1818    pub network_interface_id: String,
1819    pub owner_id: String,
1820    pub packet_length: Option<i32>,
1821    pub session_number: i32,
1822    pub virtual_network_id: Option<i32>,
1823    pub description: Option<String>,
1824    pub tags: Tags,
1825}
1826
1827#[derive(Debug, Clone)]
1828pub struct TrafficMirrorTarget {
1829    pub traffic_mirror_target_id: String,
1830    pub network_interface_id: Option<String>,
1831    pub network_load_balancer_arn: Option<String>,
1832    pub gateway_load_balancer_endpoint_id: Option<String>,
1833    pub r#type: String,
1834    pub description: Option<String>,
1835    pub owner_id: String,
1836    pub tags: Tags,
1837}
1838
1839// ===== Group 7: Client VPN =====
1840
1841#[derive(Debug, Clone, Default)]
1842pub struct ClientVpnEndpointStatus {
1843    pub code: String,
1844    pub message: Option<String>,
1845}
1846
1847#[derive(Debug, Clone, Default)]
1848pub struct ClientVpnAuthorizationRuleStatus {
1849    pub code: String,
1850    pub message: Option<String>,
1851}
1852
1853#[derive(Debug, Clone, Default)]
1854pub struct ClientVpnRouteStatus {
1855    pub code: String,
1856    pub message: Option<String>,
1857}
1858
1859#[derive(Debug, Clone, Default)]
1860pub struct ClientVpnAssociationStatus {
1861    pub code: String,
1862    pub message: Option<String>,
1863}
1864
1865#[derive(Debug, Clone, Default)]
1866pub struct ClientVpnConnectionStatus {
1867    pub code: String,
1868    pub message: Option<String>,
1869}
1870
1871#[derive(Debug, Clone)]
1872pub struct ClientVpnEndpoint {
1873    pub client_vpn_endpoint_id: String,
1874    pub description: Option<String>,
1875    pub status: ClientVpnEndpointStatus,
1876    pub creation_time: String,
1877    pub deletion_time: Option<String>,
1878    pub dns_name: String,
1879    pub client_cidr_block: String,
1880    pub dns_servers: Vec<String>,
1881    pub split_tunnel: bool,
1882    pub vpn_protocol: String,
1883    pub transport_protocol: String,
1884    pub vpn_port: i32,
1885    pub server_certificate_arn: String,
1886    pub authentication_options: Vec<String>,
1887    pub connection_log_options_enabled: bool,
1888    pub connection_log_options_cloudwatch_log_group: Option<String>,
1889    pub connection_log_options_cloudwatch_log_stream: Option<String>,
1890    pub tags: Tags,
1891    pub security_group_ids: Vec<String>,
1892    pub vpc_id: Option<String>,
1893    pub self_service_portal_url: Option<String>,
1894    pub self_service_portal: String,
1895    pub session_timeout_hours: i32,
1896    pub client_login_banner_enabled: bool,
1897    pub client_login_banner_text: Option<String>,
1898    pub disconnect_on_session_timeout: bool,
1899    pub client_route_enforcement_enforced: bool,
1900    pub client_certificate_revocation_list: Option<String>,
1901}
1902
1903#[derive(Debug, Clone)]
1904pub struct ClientVpnTargetNetworkAssociation {
1905    pub association_id: String,
1906    pub vpc_id: String,
1907    pub target_network_id: String, // subnet_id
1908    pub client_vpn_endpoint_id: String,
1909    pub security_groups: Vec<String>,
1910    pub status: ClientVpnAssociationStatus,
1911}
1912
1913#[derive(Debug, Clone)]
1914pub struct ClientVpnAuthorizationRule {
1915    pub client_vpn_endpoint_id: String,
1916    pub group_id: Option<String>,
1917    pub access_all: bool,
1918    pub destination_cidr: String,
1919    pub description: Option<String>,
1920    pub status: ClientVpnAuthorizationRuleStatus,
1921}
1922
1923#[derive(Debug, Clone)]
1924pub struct ClientVpnRoute {
1925    pub client_vpn_endpoint_id: String,
1926    pub destination_cidr: String,
1927    pub target_subnet: String,
1928    pub r#type: String,
1929    pub origin: String,
1930    pub status: ClientVpnRouteStatus,
1931    pub description: Option<String>,
1932}
1933
1934#[derive(Debug, Clone)]
1935pub struct ClientVpnConnection {
1936    pub connection_id: String,
1937    pub client_vpn_endpoint_id: String,
1938    pub username: Option<String>,
1939    pub status: ClientVpnConnectionStatus,
1940    pub posture_compliance_statuses: Vec<String>,
1941    pub common_name: Option<String>,
1942    pub connection_established_time: String,
1943    pub connection_end_time: Option<String>,
1944    pub ingress_bytes: String,
1945    pub egress_bytes: String,
1946    pub ingress_packets: String,
1947    pub egress_packets: String,
1948    pub client_ip: Option<String>,
1949    pub client_port: Option<String>,
1950    pub timestamp: String,
1951}
1952
1953// ===== Group 7: Local Gateway =====
1954
1955#[derive(Debug, Clone)]
1956pub struct LocalGateway {
1957    pub local_gateway_id: String,
1958    pub outpost_arn: String,
1959    pub owner_id: String,
1960    pub state: String,
1961    pub tags: Tags,
1962}
1963
1964#[derive(Debug, Clone)]
1965pub struct LocalGatewayRoute {
1966    pub destination_cidr_block: String,
1967    pub local_gateway_route_table_id: String,
1968    pub r#type: String,
1969    pub state: String,
1970    pub local_gateway_route_table_arn: Option<String>,
1971    pub owner_id: String,
1972    pub subnet_id: Option<String>,
1973    pub network_interface_id: Option<String>,
1974    pub destination_prefix_list_id: Option<String>,
1975    pub coip_pool_id: Option<String>,
1976    pub local_gateway_virtual_interface_group_id: Option<String>,
1977}
1978
1979#[derive(Debug, Clone)]
1980pub struct LocalGatewayRouteTable {
1981    pub local_gateway_route_table_id: String,
1982    pub local_gateway_route_table_arn: String,
1983    pub local_gateway_id: String,
1984    pub owner_id: String,
1985    pub state: String,
1986    pub mode: String,
1987    pub tags: Tags,
1988    pub state_reason_code: Option<String>,
1989    pub state_reason_message: Option<String>,
1990}
1991
1992#[derive(Debug, Clone)]
1993pub struct LocalGatewayRouteTableVirtualInterfaceGroupAssociation {
1994    pub local_gateway_route_table_virtual_interface_group_association_id: String,
1995    pub local_gateway_virtual_interface_group_id: String,
1996    pub local_gateway_route_table_id: String,
1997    pub local_gateway_route_table_arn: String,
1998    pub local_gateway_id: String,
1999    pub owner_id: String,
2000    pub state: String,
2001    pub tags: Tags,
2002}
2003
2004#[derive(Debug, Clone)]
2005pub struct LocalGatewayRouteTableVpcAssociation {
2006    pub local_gateway_route_table_vpc_association_id: String,
2007    pub local_gateway_route_table_id: String,
2008    pub local_gateway_route_table_arn: String,
2009    pub local_gateway_id: String,
2010    pub vpc_id: String,
2011    pub owner_id: String,
2012    pub state: String,
2013    pub tags: Tags,
2014}
2015
2016#[derive(Debug, Clone)]
2017pub struct LocalGatewayVirtualInterface {
2018    pub local_gateway_virtual_interface_id: String,
2019    pub local_gateway_id: String,
2020    pub vlan: i32,
2021    pub local_address: String,
2022    pub peer_address: String,
2023    pub local_bgp_asn: i32,
2024    pub peer_bgp_asn: i32,
2025    pub owner_id: String,
2026    pub tags: Tags,
2027    pub configuration_state: String,
2028    pub peer_bgp_asn_extended: Option<i64>,
2029    pub local_gateway_virtual_interface_arn: Option<String>,
2030}
2031
2032#[derive(Debug, Clone)]
2033pub struct LocalGatewayVirtualInterfaceGroup {
2034    pub local_gateway_virtual_interface_group_id: String,
2035    pub local_gateway_virtual_interface_ids: Vec<String>,
2036    pub local_gateway_id: String,
2037    pub owner_id: String,
2038    pub tags: Tags,
2039    pub configuration_state: Option<String>,
2040    pub local_bgp_asn: i32,
2041    pub local_bgp_asn_extended: Option<i64>,
2042    pub local_gateway_virtual_interface_group_arn: Option<String>,
2043}
2044
2045// ===== Group 8: Route Server =====
2046
2047/// A Route Server resource. Tracks BGP route exchange between AWS-managed
2048/// route servers and customer route reflectors deployed in a VPC.
2049#[derive(Debug, Clone)]
2050pub struct RouteServer {
2051    pub route_server_id: String,
2052    pub route_server_arn: String,
2053    pub amazon_side_asn: i64,
2054    /// One of "pending", "available", "modifying", "deleting", "deleted".
2055    pub state: String,
2056    /// One of "enable", "disable", "reset".
2057    pub persist_routes: String,
2058    pub persist_routes_duration: Option<i64>,
2059    pub sns_notifications_enabled: bool,
2060    pub sns_topic_arn: Option<String>,
2061    pub tags: Tags,
2062}
2063
2064/// A Route Server endpoint -- a route server's foothold in a single subnet of a
2065/// VPC, materialised as an ENI.
2066#[derive(Debug, Clone)]
2067pub struct RouteServerEndpoint {
2068    pub route_server_endpoint_id: String,
2069    pub route_server_id: String,
2070    pub vpc_id: String,
2071    pub subnet_id: String,
2072    pub eni_id: String,
2073    pub eni_address: Option<String>,
2074    /// One of "pending", "available", "deleting", "deleted", "failed".
2075    pub state: String,
2076    pub failure_reason: Option<String>,
2077    pub tags: Tags,
2078}
2079
2080/// A BGP peer attached to a route server endpoint.
2081#[derive(Debug, Clone)]
2082pub struct RouteServerPeer {
2083    pub route_server_peer_id: String,
2084    pub route_server_endpoint_id: String,
2085    pub route_server_id: String,
2086    pub vpc_id: String,
2087    pub subnet_id: String,
2088    pub peer_address: String,
2089    /// One of "pending", "available", "deleting", "deleted", "failed".
2090    pub state: String,
2091    pub failure_reason: Option<String>,
2092    pub options: RouteServerPeerOptions,
2093    pub endpoint_eni_id: Option<String>,
2094    pub endpoint_eni_address: Option<String>,
2095    pub tags: Tags,
2096}
2097
2098#[derive(Debug, Clone, Default)]
2099pub struct RouteServerPeerOptions {
2100    pub peer_asn: i64,
2101    /// One of "bgp-keepalive", "bfd".
2102    pub peer_liveness_detection: String,
2103    pub bgp_options: Option<RouteServerBgpOptions>,
2104}
2105
2106#[derive(Debug, Clone, Default)]
2107pub struct RouteServerBgpOptions {
2108    pub peer_asn: Option<i64>,
2109    /// One of "bgp-keepalive", "bfd".
2110    pub peer_liveness_detection: Option<String>,
2111}
2112
2113/// A Route Server VPC association.
2114#[derive(Debug, Clone)]
2115pub struct RouteServerAssociation {
2116    pub route_server_id: String,
2117    pub vpc_id: String,
2118    /// One of "associating", "associated", "disassociating", "disassociated".
2119    pub state: String,
2120    /// Route tables that have route-server propagation enabled, in addition
2121    /// to whatever the VPC's main table is. Mutated by
2122    /// `EnableRouteServerPropagation` / `DisableRouteServerPropagation`.
2123    pub propagations: Vec<String>,
2124}
2125
2126// ===== Group 9: Verified Access =====
2127
2128/// A Verified Access instance.
2129#[derive(Debug, Clone)]
2130pub struct VerifiedAccessInstance {
2131    pub verified_access_instance_id: String,
2132    pub description: Option<String>,
2133    pub creation_time: String,
2134    pub last_updated_time: String,
2135    pub fips_enabled: bool,
2136    pub cidr_endpoints_custom_subdomain: Option<String>,
2137    pub name: Option<String>,
2138    /// IDs of attached trust providers (resolved into condensed views in
2139    /// responses).
2140    pub trust_provider_ids: Vec<String>,
2141    pub tags: Tags,
2142}
2143
2144/// A Verified Access trust provider.
2145#[derive(Debug, Clone)]
2146pub struct VerifiedAccessTrustProvider {
2147    pub verified_access_trust_provider_id: String,
2148    pub description: Option<String>,
2149    /// One of "user", "device".
2150    pub trust_provider_type: String,
2151    pub user_trust_provider_type: Option<String>,
2152    pub device_trust_provider_type: Option<String>,
2153    pub oidc_options: Option<VerifiedAccessOidcOptions>,
2154    pub device_options: Option<VerifiedAccessDeviceOptions>,
2155    pub native_application_oidc_options: Option<VerifiedAccessNativeApplicationOidcOptions>,
2156    pub policy_reference_name: String,
2157    pub creation_time: String,
2158    pub last_updated_time: String,
2159    pub sse_specification: VerifiedAccessSseSpecification,
2160    pub tags: Tags,
2161}
2162
2163#[derive(Debug, Clone, Default)]
2164pub struct VerifiedAccessOidcOptions {
2165    pub issuer: Option<String>,
2166    pub authorization_endpoint: Option<String>,
2167    pub token_endpoint: Option<String>,
2168    pub user_info_endpoint: Option<String>,
2169    pub client_id: Option<String>,
2170    pub client_secret: Option<String>,
2171    pub scope: Option<String>,
2172}
2173
2174#[derive(Debug, Clone, Default)]
2175pub struct VerifiedAccessDeviceOptions {
2176    pub tenant_id: Option<String>,
2177    pub public_signing_key_url: Option<String>,
2178}
2179
2180#[derive(Debug, Clone, Default)]
2181pub struct VerifiedAccessNativeApplicationOidcOptions {
2182    pub public_signing_key_endpoint: Option<String>,
2183    pub issuer: Option<String>,
2184    pub authorization_endpoint: Option<String>,
2185    pub token_endpoint: Option<String>,
2186    pub user_info_endpoint: Option<String>,
2187    pub client_id: Option<String>,
2188    pub client_secret: Option<String>,
2189    pub scope: Option<String>,
2190}
2191
2192#[derive(Debug, Clone, Default)]
2193pub struct VerifiedAccessSseSpecification {
2194    pub customer_managed_key_enabled: Option<bool>,
2195    pub kms_key_arn: Option<String>,
2196}
2197
2198/// A Verified Access group within an instance.
2199#[derive(Debug, Clone)]
2200pub struct VerifiedAccessGroup {
2201    pub verified_access_group_id: String,
2202    pub verified_access_group_arn: String,
2203    pub verified_access_instance_id: String,
2204    pub owner: String,
2205    pub description: Option<String>,
2206    pub creation_time: String,
2207    pub last_updated_time: String,
2208    pub deletion_time: Option<String>,
2209    pub sse_specification: VerifiedAccessSseSpecification,
2210    pub policy_document: Option<String>,
2211    pub policy_enabled: bool,
2212    pub tags: Tags,
2213}
2214
2215/// A Verified Access endpoint within a group.
2216#[derive(Debug, Clone)]
2217pub struct VerifiedAccessEndpoint {
2218    pub verified_access_endpoint_id: String,
2219    pub verified_access_instance_id: String,
2220    pub verified_access_group_id: String,
2221    pub application_domain: Option<String>,
2222    /// One of "load-balancer", "network-interface", "cidr", "rds".
2223    pub endpoint_type: String,
2224    pub attachment_type: String,
2225    pub domain_certificate_arn: Option<String>,
2226    pub endpoint_domain: Option<String>,
2227    pub device_validation_domain: Option<String>,
2228    pub security_group_ids: Vec<String>,
2229    pub load_balancer_options: Option<VerifiedAccessEndpointLoadBalancerOptions>,
2230    pub network_interface_options: Option<VerifiedAccessEndpointEniOptions>,
2231    pub cidr_options: Option<VerifiedAccessEndpointCidrOptions>,
2232    pub rds_options: Option<VerifiedAccessEndpointRdsOptions>,
2233    pub status_code: String,
2234    pub status_message: Option<String>,
2235    pub description: Option<String>,
2236    pub creation_time: String,
2237    pub last_updated_time: String,
2238    pub deletion_time: Option<String>,
2239    pub sse_specification: VerifiedAccessSseSpecification,
2240    pub policy_document: Option<String>,
2241    pub policy_enabled: bool,
2242    pub tags: Tags,
2243}
2244
2245#[derive(Debug, Clone, Default)]
2246pub struct VerifiedAccessEndpointPortRange {
2247    pub from_port: Option<i32>,
2248    pub to_port: Option<i32>,
2249}
2250
2251#[derive(Debug, Clone, Default)]
2252pub struct VerifiedAccessEndpointLoadBalancerOptions {
2253    pub load_balancer_arn: Option<String>,
2254    pub port: Option<i32>,
2255    pub port_ranges: Vec<VerifiedAccessEndpointPortRange>,
2256    pub protocol: Option<String>,
2257    pub subnet_ids: Vec<String>,
2258}
2259
2260#[derive(Debug, Clone, Default)]
2261pub struct VerifiedAccessEndpointEniOptions {
2262    pub network_interface_id: Option<String>,
2263    pub port: Option<i32>,
2264    pub port_ranges: Vec<VerifiedAccessEndpointPortRange>,
2265    pub protocol: Option<String>,
2266}
2267
2268#[derive(Debug, Clone, Default)]
2269pub struct VerifiedAccessEndpointCidrOptions {
2270    pub cidr: Option<String>,
2271    pub port_ranges: Vec<VerifiedAccessEndpointPortRange>,
2272    pub protocol: Option<String>,
2273    pub subnet_ids: Vec<String>,
2274}
2275
2276#[derive(Debug, Clone, Default)]
2277pub struct VerifiedAccessEndpointRdsOptions {
2278    pub port: Option<i32>,
2279    pub protocol: Option<String>,
2280    pub rds_db_cluster_arn: Option<String>,
2281    pub rds_db_instance_arn: Option<String>,
2282    pub rds_db_proxy_arn: Option<String>,
2283    pub rds_endpoint: Option<String>,
2284    pub subnet_ids: Vec<String>,
2285}
2286
2287/// A trust-provider <-> instance attachment record.
2288#[derive(Debug, Clone)]
2289pub struct VerifiedAccessTrustProviderAttachment {
2290    pub instance_id: String,
2291    pub trust_provider_id: String,
2292}
2293
2294/// Logging configuration for a Verified Access instance.
2295#[derive(Debug, Clone, Default)]
2296pub struct VerifiedAccessLogs {
2297    pub cloud_watch_logs_enabled: bool,
2298    pub cloud_watch_logs_log_group: Option<String>,
2299    pub kinesis_data_firehose_enabled: bool,
2300    pub kinesis_data_firehose_delivery_stream: Option<String>,
2301    pub s3_enabled: bool,
2302    pub s3_bucket_name: Option<String>,
2303    pub s3_bucket_owner: Option<String>,
2304    pub s3_prefix: Option<String>,
2305    pub log_version: Option<String>,
2306    pub include_trust_context: Option<bool>,
2307}
2308
2309// --- Group 10 additions: Capacity Reservation extensions ---
2310
2311/// Pending / accepted billing-ownership offer for a capacity reservation.
2312#[derive(Debug, Clone)]
2313pub struct BillingOwnershipOffer {
2314    pub capacity_reservation_id: String,
2315    pub unused_reservation_billing_owner_id: String,
2316    pub requested_by: String,
2317    /// One of "pending", "accepted", "cancelled", "rejected", "deleted", "expired".
2318    pub status: String,
2319    pub status_message: Option<String>,
2320    pub last_update_time: String,
2321}
2322
2323/// S3 destination for a Capacity Manager data export.
2324#[derive(Debug, Clone, Default)]
2325pub struct S3DestinationOptions {
2326    pub bucket: String,
2327    pub prefix: Option<String>,
2328}
2329
2330/// Capacity Manager data export.
2331#[derive(Debug, Clone)]
2332pub struct CapacityManagerDataExport {
2333    pub data_export_id: String,
2334    /// One of "ondemand", "daily", "weekly", "monthly".
2335    pub schedule: String,
2336    pub organization_account_ids: Vec<String>,
2337    /// One of "parquet", "csv".
2338    pub output_format: String,
2339    pub s3_destination: S3DestinationOptions,
2340    /// One of "pending", "active", "paused", "failed", "deleted".
2341    pub status: String,
2342    pub status_message: Option<String>,
2343    pub last_export_time: Option<String>,
2344    pub next_export_time: Option<String>,
2345    pub create_time: String,
2346    pub tags: Tags,
2347}
2348
2349/// Account-level Capacity Manager Organizations access.
2350#[derive(Debug, Clone)]
2351pub struct CapacityManagerOrganizationsAccess {
2352    /// One of "enabled", "disabled", "enabling", "disabling".
2353    pub state: String,
2354    pub last_updated_time: String,
2355}
2356
2357/// Interruptible capacity-reservation allocation record.
2358#[derive(Debug, Clone)]
2359pub struct InterruptibleCapacityReservationAllocation {
2360    pub allocation_id: String,
2361    pub capacity_reservation_id: String,
2362    pub instance_count: i32,
2363    pub start_date_time: String,
2364    pub end_date_time: String,
2365    /// One of "scheduled", "active", "completed", "failed", "cancelled".
2366    pub state: String,
2367    /// One of "scheduled", "on-demand".
2368    pub allocation_type: String,
2369    pub tags: Tags,
2370}
2371
2372/// A Capacity Block purchase record (fixed-duration capacity reservation).
2373#[derive(Debug, Clone)]
2374pub struct CapacityBlock {
2375    pub capacity_block_id: String,
2376    pub capacity_reservation_id: String,
2377    pub capacity_block_offering_id: String,
2378    pub instance_type: String,
2379    pub instance_count: i32,
2380    pub availability_zone: String,
2381    pub start_date: String,
2382    pub end_date: String,
2383    /// One of "default", "dedicated".
2384    pub tenancy: String,
2385    pub currency_code: String,
2386    pub upfront_fee: String,
2387    pub commitment_duration_in_seconds: i64,
2388    pub capacity_reservation_arn: String,
2389    pub tags: Tags,
2390}
2391
2392/// Extension of an existing Capacity Block.
2393#[derive(Debug, Clone)]
2394pub struct CapacityBlockExtension {
2395    pub capacity_block_extension_id: String,
2396    pub capacity_reservation_id: String,
2397    pub instance_type: String,
2398    pub availability_zone: String,
2399    pub instance_count: i32,
2400    pub availability_zone_id: Option<String>,
2401    pub start_date: String,
2402    pub end_date: String,
2403    pub capacity_block_extension_offering_id: String,
2404    /// One of "payment-pending", "payment-failed", "payment-succeeded".
2405    pub capacity_block_extension_status: String,
2406    pub capacity_block_extension_purchase_date: String,
2407    pub capacity_block_extension_duration_hours: i32,
2408    pub currency_code: String,
2409    pub upfront_fee: String,
2410    pub capacity_reservation_arn: Option<String>,
2411    pub capacity_block_extension_arn: Option<String>,
2412}
2413
2414/// Optional commitment metadata attached to a capacity reservation.
2415#[derive(Debug, Clone, Default)]
2416pub struct CapacityReservationCommitmentInfo {
2417    pub commitment_end_date: Option<String>,
2418    pub committed_instance_count: Option<i32>,
2419}
2420
2421/// Per-instance capacity-reservation specification (response shape).
2422#[derive(Debug, Clone, Default)]
2423pub struct CapacityReservationSpecificationResponse {
2424    /// One of "open", "none", "capacity-reservations-only".
2425    pub capacity_reservation_preference: Option<String>,
2426    pub capacity_reservation_id: Option<String>,
2427    pub capacity_reservation_resource_group_arn: Option<String>,
2428}
2429
2430// ---------------------------------------------------------------------------
2431// Group 11: Transit Gateway extension types
2432// ---------------------------------------------------------------------------
2433
2434/// TGW multicast domain.
2435#[derive(Debug, Clone)]
2436pub struct TransitGatewayMulticastDomain {
2437    pub transit_gateway_multicast_domain_id: String,
2438    pub transit_gateway_id: String,
2439    pub transit_gateway_multicast_domain_arn: String,
2440    pub owner_id: String,
2441    /// One of `enable` / `disable`.
2442    pub igmpv2_support: String,
2443    pub static_sources_support: String,
2444    pub auto_accept_shared_associations: String,
2445    /// One of `pending` / `available` / `deleting` / `deleted`.
2446    pub state: String,
2447    pub creation_time: String,
2448    pub tags: Tags,
2449}
2450
2451/// One subnet within a `TransitGatewayMulticastDomainAssociation`.
2452#[derive(Debug, Clone)]
2453pub struct MulticastSubnetAssociation {
2454    pub subnet_id: String,
2455    /// One of `associating` / `associated` / `disassociating` / `disassociated`
2456    /// / `rejected` / `failed` / `pendingAcceptance`.
2457    pub state: String,
2458}
2459
2460/// VPC↔domain association keyed by `(domain_id, attachment_id)`.
2461#[derive(Debug, Clone)]
2462pub struct TransitGatewayMulticastDomainAssociation {
2463    pub transit_gateway_multicast_domain_id: String,
2464    pub transit_gateway_attachment_id: String,
2465    pub resource_id: String,
2466    /// Always `vpc` in this mock.
2467    pub resource_type: String,
2468    pub subnets: Vec<MulticastSubnetAssociation>,
2469}
2470
2471/// Multicast group member (keyed by `(domain_id, group_ip, network_interface_id)`).
2472#[derive(Debug, Clone)]
2473pub struct TransitGatewayMulticastGroupMember {
2474    pub transit_gateway_multicast_domain_id: String,
2475    pub group_ip_address: String,
2476    pub transit_gateway_attachment_id: Option<String>,
2477    pub subnet_id: Option<String>,
2478    pub resource_id: Option<String>,
2479    /// Always `vpc` in this mock.
2480    pub resource_type: String,
2481    pub network_interface_id: String,
2482    /// Always `igmp` for members registered through the API.
2483    pub member_type: String,
2484    pub source_type: String,
2485}
2486
2487/// Multicast group source (keyed by `(domain_id, group_ip, network_interface_id)`).
2488#[derive(Debug, Clone)]
2489pub struct TransitGatewayMulticastGroupSource {
2490    pub transit_gateway_multicast_domain_id: String,
2491    pub group_ip_address: String,
2492    pub transit_gateway_attachment_id: Option<String>,
2493    pub subnet_id: Option<String>,
2494    pub resource_id: Option<String>,
2495    pub resource_type: String,
2496    pub network_interface_id: String,
2497    pub member_type: String,
2498    pub source_type: String,
2499}
2500
2501/// TGW connect attachment (GRE-tunnelled connect attachment over a transport VPC attachment).
2502#[derive(Debug, Clone)]
2503pub struct TransitGatewayConnect {
2504    pub transit_gateway_attachment_id: String,
2505    pub transport_transit_gateway_attachment_id: String,
2506    pub transit_gateway_id: String,
2507    /// One of `pendingAcceptance` / `rollingBack` / `pending` / `available` /
2508    /// `modifying` / `deleting` / `deleted` / `failed` / `rejected` / `rejecting`
2509    /// / `failing`.
2510    pub state: String,
2511    pub creation_time: String,
2512    pub protocol: String,
2513    pub tags: Tags,
2514}
2515
2516/// TGW connect peer attached to a `TransitGatewayConnect`.
2517#[derive(Debug, Clone)]
2518pub struct TransitGatewayConnectPeer {
2519    pub transit_gateway_attachment_id: String,
2520    pub transit_gateway_connect_peer_id: String,
2521    /// One of `pending` / `available` / `deleting` / `deleted`.
2522    pub state: String,
2523    pub creation_time: String,
2524    pub transit_gateway_address: String,
2525    pub peer_address: String,
2526    pub inside_cidr_blocks: Vec<String>,
2527    pub protocol: String,
2528    pub bgp_configurations: Vec<TransitGatewayAttachmentBgpConfiguration>,
2529    pub tags: Tags,
2530}
2531
2532#[derive(Debug, Clone, Default)]
2533pub struct TransitGatewayAttachmentBgpConfiguration {
2534    pub transit_gateway_asn: i64,
2535    pub peer_asn: i64,
2536    pub transit_gateway_address: String,
2537    pub peer_address: String,
2538    /// `up` / `down`.
2539    pub bgp_status: String,
2540}
2541
2542/// TGW metering policy (one record per policy ID).
2543#[derive(Debug, Clone)]
2544pub struct TransitGatewayMeteringPolicy {
2545    pub transit_gateway_metering_policy_id: String,
2546    pub transit_gateway_metering_policy_arn: String,
2547    pub transit_gateway_id: String,
2548    pub name: String,
2549    pub description: Option<String>,
2550    /// `available` / `deleted`.
2551    pub state: String,
2552    pub tags: Tags,
2553    pub last_updated_time: String,
2554    pub version: i32,
2555    pub middlebox_attachment_ids: Vec<String>,
2556}
2557
2558/// One entry within a metering policy. Stored separately so `Modify*` /
2559/// `Delete*Entry` can mutate independently.
2560#[derive(Debug, Clone)]
2561pub struct TransitGatewayMeteringPolicyEntry {
2562    pub transit_gateway_metering_policy_entry_id: String,
2563    pub transit_gateway_metering_policy_id: String,
2564    pub sequence_number: i32,
2565    /// `meter` / `exclude`.
2566    pub action: String,
2567    pub source_cidr_block: Option<String>,
2568    pub destination_cidr_block: Option<String>,
2569    pub protocol: Option<String>,
2570    pub source_port: Option<String>,
2571    pub destination_port: Option<String>,
2572    pub dimensions: Vec<String>,
2573    pub state: String,
2574}
2575
2576/// TGW policy table.
2577#[derive(Debug, Clone)]
2578pub struct TransitGatewayPolicyTable {
2579    pub transit_gateway_policy_table_id: String,
2580    pub transit_gateway_id: String,
2581    /// `pending` / `available` / `deleting` / `deleted`.
2582    pub state: String,
2583    pub creation_time: String,
2584    pub tags: Tags,
2585}
2586
2587/// Policy-table-to-attachment association (keyed by `(policy_table_id, attachment_id)`).
2588#[derive(Debug, Clone)]
2589pub struct TransitGatewayPolicyTableAssociation {
2590    pub transit_gateway_policy_table_id: String,
2591    pub transit_gateway_attachment_id: String,
2592    /// Always `vpc` for now.
2593    pub resource_type: String,
2594    pub resource_id: String,
2595    /// `associating` / `associated` / `disassociating` / `disassociated`.
2596    pub state: String,
2597}
2598
2599/// Prefix-list reference attached to a TGW route table (keyed by
2600/// `(route_table_id, prefix_list_id)`).
2601#[derive(Debug, Clone)]
2602pub struct TransitGatewayPrefixListReference {
2603    pub transit_gateway_route_table_id: String,
2604    pub prefix_list_id: String,
2605    pub prefix_list_owner_id: String,
2606    /// `pending` / `available` / `modifying` / `deleting`.
2607    pub state: String,
2608    pub blackhole: bool,
2609    pub transit_gateway_attachment_id: Option<String>,
2610    pub resource_id: Option<String>,
2611    pub resource_type: Option<String>,
2612}
2613
2614/// TGW route-table announcement (per-table cross-network announcement).
2615#[derive(Debug, Clone)]
2616pub struct TransitGatewayRouteTableAnnouncement {
2617    pub transit_gateway_route_table_announcement_id: String,
2618    pub transit_gateway_id: String,
2619    pub core_network_id: String,
2620    pub peer_transit_gateway_id: String,
2621    pub peer_core_network_id: Option<String>,
2622    pub peering_attachment_id: String,
2623    /// `outgoing` / `incoming`.
2624    pub announcement_direction: String,
2625    pub transit_gateway_route_table_id: String,
2626    /// `available` / `pending` / `failing` / `failed` / `deleting` / `deleted`.
2627    pub state: String,
2628    pub creation_time: String,
2629    pub tags: Tags,
2630}
2631
2632// ---------------------------------------------------------------------------
2633// Group 12: IPAM (IP Address Manager) types
2634// ---------------------------------------------------------------------------
2635
2636/// One operating region for an IPAM or resource discovery.
2637#[derive(Debug, Clone)]
2638pub struct IpamOperatingRegion {
2639    pub region_name: String,
2640}
2641
2642/// Top-level IPAM record.
2643#[derive(Debug, Clone)]
2644pub struct Ipam {
2645    pub ipam_id: String,
2646    pub ipam_arn: String,
2647    pub ipam_region: String,
2648    pub public_default_scope_id: String,
2649    pub private_default_scope_id: String,
2650    pub scope_count: i32,
2651    pub description: Option<String>,
2652    pub operating_regions: Vec<IpamOperatingRegion>,
2653    /// `create-in-progress` / `create-complete` / `modify-in-progress` /
2654    /// `modify-complete` / `delete-in-progress` / `delete-complete` / etc.
2655    pub state: String,
2656    pub owner_id: String,
2657    pub default_resource_discovery_id: Option<String>,
2658    pub default_resource_discovery_association_id: Option<String>,
2659    pub resource_discovery_association_count: i32,
2660    /// `free` / `advanced`.
2661    pub tier: String,
2662    pub enable_private_gua: bool,
2663    /// `ipam-owner` / `resource-owner`.
2664    pub metered_account: String,
2665    pub tags: Tags,
2666}
2667
2668/// One IPAM scope (private or public). Created automatically when an IPAM
2669/// is created (one default `private` and one default `public`); additional
2670/// scopes can be created with `CreateIpamScope`.
2671#[derive(Debug, Clone)]
2672pub struct IpamScope {
2673    pub ipam_scope_id: String,
2674    pub ipam_scope_arn: String,
2675    pub ipam_arn: String,
2676    pub ipam_region: String,
2677    /// `public` / `private`.
2678    pub ipam_scope_type: String,
2679    pub is_default: bool,
2680    pub description: Option<String>,
2681    pub pool_count: i32,
2682    pub state: String,
2683    pub tags: Tags,
2684    pub owner_id: String,
2685}
2686
2687/// One IPAM pool inside a scope.
2688#[derive(Debug, Clone)]
2689pub struct IpamPool {
2690    pub ipam_pool_id: String,
2691    pub source_ipam_pool_id: Option<String>,
2692    pub ipam_pool_arn: String,
2693    pub ipam_scope_arn: String,
2694    pub ipam_scope_type: String,
2695    pub ipam_arn: String,
2696    pub ipam_region: String,
2697    pub locale: String,
2698    pub pool_depth: i32,
2699    pub state: String,
2700    pub state_message: Option<String>,
2701    pub description: Option<String>,
2702    pub auto_import: bool,
2703    pub publicly_advertisable: bool,
2704    /// `ipv4` / `ipv6`.
2705    pub address_family: String,
2706    pub allocation_min_netmask_length: Option<i32>,
2707    pub allocation_max_netmask_length: Option<i32>,
2708    pub allocation_default_netmask_length: Option<i32>,
2709    pub allocation_resource_tags: Vec<(String, String)>,
2710    pub aws_service: Option<String>,
2711    pub public_ip_source: Option<String>,
2712    pub source_resource_id: Option<String>,
2713    pub source_resource_type: Option<String>,
2714    pub source_resource_region: Option<String>,
2715    pub source_resource_owner: Option<String>,
2716    pub tags: Tags,
2717    pub owner_id: String,
2718    pub allocation_count: i32,
2719}
2720
2721/// One CIDR provisioned into an IPAM pool.
2722#[derive(Debug, Clone)]
2723pub struct IpamPoolCidr {
2724    pub cidr: String,
2725    /// `pending-provision` / `provisioned` / `failed-provision` /
2726    /// `pending-deprovision` / `deprovisioned` / `failed-deprovision`.
2727    pub state: String,
2728    pub failure_reason: Option<String>,
2729    pub ipam_pool_cidr_id: String,
2730    pub netmask_length: Option<i32>,
2731}
2732
2733/// One allocation against an IPAM pool. Keyed in state by
2734/// `(ipam_pool_id, ipam_pool_allocation_id)`.
2735#[derive(Debug, Clone)]
2736pub struct IpamPoolAllocation {
2737    pub ipam_pool_allocation_id: String,
2738    pub cidr: String,
2739    pub ipam_pool_id: String,
2740    pub description: Option<String>,
2741    pub resource_id: Option<String>,
2742    /// `ipam-pool` / `vpc` / `subnet` / `ec2-public-ipv4-pool` / `custom`.
2743    pub resource_type: String,
2744    pub resource_region: Option<String>,
2745    pub resource_owner: Option<String>,
2746}
2747
2748/// IPAM resource discovery record (for cross-account discovery).
2749#[derive(Debug, Clone)]
2750pub struct IpamResourceDiscovery {
2751    pub ipam_resource_discovery_id: String,
2752    pub ipam_resource_discovery_arn: String,
2753    pub ipam_resource_discovery_region: String,
2754    pub description: Option<String>,
2755    pub operating_regions: Vec<IpamOperatingRegion>,
2756    pub is_default: bool,
2757    pub state: String,
2758    pub owner_id: String,
2759    pub tags: Tags,
2760}
2761
2762/// Association between an IPAM and a resource discovery.
2763#[derive(Debug, Clone)]
2764pub struct IpamResourceDiscoveryAssociation {
2765    pub ipam_resource_discovery_association_id: String,
2766    pub ipam_resource_discovery_association_arn: String,
2767    pub ipam_arn: String,
2768    pub ipam_id: String,
2769    pub ipam_region: String,
2770    pub ipam_resource_discovery_id: String,
2771    pub owner_id: String,
2772    pub is_default: bool,
2773    /// `active` / `not-found`.
2774    pub resource_discovery_status: String,
2775    /// `associate-in-progress` / `associate-complete` / `associate-failed` /
2776    /// `disassociate-in-progress` / `disassociate-complete` / `disassociate-failed` /
2777    /// `isolate-in-progress` / `isolate-complete` / `restore-in-progress`.
2778    pub state: String,
2779    pub tags: Tags,
2780}
2781
2782/// BYO-ASN provisioned into an IPAM. Keyed by `(ipam_id, asn)`.
2783#[derive(Debug, Clone)]
2784pub struct IpamByoasn {
2785    pub asn: String,
2786    pub ipam_id: String,
2787    pub description: Option<String>,
2788    /// `deprovisioned` / `failed-deprovision` / `failed-provision` /
2789    /// `pending-deprovision` / `pending-provision` / `provisioned`.
2790    pub state: String,
2791    pub status_message: Option<String>,
2792}
2793
2794/// IPAM external resource verification token.
2795#[derive(Debug, Clone)]
2796pub struct IpamExternalResourceVerificationToken {
2797    pub ipam_external_resource_verification_token_id: String,
2798    pub ipam_external_resource_verification_token_arn: String,
2799    pub ipam_id: String,
2800    pub ipam_arn: String,
2801    pub ipam_region: String,
2802    pub token_value: String,
2803    pub token_name: String,
2804    pub not_after: String,
2805    /// `valid` / `expired`.
2806    pub status: String,
2807    pub state: String,
2808    pub tags: Tags,
2809}
2810
2811/// IPAM allocation policy. Stores its current allocation rules (modifiable
2812/// via `ModifyIpamPolicyAllocationRules`).
2813#[derive(Debug, Clone)]
2814pub struct IpamPolicy {
2815    pub ipam_policy_id: String,
2816    pub ipam_policy_arn: String,
2817    pub ipam_arn: String,
2818    pub ipam_region: String,
2819    pub policy_name: String,
2820    /// Always `allocation` for now.
2821    pub policy_type: String,
2822    pub description: Option<String>,
2823    pub state: String,
2824    pub allocation_rules: Vec<IpamPolicyAllocationRule>,
2825    pub tags: Tags,
2826    pub owner_id: String,
2827}
2828
2829/// One allocation rule in an IPAM policy.
2830#[derive(Debug, Clone)]
2831pub struct IpamPolicyAllocationRule {
2832    pub source_ipam_pool_id: Option<String>,
2833}
2834
2835/// IPAM Prefix List Resolver.
2836#[derive(Debug, Clone)]
2837pub struct IpamPrefixListResolver {
2838    pub ipam_prefix_list_resolver_id: String,
2839    pub ipam_prefix_list_resolver_arn: String,
2840    pub ipam_arn: String,
2841    pub ipam_region: String,
2842    pub name: String,
2843    pub description: Option<String>,
2844    /// `pending` / `available` / `modifying` / `deleting` / `deleted`.
2845    pub state: String,
2846    pub owner_id: String,
2847    pub target_count: i32,
2848    pub tags: Tags,
2849}
2850
2851/// One target attached to a prefix-list resolver. Keyed by
2852/// `(resolver_id, target_id)`.
2853#[derive(Debug, Clone)]
2854pub struct IpamPrefixListResolverTarget {
2855    pub ipam_prefix_list_resolver_target_id: String,
2856    pub ipam_prefix_list_resolver_id: String,
2857    pub target_resource_arn: String,
2858    pub target_resource_type: String,
2859    pub target_resource_region: String,
2860    pub owner_id: String,
2861    pub state: String,
2862    pub tags: Tags,
2863}
2864
2865// ---------------------------------------------------------------------------
2866// Batch B additions: VolumeModification, ImportVolumeTask, BundleTask,
2867// IdFormat, OutpostLag, ExportImageTask.
2868// ---------------------------------------------------------------------------
2869
2870/// Pending or completed `ModifyVolume` operation, keyed by volume_id.
2871#[derive(Debug, Clone)]
2872pub struct VolumeModification {
2873    pub volume_id: String,
2874    /// One of "modifying", "optimizing", "completed", "failed".
2875    pub modification_state: String,
2876    pub status_message: Option<String>,
2877    pub target_size: Option<i32>,
2878    pub target_iops: Option<i32>,
2879    pub target_throughput: Option<i32>,
2880    pub target_volume_type: Option<String>,
2881    pub target_multi_attach_enabled: Option<bool>,
2882    pub original_size: Option<i32>,
2883    pub original_iops: Option<i32>,
2884    pub original_throughput: Option<i32>,
2885    pub original_volume_type: Option<String>,
2886    pub original_multi_attach_enabled: Option<bool>,
2887    /// Progress percent, 0-100.
2888    pub progress: i64,
2889    pub start_time: String,
2890    pub end_time: Option<String>,
2891}
2892
2893/// `ImportVolume` conversion-task record (legacy, distinct from
2894/// `ConversionTask` for VM-import). Keyed by conversion_task_id.
2895#[derive(Debug, Clone)]
2896pub struct ImportVolumeTask {
2897    pub conversion_task_id: String,
2898    pub expiration_time: String,
2899    pub image: DiskImageDescription,
2900    pub volume: DiskImageVolumeDescription,
2901    pub availability_zone: String,
2902    pub bytes_converted: i64,
2903    pub description: Option<String>,
2904    /// One of "active", "cancelling", "cancelled", "completed".
2905    pub status: String,
2906    pub status_message: Option<String>,
2907}
2908
2909#[derive(Debug, Clone, Default)]
2910pub struct DiskImageDescription {
2911    pub format: String,
2912    pub size: i64,
2913    pub import_manifest_url: String,
2914    pub checksum: Option<String>,
2915}
2916
2917#[derive(Debug, Clone, Default)]
2918pub struct DiskImageVolumeDescription {
2919    pub size: i64,
2920    pub id: String,
2921}
2922
2923/// `BundleInstance` task tracked by ID. AWS retired the operation but
2924/// continues to honour the API.
2925#[derive(Debug, Clone)]
2926pub struct BundleTask {
2927    pub bundle_id: String,
2928    pub instance_id: String,
2929    pub bucket: String,
2930    pub prefix: String,
2931    pub start_time: String,
2932    pub update_time: String,
2933    /// One of "pending", "waiting-for-shutdown", "bundling", "storing",
2934    /// "cancelling", "complete", "failed".
2935    pub state: String,
2936    pub progress: String,
2937    pub error_code: Option<String>,
2938    pub error_message: Option<String>,
2939}
2940
2941/// Per-resource-type long/short ID format toggle.
2942#[derive(Debug, Clone)]
2943pub struct IdFormatEntry {
2944    pub use_long_ids: bool,
2945    pub deadline: Option<String>,
2946}
2947
2948/// Outpost link aggregation group, keyed by outpost-lag ID.
2949#[derive(Debug, Clone)]
2950pub struct OutpostLag {
2951    pub outpost_lag_id: String,
2952    pub outpost_arn: String,
2953    pub owner_id: String,
2954    pub state: String,
2955    pub local_gateway_virtual_interface_ids: Vec<String>,
2956    pub service_link_virtual_interface_ids: Vec<String>,
2957    pub tags: Tags,
2958}
2959
2960/// `ExportImage` task. Keyed by export_image_task_id.
2961#[derive(Debug, Clone)]
2962pub struct ExportImageTask {
2963    pub export_image_task_id: String,
2964    pub description: Option<String>,
2965    pub image_id: String,
2966    pub role_name: String,
2967    /// One of "active", "completed", "deleting", "deleted".
2968    pub status: String,
2969    pub status_message: Option<String>,
2970    pub progress: String,
2971    pub s3_export_location: ExportTaskS3Location,
2972    /// One of "vmdk", "raw", "vhd".
2973    pub disk_image_format: String,
2974    pub tags: Tags,
2975}
2976
2977#[derive(Debug, Clone, Default)]
2978pub struct ExportTaskS3Location {
2979    pub s3_bucket: String,
2980    pub s3_prefix: Option<String>,
2981}
2982
2983/// AWS Network Performance metric subscription, keyed in state by
2984/// `(source, destination, metric, statistic)`.
2985#[derive(Debug, Clone, Default)]
2986pub struct AwsNetworkPerformanceSubscription {
2987    pub source: String,
2988    pub destination: String,
2989    /// e.g. `aggregate-latency`.
2990    pub metric: String,
2991    /// e.g. `p50`.
2992    pub statistic: String,
2993    /// e.g. `five-minutes`.
2994    pub period: String,
2995}