Skip to main content

fakecloud_sdk/
types.rs

1use serde::{Deserialize, Serialize};
2
3// ── Health ──────────────────────────────────────────────────────────
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct HealthResponse {
8    pub status: String,
9    pub version: String,
10    pub services: Vec<String>,
11}
12
13// ── Reset ───────────────────────────────────────────────────────────
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub struct ResetResponse {
18    pub status: String,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
22#[serde(rename_all = "camelCase")]
23pub struct ResetServiceResponse {
24    pub reset: String,
25}
26
27// ── RDS ─────────────────────────────────────────────────────────────
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct RdsTag {
32    pub key: String,
33    pub value: String,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37#[serde(rename_all = "camelCase")]
38pub struct RdsInstance {
39    pub db_instance_identifier: String,
40    pub db_instance_arn: String,
41    pub db_instance_class: String,
42    pub engine: String,
43    pub engine_version: String,
44    pub db_instance_status: String,
45    pub master_username: String,
46    pub db_name: Option<String>,
47    pub endpoint_address: String,
48    pub port: i32,
49    pub allocated_storage: i32,
50    pub publicly_accessible: bool,
51    pub deletion_protection: bool,
52    pub created_at: String,
53    pub dbi_resource_id: String,
54    pub container_id: String,
55    pub host_port: u16,
56    pub tags: Vec<RdsTag>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct RdsInstancesResponse {
62    pub instances: Vec<RdsInstance>,
63}
64
65// ── Lambda ──────────────────────────────────────────────────────────
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
68#[serde(rename_all = "camelCase")]
69pub struct LambdaInvocation {
70    pub function_arn: String,
71    pub payload: String,
72    pub source: String,
73    pub timestamp: String,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct LambdaInvocationsResponse {
79    pub invocations: Vec<LambdaInvocation>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
83#[serde(rename_all = "camelCase")]
84pub struct WarmContainer {
85    pub function_name: String,
86    pub runtime: String,
87    pub container_id: String,
88    pub last_used_secs_ago: u64,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
92#[serde(rename_all = "camelCase")]
93pub struct WarmContainersResponse {
94    pub containers: Vec<WarmContainer>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct EvictContainerResponse {
100    pub evicted: bool,
101}
102
103// ── SES ─────────────────────────────────────────────────────────────
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
106#[serde(rename_all = "camelCase")]
107pub struct SentEmail {
108    pub message_id: String,
109    pub from: String,
110    pub to: Vec<String>,
111    #[serde(default)]
112    pub cc: Vec<String>,
113    #[serde(default)]
114    pub bcc: Vec<String>,
115    pub subject: Option<String>,
116    pub html_body: Option<String>,
117    pub text_body: Option<String>,
118    pub raw_data: Option<String>,
119    pub template_name: Option<String>,
120    pub template_data: Option<String>,
121    pub timestamp: String,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize)]
125#[serde(rename_all = "camelCase")]
126pub struct SesEmailsResponse {
127    pub emails: Vec<SentEmail>,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
131#[serde(rename_all = "camelCase")]
132pub struct InboundEmailRequest {
133    pub from: String,
134    pub to: Vec<String>,
135    pub subject: String,
136    pub body: String,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize)]
140#[serde(rename_all = "camelCase")]
141pub struct InboundActionExecuted {
142    pub rule: String,
143    pub action_type: String,
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize)]
147#[serde(rename_all = "camelCase")]
148pub struct InboundEmailResponse {
149    pub message_id: String,
150    pub matched_rules: Vec<String>,
151    pub actions_executed: Vec<InboundActionExecuted>,
152}
153
154// ── SNS ─────────────────────────────────────────────────────────────
155
156#[derive(Debug, Clone, Serialize, Deserialize)]
157#[serde(rename_all = "camelCase")]
158pub struct SnsMessage {
159    pub message_id: String,
160    pub topic_arn: String,
161    pub message: String,
162    pub subject: Option<String>,
163    pub timestamp: String,
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
167#[serde(rename_all = "camelCase")]
168pub struct SnsMessagesResponse {
169    pub messages: Vec<SnsMessage>,
170}
171
172#[derive(Debug, Clone, Serialize, Deserialize)]
173#[serde(rename_all = "camelCase")]
174pub struct SnsSmsMessage {
175    pub phone_number: String,
176    pub message: String,
177}
178
179#[derive(Debug, Clone, Serialize, Deserialize)]
180#[serde(rename_all = "camelCase")]
181pub struct SnsSmsResponse {
182    pub messages: Vec<SnsSmsMessage>,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize)]
186#[serde(rename_all = "camelCase")]
187pub struct PendingConfirmation {
188    pub subscription_arn: String,
189    pub topic_arn: String,
190    pub protocol: String,
191    pub endpoint: String,
192    pub token: Option<String>,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
196#[serde(rename_all = "camelCase")]
197pub struct PendingConfirmationsResponse {
198    pub pending_confirmations: Vec<PendingConfirmation>,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize)]
202#[serde(rename_all = "camelCase")]
203pub struct ConfirmSubscriptionRequest {
204    pub subscription_arn: String,
205}
206
207#[derive(Debug, Clone, Serialize, Deserialize)]
208#[serde(rename_all = "camelCase")]
209pub struct ConfirmSubscriptionResponse {
210    pub confirmed: bool,
211}
212
213// ── SQS ─────────────────────────────────────────────────────────────
214
215#[derive(Debug, Clone, Serialize, Deserialize)]
216#[serde(rename_all = "camelCase")]
217pub struct SqsMessageInfo {
218    pub message_id: String,
219    pub body: String,
220    pub receive_count: u64,
221    pub in_flight: bool,
222    pub created_at: String,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize)]
226#[serde(rename_all = "camelCase")]
227pub struct SqsQueueMessages {
228    pub queue_url: String,
229    pub queue_name: String,
230    pub messages: Vec<SqsMessageInfo>,
231}
232
233#[derive(Debug, Clone, Serialize, Deserialize)]
234#[serde(rename_all = "camelCase")]
235pub struct SqsMessagesResponse {
236    pub queues: Vec<SqsQueueMessages>,
237}
238
239#[derive(Debug, Clone, Serialize, Deserialize)]
240#[serde(rename_all = "camelCase")]
241pub struct ExpirationTickResponse {
242    pub expired_messages: u64,
243}
244
245#[derive(Debug, Clone, Serialize, Deserialize)]
246#[serde(rename_all = "camelCase")]
247pub struct ForceDlqResponse {
248    pub moved_messages: u64,
249}
250
251// ── EventBridge ─────────────────────────────────────────────────────
252
253#[derive(Debug, Clone, Serialize, Deserialize)]
254#[serde(rename_all = "camelCase")]
255pub struct EventBridgeEvent {
256    pub event_id: String,
257    pub source: String,
258    pub detail_type: String,
259    pub detail: String,
260    pub bus_name: String,
261    pub timestamp: String,
262}
263
264#[derive(Debug, Clone, Serialize, Deserialize)]
265#[serde(rename_all = "camelCase")]
266pub struct EventBridgeLambdaDelivery {
267    pub function_arn: String,
268    pub payload: String,
269    pub timestamp: String,
270}
271
272#[derive(Debug, Clone, Serialize, Deserialize)]
273#[serde(rename_all = "camelCase")]
274pub struct EventBridgeLogDelivery {
275    pub log_group_arn: String,
276    pub payload: String,
277    pub timestamp: String,
278}
279
280#[derive(Debug, Clone, Serialize, Deserialize)]
281#[serde(rename_all = "camelCase")]
282pub struct EventBridgeDeliveries {
283    pub lambda: Vec<EventBridgeLambdaDelivery>,
284    pub logs: Vec<EventBridgeLogDelivery>,
285}
286
287#[derive(Debug, Clone, Serialize, Deserialize)]
288#[serde(rename_all = "camelCase")]
289pub struct EventHistoryResponse {
290    pub events: Vec<EventBridgeEvent>,
291    pub deliveries: EventBridgeDeliveries,
292}
293
294#[derive(Debug, Clone, Serialize, Deserialize)]
295#[serde(rename_all = "camelCase")]
296pub struct FireRuleRequest {
297    pub bus_name: Option<String>,
298    pub rule_name: String,
299}
300
301#[derive(Debug, Clone, Serialize, Deserialize)]
302#[serde(rename_all = "camelCase")]
303pub struct FireRuleTarget {
304    #[serde(rename = "type")]
305    pub target_type: String,
306    pub arn: String,
307}
308
309#[derive(Debug, Clone, Serialize, Deserialize)]
310#[serde(rename_all = "camelCase")]
311pub struct FireRuleResponse {
312    pub targets: Vec<FireRuleTarget>,
313}
314
315// ── Scheduler (EventBridge Scheduler) ───────────────────────────────
316
317#[derive(Debug, Clone, Serialize, Deserialize)]
318#[serde(rename_all = "camelCase")]
319pub struct SchedulerSchedule {
320    pub account_id: String,
321    pub group_name: String,
322    pub name: String,
323    pub arn: String,
324    pub state: String,
325    pub schedule_expression: String,
326    pub target_arn: String,
327    pub last_fired: Option<String>,
328}
329
330#[derive(Debug, Clone, Serialize, Deserialize)]
331#[serde(rename_all = "camelCase")]
332pub struct SchedulerSchedulesResponse {
333    pub schedules: Vec<SchedulerSchedule>,
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize)]
337#[serde(rename_all = "camelCase")]
338pub struct FireScheduleResponse {
339    pub schedule_arn: String,
340    pub target_arn: String,
341}
342
343// ── S3 ──────────────────────────────────────────────────────────────
344
345#[derive(Debug, Clone, Serialize, Deserialize)]
346#[serde(rename_all = "camelCase")]
347pub struct S3Notification {
348    pub bucket: String,
349    pub key: String,
350    pub event_type: String,
351    pub timestamp: String,
352}
353
354#[derive(Debug, Clone, Serialize, Deserialize)]
355#[serde(rename_all = "camelCase")]
356pub struct S3NotificationsResponse {
357    pub notifications: Vec<S3Notification>,
358}
359
360#[derive(Debug, Clone, Serialize, Deserialize)]
361#[serde(rename_all = "camelCase")]
362pub struct LifecycleTickResponse {
363    pub processed_buckets: u64,
364    pub expired_objects: u64,
365    pub transitioned_objects: u64,
366}
367
368// ── DynamoDB ────────────────────────────────────────────────────────
369
370#[derive(Debug, Clone, Serialize, Deserialize)]
371#[serde(rename_all = "camelCase")]
372pub struct TtlTickResponse {
373    pub expired_items: u64,
374}
375
376// ── SecretsManager ──────────────────────────────────────────────────
377
378#[derive(Debug, Clone, Serialize, Deserialize)]
379#[serde(rename_all = "camelCase")]
380pub struct RotationTickResponse {
381    pub rotated_secrets: Vec<String>,
382}
383
384// ── ElastiCache ─────────────────────────────────────────────────────
385
386#[derive(Debug, Clone, Serialize, Deserialize)]
387#[serde(rename_all = "camelCase")]
388pub struct ElastiCacheCluster {
389    pub cache_cluster_id: String,
390    pub cache_cluster_status: String,
391    pub engine: String,
392    pub engine_version: String,
393    pub cache_node_type: String,
394    pub num_cache_nodes: i32,
395    pub replication_group_id: Option<String>,
396    pub port: Option<i32>,
397    pub host_port: Option<u16>,
398    pub container_id: Option<String>,
399}
400
401#[derive(Debug, Clone, Serialize, Deserialize)]
402#[serde(rename_all = "camelCase")]
403pub struct ElastiCacheClustersResponse {
404    pub clusters: Vec<ElastiCacheCluster>,
405}
406
407#[derive(Debug, Clone, Serialize, Deserialize)]
408#[serde(rename_all = "camelCase")]
409pub struct ElastiCacheReplicationGroupIntrospection {
410    pub replication_group_id: String,
411    pub status: String,
412    pub description: String,
413    pub member_clusters: Vec<String>,
414    pub automatic_failover: bool,
415    pub multi_az: bool,
416    pub engine: String,
417    pub engine_version: String,
418    pub cache_node_type: String,
419    pub num_cache_clusters: i32,
420}
421
422#[derive(Debug, Clone, Serialize, Deserialize)]
423#[serde(rename_all = "camelCase")]
424pub struct ElastiCacheReplicationGroupsResponse {
425    pub replication_groups: Vec<ElastiCacheReplicationGroupIntrospection>,
426}
427
428#[derive(Debug, Clone, Serialize, Deserialize)]
429#[serde(rename_all = "camelCase")]
430pub struct ElastiCacheServerlessCacheIntrospection {
431    pub serverless_cache_name: String,
432    pub status: String,
433    pub engine: String,
434    pub engine_version: String,
435    pub cache_node_type: Option<String>,
436}
437
438#[derive(Debug, Clone, Serialize, Deserialize)]
439#[serde(rename_all = "camelCase")]
440pub struct ElastiCacheServerlessCachesResponse {
441    pub serverless_caches: Vec<ElastiCacheServerlessCacheIntrospection>,
442}
443
444// ── Step Functions ──────────────────────────────────────────────────
445
446#[derive(Debug, Clone, Serialize, Deserialize)]
447#[serde(rename_all = "camelCase")]
448pub struct StepFunctionsExecution {
449    pub execution_arn: String,
450    pub state_machine_arn: String,
451    pub name: String,
452    pub status: String,
453    #[serde(skip_serializing_if = "Option::is_none")]
454    pub input: Option<String>,
455    #[serde(skip_serializing_if = "Option::is_none")]
456    pub output: Option<String>,
457    pub start_date: String,
458    #[serde(skip_serializing_if = "Option::is_none")]
459    pub stop_date: Option<String>,
460}
461
462#[derive(Debug, Clone, Serialize, Deserialize)]
463#[serde(rename_all = "camelCase")]
464pub struct StepFunctionsExecutionsResponse {
465    pub executions: Vec<StepFunctionsExecution>,
466}
467
468// ── Cognito ─────────────────────────────────────────────────────────
469
470#[derive(Debug, Clone, Serialize, Deserialize)]
471#[serde(rename_all = "camelCase")]
472pub struct UserConfirmationCodes {
473    pub confirmation_code: Option<String>,
474    pub attribute_verification_codes: serde_json::Value,
475}
476
477#[derive(Debug, Clone, Serialize, Deserialize)]
478#[serde(rename_all = "camelCase")]
479pub struct ConfirmationCode {
480    pub pool_id: String,
481    pub username: String,
482    pub code: String,
483    #[serde(rename = "type")]
484    pub code_type: String,
485    #[serde(skip_serializing_if = "Option::is_none")]
486    pub attribute: Option<String>,
487}
488
489#[derive(Debug, Clone, Serialize, Deserialize)]
490#[serde(rename_all = "camelCase")]
491pub struct ConfirmationCodesResponse {
492    pub codes: Vec<ConfirmationCode>,
493}
494
495#[derive(Debug, Clone, Serialize, Deserialize)]
496#[serde(rename_all = "camelCase")]
497pub struct ConfirmUserRequest {
498    pub user_pool_id: String,
499    pub username: String,
500}
501
502#[derive(Debug, Clone, Serialize, Deserialize)]
503#[serde(rename_all = "camelCase")]
504pub struct ConfirmUserResponse {
505    pub confirmed: bool,
506    #[serde(skip_serializing_if = "Option::is_none")]
507    pub error: Option<String>,
508}
509
510#[derive(Debug, Clone, Serialize, Deserialize)]
511#[serde(rename_all = "camelCase")]
512pub struct TokenInfo {
513    #[serde(rename = "type")]
514    pub token_type: String,
515    pub username: String,
516    pub pool_id: String,
517    pub client_id: String,
518    pub issued_at: f64,
519}
520
521#[derive(Debug, Clone, Serialize, Deserialize)]
522#[serde(rename_all = "camelCase")]
523pub struct TokensResponse {
524    pub tokens: Vec<TokenInfo>,
525}
526
527#[derive(Debug, Clone, Serialize, Deserialize)]
528#[serde(rename_all = "camelCase")]
529pub struct ExpireTokensRequest {
530    #[serde(skip_serializing_if = "Option::is_none")]
531    pub user_pool_id: Option<String>,
532    #[serde(skip_serializing_if = "Option::is_none")]
533    pub username: Option<String>,
534}
535
536#[derive(Debug, Clone, Serialize, Deserialize)]
537#[serde(rename_all = "camelCase")]
538pub struct ExpireTokensResponse {
539    pub expired_tokens: u64,
540}
541
542#[derive(Debug, Clone, Serialize, Deserialize)]
543#[serde(rename_all = "camelCase")]
544pub struct AuthEvent {
545    pub event_type: String,
546    pub username: String,
547    pub user_pool_id: String,
548    pub client_id: Option<String>,
549    pub timestamp: f64,
550    pub success: bool,
551}
552
553#[derive(Debug, Clone, Serialize, Deserialize)]
554#[serde(rename_all = "camelCase")]
555pub struct AuthEventsResponse {
556    pub events: Vec<AuthEvent>,
557}
558
559// ── API Gateway v2 ──────────────────────────────────────────────────
560
561#[derive(Debug, Clone, Serialize, Deserialize)]
562#[serde(rename_all = "camelCase")]
563pub struct ApiGatewayV2Request {
564    pub request_id: String,
565    pub api_id: String,
566    pub stage: String,
567    pub method: String,
568    pub path: String,
569    pub headers: std::collections::HashMap<String, String>,
570    pub query_params: std::collections::HashMap<String, String>,
571    #[serde(skip_serializing_if = "Option::is_none")]
572    pub body: Option<String>,
573    pub timestamp: String,
574    pub status_code: u16,
575}
576
577#[derive(Debug, Clone, Serialize, Deserialize)]
578#[serde(rename_all = "camelCase")]
579pub struct ApiGatewayV2RequestsResponse {
580    pub requests: Vec<ApiGatewayV2Request>,
581}
582
583// ── Bedrock ────────────────────────────────────────────────────────
584
585#[derive(Debug, Clone, Serialize, Deserialize)]
586#[serde(rename_all = "camelCase")]
587pub struct BedrockInvocation {
588    pub model_id: String,
589    pub input: String,
590    pub output: String,
591    pub timestamp: String,
592    /// Error detail for faulted calls, or `None` on success.
593    #[serde(default)]
594    pub error: Option<String>,
595}
596
597#[derive(Debug, Clone, Serialize, Deserialize)]
598#[serde(rename_all = "camelCase")]
599pub struct BedrockInvocationsResponse {
600    pub invocations: Vec<BedrockInvocation>,
601}
602
603#[derive(Debug, Clone, Serialize, Deserialize)]
604#[serde(rename_all = "camelCase")]
605pub struct BedrockModelResponseConfig {
606    pub status: String,
607    pub model_id: String,
608}
609
610/// One rule in a per-model response rule list.
611///
612/// `prompt_contains` is a substring that must appear in the prompt for this
613/// rule to match. `None` or an empty string matches any prompt.
614#[derive(Debug, Clone, Serialize, Deserialize)]
615#[serde(rename_all = "camelCase")]
616pub struct BedrockResponseRule {
617    #[serde(default, skip_serializing_if = "Option::is_none")]
618    pub prompt_contains: Option<String>,
619    pub response: String,
620}
621
622/// Configuration for a fault to inject on Bedrock runtime calls.
623#[derive(Debug, Clone, Serialize, Deserialize, Default)]
624#[serde(rename_all = "camelCase")]
625pub struct BedrockFaultRule {
626    pub error_type: String,
627    #[serde(default, skip_serializing_if = "Option::is_none")]
628    pub message: Option<String>,
629    #[serde(default, skip_serializing_if = "Option::is_none")]
630    pub http_status: Option<u16>,
631    #[serde(default, skip_serializing_if = "Option::is_none")]
632    pub count: Option<u32>,
633    #[serde(default, skip_serializing_if = "Option::is_none")]
634    pub model_id: Option<String>,
635    #[serde(default, skip_serializing_if = "Option::is_none")]
636    pub operation: Option<String>,
637}
638
639/// Server-side view of a queued fault rule.
640#[derive(Debug, Clone, Serialize, Deserialize)]
641#[serde(rename_all = "camelCase")]
642pub struct BedrockFaultRuleState {
643    pub error_type: String,
644    pub message: String,
645    pub http_status: u16,
646    pub remaining: u32,
647    #[serde(default)]
648    pub model_id: Option<String>,
649    #[serde(default)]
650    pub operation: Option<String>,
651}
652
653#[derive(Debug, Clone, Serialize, Deserialize)]
654#[serde(rename_all = "camelCase")]
655pub struct BedrockFaultsResponse {
656    pub faults: Vec<BedrockFaultRuleState>,
657}
658
659#[derive(Debug, Clone, Serialize, Deserialize)]
660#[serde(rename_all = "camelCase")]
661pub struct BedrockStatusResponse {
662    pub status: String,
663}
664
665#[derive(Debug, Clone, Serialize, Deserialize)]
666#[serde(rename_all = "camelCase")]
667pub struct EcrRepository {
668    pub repository_name: String,
669    pub repository_arn: String,
670    pub registry_id: String,
671    pub repository_uri: String,
672    pub image_tag_mutability: String,
673    pub scan_on_push: bool,
674    pub created_at: String,
675    pub tags: Vec<EcrTag>,
676    pub has_policy: bool,
677    pub has_lifecycle_policy: bool,
678    pub image_count: u64,
679    pub layer_count: u64,
680}
681
682#[derive(Debug, Clone, Serialize, Deserialize)]
683#[serde(rename_all = "camelCase")]
684pub struct EcrImage {
685    pub repository_name: String,
686    pub image_digest: String,
687    pub image_tags: Vec<String>,
688    pub image_size_in_bytes: u64,
689    pub image_manifest_media_type: String,
690    pub image_pushed_at: String,
691}
692
693#[derive(Debug, Clone, Serialize, Deserialize)]
694#[serde(rename_all = "camelCase")]
695pub struct EcrImagesResponse {
696    pub images: Vec<EcrImage>,
697}
698
699#[derive(Debug, Clone, Serialize, Deserialize)]
700#[serde(rename_all = "camelCase")]
701pub struct EcrPullThroughRule {
702    pub ecr_repository_prefix: String,
703    pub upstream_registry_url: String,
704    pub upstream_registry: Option<String>,
705    pub credential_arn: Option<String>,
706    pub custom_role_arn: Option<String>,
707    pub created_at: String,
708    pub updated_at: String,
709}
710
711#[derive(Debug, Clone, Serialize, Deserialize)]
712#[serde(rename_all = "camelCase")]
713pub struct EcrPullThroughRulesResponse {
714    pub rules: Vec<EcrPullThroughRule>,
715}
716
717#[derive(Debug, Clone, Serialize, Deserialize)]
718#[serde(rename_all = "camelCase")]
719pub struct EcrTag {
720    pub key: String,
721    pub value: String,
722}
723
724#[derive(Debug, Clone, Serialize, Deserialize)]
725#[serde(rename_all = "camelCase")]
726pub struct EcrRepositoriesResponse {
727    pub repositories: Vec<EcrRepository>,
728}
729
730#[derive(Debug, Clone, Serialize, Deserialize)]
731#[serde(rename_all = "camelCase")]
732pub struct EcsCluster {
733    pub cluster_name: String,
734    pub cluster_arn: String,
735    pub status: String,
736    pub running_tasks_count: i32,
737    pub pending_tasks_count: i32,
738    pub active_services_count: i32,
739    pub registered_container_instances_count: i32,
740    pub capacity_providers: Vec<String>,
741    pub tags: Vec<EcsTag>,
742    pub created_at: String,
743}
744
745#[derive(Debug, Clone, Serialize, Deserialize)]
746#[serde(rename_all = "camelCase")]
747pub struct EcsTag {
748    pub key: String,
749    pub value: String,
750}
751
752#[derive(Debug, Clone, Serialize, Deserialize)]
753#[serde(rename_all = "camelCase")]
754pub struct EcsClustersResponse {
755    pub clusters: Vec<EcsCluster>,
756}
757
758#[derive(Debug, Clone, Serialize, Deserialize)]
759#[serde(rename_all = "camelCase")]
760pub struct EcsTaskContainer {
761    pub name: String,
762    pub image: String,
763    pub last_status: String,
764    pub exit_code: Option<i64>,
765    pub runtime_id: Option<String>,
766    pub essential: bool,
767}
768
769#[derive(Debug, Clone, Serialize, Deserialize)]
770#[serde(rename_all = "camelCase")]
771pub struct EcsTask {
772    pub task_arn: String,
773    pub task_id: String,
774    pub cluster_arn: String,
775    pub cluster_name: String,
776    pub task_definition_arn: String,
777    pub family: String,
778    pub revision: i32,
779    pub last_status: String,
780    pub desired_status: String,
781    pub launch_type: String,
782    pub created_at: String,
783    pub started_at: Option<String>,
784    pub stopping_at: Option<String>,
785    pub stopped_at: Option<String>,
786    pub stop_code: Option<String>,
787    pub stopped_reason: Option<String>,
788    pub containers: Vec<EcsTaskContainer>,
789    pub captured_log_bytes: usize,
790}
791
792#[derive(Debug, Clone, Serialize, Deserialize)]
793#[serde(rename_all = "camelCase")]
794pub struct EcsTasksResponse {
795    pub tasks: Vec<EcsTask>,
796}
797
798#[derive(Debug, Clone, Serialize, Deserialize)]
799#[serde(rename_all = "camelCase")]
800pub struct EcsTaskLogsResponse {
801    pub task_arn: String,
802    pub logs: String,
803    pub last_status: String,
804    pub exit_code: Option<i64>,
805}
806
807#[derive(Debug, Clone, Serialize, Deserialize, Default)]
808#[serde(rename_all = "camelCase")]
809pub struct EcsMarkFailedRequest {
810    pub exit_code: Option<i64>,
811    pub reason: Option<String>,
812}
813
814#[derive(Debug, Clone, Serialize, Deserialize)]
815#[serde(rename_all = "camelCase")]
816pub struct EcsLifecycleEvent {
817    pub at: String,
818    pub event_type: String,
819    pub task_arn: Option<String>,
820    pub cluster_arn: Option<String>,
821    pub last_status: Option<String>,
822    pub detail: serde_json::Value,
823}
824
825#[derive(Debug, Clone, Serialize, Deserialize)]
826#[serde(rename_all = "camelCase")]
827pub struct EcsEventsResponse {
828    pub events: Vec<EcsLifecycleEvent>,
829}
830
831/// Request to bootstrap an IAM admin user in a specific account.
832/// Used by `/_fakecloud/iam/create-admin` to solve the multi-account
833/// bootstrap problem: there's no per-account root credential, so this
834/// endpoint creates a user with full admin access in any account.
835#[derive(Debug, Clone, Serialize, Deserialize)]
836#[serde(rename_all = "camelCase")]
837pub struct CreateAdminRequest {
838    pub account_id: String,
839    pub user_name: String,
840}
841
842#[derive(Debug, Clone, Serialize, Deserialize)]
843#[serde(rename_all = "camelCase")]
844pub struct CreateAdminResponse {
845    pub access_key_id: String,
846    pub secret_access_key: String,
847    pub account_id: String,
848    pub arn: String,
849}