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 PendingConfirmation {
175    pub subscription_arn: String,
176    pub topic_arn: String,
177    pub protocol: String,
178    pub endpoint: String,
179    pub token: Option<String>,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize)]
183#[serde(rename_all = "camelCase")]
184pub struct PendingConfirmationsResponse {
185    pub pending_confirmations: Vec<PendingConfirmation>,
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize)]
189#[serde(rename_all = "camelCase")]
190pub struct ConfirmSubscriptionRequest {
191    pub subscription_arn: String,
192}
193
194#[derive(Debug, Clone, Serialize, Deserialize)]
195#[serde(rename_all = "camelCase")]
196pub struct ConfirmSubscriptionResponse {
197    pub confirmed: bool,
198}
199
200// ── SQS ─────────────────────────────────────────────────────────────
201
202#[derive(Debug, Clone, Serialize, Deserialize)]
203#[serde(rename_all = "camelCase")]
204pub struct SqsMessageInfo {
205    pub message_id: String,
206    pub body: String,
207    pub receive_count: u64,
208    pub in_flight: bool,
209    pub created_at: String,
210}
211
212#[derive(Debug, Clone, Serialize, Deserialize)]
213#[serde(rename_all = "camelCase")]
214pub struct SqsQueueMessages {
215    pub queue_url: String,
216    pub queue_name: String,
217    pub messages: Vec<SqsMessageInfo>,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize)]
221#[serde(rename_all = "camelCase")]
222pub struct SqsMessagesResponse {
223    pub queues: Vec<SqsQueueMessages>,
224}
225
226#[derive(Debug, Clone, Serialize, Deserialize)]
227#[serde(rename_all = "camelCase")]
228pub struct ExpirationTickResponse {
229    pub expired_messages: u64,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
233#[serde(rename_all = "camelCase")]
234pub struct ForceDlqResponse {
235    pub moved_messages: u64,
236}
237
238// ── EventBridge ─────────────────────────────────────────────────────
239
240#[derive(Debug, Clone, Serialize, Deserialize)]
241#[serde(rename_all = "camelCase")]
242pub struct EventBridgeEvent {
243    pub event_id: String,
244    pub source: String,
245    pub detail_type: String,
246    pub detail: String,
247    pub bus_name: String,
248    pub timestamp: String,
249}
250
251#[derive(Debug, Clone, Serialize, Deserialize)]
252#[serde(rename_all = "camelCase")]
253pub struct EventBridgeLambdaDelivery {
254    pub function_arn: String,
255    pub payload: String,
256    pub timestamp: String,
257}
258
259#[derive(Debug, Clone, Serialize, Deserialize)]
260#[serde(rename_all = "camelCase")]
261pub struct EventBridgeLogDelivery {
262    pub log_group_arn: String,
263    pub payload: String,
264    pub timestamp: String,
265}
266
267#[derive(Debug, Clone, Serialize, Deserialize)]
268#[serde(rename_all = "camelCase")]
269pub struct EventBridgeDeliveries {
270    pub lambda: Vec<EventBridgeLambdaDelivery>,
271    pub logs: Vec<EventBridgeLogDelivery>,
272}
273
274#[derive(Debug, Clone, Serialize, Deserialize)]
275#[serde(rename_all = "camelCase")]
276pub struct EventHistoryResponse {
277    pub events: Vec<EventBridgeEvent>,
278    pub deliveries: EventBridgeDeliveries,
279}
280
281#[derive(Debug, Clone, Serialize, Deserialize)]
282#[serde(rename_all = "camelCase")]
283pub struct FireRuleRequest {
284    pub bus_name: Option<String>,
285    pub rule_name: String,
286}
287
288#[derive(Debug, Clone, Serialize, Deserialize)]
289#[serde(rename_all = "camelCase")]
290pub struct FireRuleTarget {
291    #[serde(rename = "type")]
292    pub target_type: String,
293    pub arn: String,
294}
295
296#[derive(Debug, Clone, Serialize, Deserialize)]
297#[serde(rename_all = "camelCase")]
298pub struct FireRuleResponse {
299    pub targets: Vec<FireRuleTarget>,
300}
301
302// ── Scheduler (EventBridge Scheduler) ───────────────────────────────
303
304#[derive(Debug, Clone, Serialize, Deserialize)]
305#[serde(rename_all = "camelCase")]
306pub struct SchedulerSchedule {
307    pub account_id: String,
308    pub group_name: String,
309    pub name: String,
310    pub arn: String,
311    pub state: String,
312    pub schedule_expression: String,
313    pub target_arn: String,
314    pub last_fired: Option<String>,
315}
316
317#[derive(Debug, Clone, Serialize, Deserialize)]
318#[serde(rename_all = "camelCase")]
319pub struct SchedulerSchedulesResponse {
320    pub schedules: Vec<SchedulerSchedule>,
321}
322
323#[derive(Debug, Clone, Serialize, Deserialize)]
324#[serde(rename_all = "camelCase")]
325pub struct FireScheduleResponse {
326    pub schedule_arn: String,
327    pub target_arn: String,
328}
329
330// ── S3 ──────────────────────────────────────────────────────────────
331
332#[derive(Debug, Clone, Serialize, Deserialize)]
333#[serde(rename_all = "camelCase")]
334pub struct S3Notification {
335    pub bucket: String,
336    pub key: String,
337    pub event_type: String,
338    pub timestamp: String,
339}
340
341#[derive(Debug, Clone, Serialize, Deserialize)]
342#[serde(rename_all = "camelCase")]
343pub struct S3NotificationsResponse {
344    pub notifications: Vec<S3Notification>,
345}
346
347#[derive(Debug, Clone, Serialize, Deserialize)]
348#[serde(rename_all = "camelCase")]
349pub struct LifecycleTickResponse {
350    pub processed_buckets: u64,
351    pub expired_objects: u64,
352    pub transitioned_objects: u64,
353}
354
355// ── DynamoDB ────────────────────────────────────────────────────────
356
357#[derive(Debug, Clone, Serialize, Deserialize)]
358#[serde(rename_all = "camelCase")]
359pub struct TtlTickResponse {
360    pub expired_items: u64,
361}
362
363// ── SecretsManager ──────────────────────────────────────────────────
364
365#[derive(Debug, Clone, Serialize, Deserialize)]
366#[serde(rename_all = "camelCase")]
367pub struct RotationTickResponse {
368    pub rotated_secrets: Vec<String>,
369}
370
371// ── ElastiCache ─────────────────────────────────────────────────────
372
373#[derive(Debug, Clone, Serialize, Deserialize)]
374#[serde(rename_all = "camelCase")]
375pub struct ElastiCacheCluster {
376    pub cache_cluster_id: String,
377    pub cache_cluster_status: String,
378    pub engine: String,
379    pub engine_version: String,
380    pub cache_node_type: String,
381    pub num_cache_nodes: i32,
382    pub replication_group_id: Option<String>,
383    pub port: Option<i32>,
384    pub host_port: Option<u16>,
385    pub container_id: Option<String>,
386}
387
388#[derive(Debug, Clone, Serialize, Deserialize)]
389#[serde(rename_all = "camelCase")]
390pub struct ElastiCacheClustersResponse {
391    pub clusters: Vec<ElastiCacheCluster>,
392}
393
394#[derive(Debug, Clone, Serialize, Deserialize)]
395#[serde(rename_all = "camelCase")]
396pub struct ElastiCacheReplicationGroupIntrospection {
397    pub replication_group_id: String,
398    pub status: String,
399    pub description: String,
400    pub member_clusters: Vec<String>,
401    pub automatic_failover: bool,
402    pub multi_az: bool,
403    pub engine: String,
404    pub engine_version: String,
405    pub cache_node_type: String,
406    pub num_cache_clusters: i32,
407}
408
409#[derive(Debug, Clone, Serialize, Deserialize)]
410#[serde(rename_all = "camelCase")]
411pub struct ElastiCacheReplicationGroupsResponse {
412    pub replication_groups: Vec<ElastiCacheReplicationGroupIntrospection>,
413}
414
415#[derive(Debug, Clone, Serialize, Deserialize)]
416#[serde(rename_all = "camelCase")]
417pub struct ElastiCacheServerlessCacheIntrospection {
418    pub serverless_cache_name: String,
419    pub status: String,
420    pub engine: String,
421    pub engine_version: String,
422    pub cache_node_type: Option<String>,
423}
424
425#[derive(Debug, Clone, Serialize, Deserialize)]
426#[serde(rename_all = "camelCase")]
427pub struct ElastiCacheServerlessCachesResponse {
428    pub serverless_caches: Vec<ElastiCacheServerlessCacheIntrospection>,
429}
430
431// ── Step Functions ──────────────────────────────────────────────────
432
433#[derive(Debug, Clone, Serialize, Deserialize)]
434#[serde(rename_all = "camelCase")]
435pub struct StepFunctionsExecution {
436    pub execution_arn: String,
437    pub state_machine_arn: String,
438    pub name: String,
439    pub status: String,
440    #[serde(skip_serializing_if = "Option::is_none")]
441    pub input: Option<String>,
442    #[serde(skip_serializing_if = "Option::is_none")]
443    pub output: Option<String>,
444    pub start_date: String,
445    #[serde(skip_serializing_if = "Option::is_none")]
446    pub stop_date: Option<String>,
447}
448
449#[derive(Debug, Clone, Serialize, Deserialize)]
450#[serde(rename_all = "camelCase")]
451pub struct StepFunctionsExecutionsResponse {
452    pub executions: Vec<StepFunctionsExecution>,
453}
454
455// ── Cognito ─────────────────────────────────────────────────────────
456
457#[derive(Debug, Clone, Serialize, Deserialize)]
458#[serde(rename_all = "camelCase")]
459pub struct UserConfirmationCodes {
460    pub confirmation_code: Option<String>,
461    pub attribute_verification_codes: serde_json::Value,
462}
463
464#[derive(Debug, Clone, Serialize, Deserialize)]
465#[serde(rename_all = "camelCase")]
466pub struct ConfirmationCode {
467    pub pool_id: String,
468    pub username: String,
469    pub code: String,
470    #[serde(rename = "type")]
471    pub code_type: String,
472    #[serde(skip_serializing_if = "Option::is_none")]
473    pub attribute: Option<String>,
474}
475
476#[derive(Debug, Clone, Serialize, Deserialize)]
477#[serde(rename_all = "camelCase")]
478pub struct ConfirmationCodesResponse {
479    pub codes: Vec<ConfirmationCode>,
480}
481
482#[derive(Debug, Clone, Serialize, Deserialize)]
483#[serde(rename_all = "camelCase")]
484pub struct ConfirmUserRequest {
485    pub user_pool_id: String,
486    pub username: String,
487}
488
489#[derive(Debug, Clone, Serialize, Deserialize)]
490#[serde(rename_all = "camelCase")]
491pub struct ConfirmUserResponse {
492    pub confirmed: bool,
493    #[serde(skip_serializing_if = "Option::is_none")]
494    pub error: Option<String>,
495}
496
497#[derive(Debug, Clone, Serialize, Deserialize)]
498#[serde(rename_all = "camelCase")]
499pub struct TokenInfo {
500    #[serde(rename = "type")]
501    pub token_type: String,
502    pub username: String,
503    pub pool_id: String,
504    pub client_id: String,
505    pub issued_at: f64,
506}
507
508#[derive(Debug, Clone, Serialize, Deserialize)]
509#[serde(rename_all = "camelCase")]
510pub struct TokensResponse {
511    pub tokens: Vec<TokenInfo>,
512}
513
514#[derive(Debug, Clone, Serialize, Deserialize)]
515#[serde(rename_all = "camelCase")]
516pub struct ExpireTokensRequest {
517    #[serde(skip_serializing_if = "Option::is_none")]
518    pub user_pool_id: Option<String>,
519    #[serde(skip_serializing_if = "Option::is_none")]
520    pub username: Option<String>,
521}
522
523#[derive(Debug, Clone, Serialize, Deserialize)]
524#[serde(rename_all = "camelCase")]
525pub struct ExpireTokensResponse {
526    pub expired_tokens: u64,
527}
528
529#[derive(Debug, Clone, Serialize, Deserialize)]
530#[serde(rename_all = "camelCase")]
531pub struct AuthEvent {
532    pub event_type: String,
533    pub username: String,
534    pub user_pool_id: String,
535    pub client_id: Option<String>,
536    pub timestamp: f64,
537    pub success: bool,
538}
539
540#[derive(Debug, Clone, Serialize, Deserialize)]
541#[serde(rename_all = "camelCase")]
542pub struct AuthEventsResponse {
543    pub events: Vec<AuthEvent>,
544}
545
546// ── API Gateway v2 ──────────────────────────────────────────────────
547
548#[derive(Debug, Clone, Serialize, Deserialize)]
549#[serde(rename_all = "camelCase")]
550pub struct ApiGatewayV2Request {
551    pub request_id: String,
552    pub api_id: String,
553    pub stage: String,
554    pub method: String,
555    pub path: String,
556    pub headers: std::collections::HashMap<String, String>,
557    pub query_params: std::collections::HashMap<String, String>,
558    #[serde(skip_serializing_if = "Option::is_none")]
559    pub body: Option<String>,
560    pub timestamp: String,
561    pub status_code: u16,
562}
563
564#[derive(Debug, Clone, Serialize, Deserialize)]
565#[serde(rename_all = "camelCase")]
566pub struct ApiGatewayV2RequestsResponse {
567    pub requests: Vec<ApiGatewayV2Request>,
568}
569
570// ── Bedrock ────────────────────────────────────────────────────────
571
572#[derive(Debug, Clone, Serialize, Deserialize)]
573#[serde(rename_all = "camelCase")]
574pub struct BedrockInvocation {
575    pub model_id: String,
576    pub input: String,
577    pub output: String,
578    pub timestamp: String,
579    /// Error detail for faulted calls, or `None` on success.
580    #[serde(default)]
581    pub error: Option<String>,
582}
583
584#[derive(Debug, Clone, Serialize, Deserialize)]
585#[serde(rename_all = "camelCase")]
586pub struct BedrockInvocationsResponse {
587    pub invocations: Vec<BedrockInvocation>,
588}
589
590#[derive(Debug, Clone, Serialize, Deserialize)]
591#[serde(rename_all = "camelCase")]
592pub struct BedrockModelResponseConfig {
593    pub status: String,
594    pub model_id: String,
595}
596
597/// One rule in a per-model response rule list.
598///
599/// `prompt_contains` is a substring that must appear in the prompt for this
600/// rule to match. `None` or an empty string matches any prompt.
601#[derive(Debug, Clone, Serialize, Deserialize)]
602#[serde(rename_all = "camelCase")]
603pub struct BedrockResponseRule {
604    #[serde(default, skip_serializing_if = "Option::is_none")]
605    pub prompt_contains: Option<String>,
606    pub response: String,
607}
608
609/// Configuration for a fault to inject on Bedrock runtime calls.
610#[derive(Debug, Clone, Serialize, Deserialize, Default)]
611#[serde(rename_all = "camelCase")]
612pub struct BedrockFaultRule {
613    pub error_type: String,
614    #[serde(default, skip_serializing_if = "Option::is_none")]
615    pub message: Option<String>,
616    #[serde(default, skip_serializing_if = "Option::is_none")]
617    pub http_status: Option<u16>,
618    #[serde(default, skip_serializing_if = "Option::is_none")]
619    pub count: Option<u32>,
620    #[serde(default, skip_serializing_if = "Option::is_none")]
621    pub model_id: Option<String>,
622    #[serde(default, skip_serializing_if = "Option::is_none")]
623    pub operation: Option<String>,
624}
625
626/// Server-side view of a queued fault rule.
627#[derive(Debug, Clone, Serialize, Deserialize)]
628#[serde(rename_all = "camelCase")]
629pub struct BedrockFaultRuleState {
630    pub error_type: String,
631    pub message: String,
632    pub http_status: u16,
633    pub remaining: u32,
634    #[serde(default)]
635    pub model_id: Option<String>,
636    #[serde(default)]
637    pub operation: Option<String>,
638}
639
640#[derive(Debug, Clone, Serialize, Deserialize)]
641#[serde(rename_all = "camelCase")]
642pub struct BedrockFaultsResponse {
643    pub faults: Vec<BedrockFaultRuleState>,
644}
645
646#[derive(Debug, Clone, Serialize, Deserialize)]
647#[serde(rename_all = "camelCase")]
648pub struct BedrockStatusResponse {
649    pub status: String,
650}
651
652/// Request to bootstrap an IAM admin user in a specific account.
653/// Used by `/_fakecloud/iam/create-admin` to solve the multi-account
654/// bootstrap problem: there's no per-account root credential, so this
655/// endpoint creates a user with full admin access in any account.
656#[derive(Debug, Clone, Serialize, Deserialize)]
657#[serde(rename_all = "camelCase")]
658pub struct CreateAdminRequest {
659    pub account_id: String,
660    pub user_name: String,
661}
662
663#[derive(Debug, Clone, Serialize, Deserialize)]
664#[serde(rename_all = "camelCase")]
665pub struct CreateAdminResponse {
666    pub access_key_id: String,
667    pub secret_access_key: String,
668    pub account_id: String,
669    pub arn: String,
670}