#![allow(clippy::format_collect)]
use bucketwarden_audit::{AuditEvent, AuditLog, AuditOutcome, AuditSummary};
use bucketwarden_auth::{
AccessKey, AssumeRoleWithCustomIdentityRequest, AssumeRoleWithWebIdentityRequest, AuthError,
AuthStore, CredentialRecord, CredentialRotation, CredentialScope, IdentityProvider,
LeakedKeyResponse, SessionCredential, DEFAULT_TENANT_ID,
};
use bucketwarden_kms::{
Ciphertext, EnvelopeMetadata, KeyRecord, KeyStatus, KmsError, KmsProvider, LocalXorKms,
};
use bucketwarden_lock::{LockError, ObjectLock, RetentionMode};
use bucketwarden_policy::{
Effect, Policy, PolicyExplanation, PolicyFinding, PolicySimulationRequest,
PolicySimulationResult, RequestContext, Statement,
};
use bucketwarden_repl::{ReplicationAction, ReplicationLog, ReplicationRecord, ReplicationSummary};
use bucketwarden_s3::{
api_operation_report, bucket_control_report, client_compatibility_report, object_data_report,
object_resource, protocol_surface_report,
sigv4::{sha256_hex, verify_authorization_header, verify_presigned_url, SigV4Request},
validate_bucket_name, validate_object_key, AbortIncompleteMultipartUpload,
AbortMultipartUploadRequest, AccessControlOwner, AccessControlPolicy, AclGrant, AclResult,
AnalyticsAndOperator, AnalyticsConfiguration, AnalyticsExportDestination, AnalyticsFilter,
AnalyticsS3BucketDestination, AnalyticsTag, ApiOperationReport, Bucket, BucketAbacStatus,
BucketAccelerateConfiguration, BucketControlReport, BucketCorsResult,
BucketEncryptionConfiguration, BucketInfo, BucketInventoryEntry, BucketInventoryReport,
BucketInventoryRequest, BucketLifecycleConfiguration, BucketLocationResult,
BucketLoggingEnabled, BucketLoggingStatus, BucketMetadataConfiguration,
BucketMetadataTableConfiguration, BucketNotificationConfiguration,
BucketObjectLockConfiguration, BucketOwnershipControls, BucketPolicyRequest,
BucketPolicyResult, BucketPolicyStatus, BucketQuotaConfiguration,
BucketReplicationConfiguration, BucketRequestPaymentConfiguration, BucketTaggingRequest,
BucketTaggingResult, BucketVersioningResult, BucketVersioningStatus,
BucketWebsiteConfiguration, Checksum, ClientCompatibilityReport, CloudFunctionConfiguration,
CommonPrefix, CompleteMultipartUploadRequest, CompleteMultipartUploadResult,
CompletedMultipartUpload, CompletedPart, Condition, ConsoleBucketRow, ConsoleMetricSummary,
ConsoleObjectRow, ConsolePolicyRow, ConsoleRuntimeReport, ConsoleSupportFeature,
ConsoleUserRow, ContinuationEvent, CopyObjectRequest, CopyObjectResult, CopyPartResult,
CorsRule, CreateBucketConfiguration, CreateMultipartUploadRequest, CreateMultipartUploadResult,
CreateSessionRequest, CreateSessionResult, CsvInput, CsvOutput, Delete,
DeleteMarkerReplication, DeleteObjectEntry, DeleteObjectResult, DeleteObjectVersionResult,
DeletedObject, Destination, DestinationResult, EndEvent, ErrorDetails, ErrorDocument,
EventBridgeConfiguration, EventCategoryReport, EventComplianceReport,
ExistingObjectReplication, FilterRule, GetBucketMetadataTableConfigurationResult,
GetObjectAttributesParts, GetObjectAttributesResult, GetObjectResult, HeadObjectResult,
InputSerialization, IntelligentTieringAndOperator, IntelligentTieringConfiguration,
IntelligentTieringFilter, IntelligentTieringTag, InventoryConfiguration, InventoryDestination,
InventoryEncryption, InventoryFilter, InventoryS3BucketDestination, InventorySchedule,
InventoryTableConfiguration, InventoryTableConfigurationResult, JournalTableConfiguration,
JournalTableConfigurationResult, JsonInput, LifecycleRule, LifecycleRunResult,
LifecycleVersionTarget, ListAnalyticsConfigurationsResult, ListDirectoryBucketsResult,
ListIntelligentTieringConfigurationsResult, ListInventoryConfigurationsResult,
ListMetricsConfigurationsResult, ListMultipartUploadsResult, ListObjectVersionsRequest,
ListObjectVersionsResult, ListObjectsRequest, ListObjectsResult, ListPartsResult,
ListedDeleteMarker, ListedMultipartUpload, ListedObject, ListedObjectVersion, ListedPart,
MetadataConfigurationErrorDetails, MetadataConfigurationResult, MetadataDirective,
MetadataTableConfigurationResult, MetadataTableEncryptionConfiguration, MetricsAndOperator,
MetricsConfiguration, MetricsFilter, MetricsTag, NotificationEvent, NotificationEventSummary,
NotificationRule, ObjectDataReport, ObjectLegalHoldRequest, ObjectLegalHoldResult,
ObjectLockDefaultRetention, ObjectMetadata, ObjectRetentionRequest, ObjectRetentionResult,
ObjectTaggingRequest, ObjectTaggingResult, OpsAdminSurfaceReport, OpsEvidenceExportReport,
OpsHealthReport, OpsIncidentReport, ProtocolSurfaceReport, PublicAccessBlockConfiguration,
PutObjectRequest, PutObjectResult, QuotaUsageReport, RecordExpiration, RenameObjectRequest,
RenameObjectResult, ReplicationRule, ReplicationRunResult, ReplicationStatusEntry,
ReplicationStatusReport, RuntimeConfigReport, RuntimeInventoryEntry, RuntimeInventoryReport,
RuntimeInventoryRequest, RuntimeInventorySummaryReport, RuntimeInventorySummaryRequest,
S3Action, S3HttpRequest, S3HttpResponse, S3TablesDestination, S3TablesDestinationResult,
ServerSideEncryption, StorageClassAnalysis, StorageClassAnalysisDataExport,
TenantInventoryEntry, TenantInventoryReport, TenantInventoryRequest, TenantQuotaConfiguration,
Tiering, UpdateObjectEncryptionRequest, UpdateObjectEncryptionResult, UploadPartRequest,
UploadPartResult, WebsiteObjectResult, WebsiteRoutingRule, WriteGetObjectResponseRequest,
};
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
use thiserror::Error;
pub const CRATE_PURPOSE: &str = "storage server runtime";
pub const DEFAULT_BUCKET_REGION: &str = "us-east-1";
const INTERNAL_SIGV4_REGION_HEADER: &str = "x-bucketwarden-sigv4-region";
mod aws_query_compat;
mod browser_ui;
mod bucket_analytics;
mod bucket_basics;
mod bucket_intelligent_tiering;
mod bucket_inventory;
mod bucket_metadata;
mod bucket_metrics;
mod bucket_policy_acl;
mod consistency_model_support;
mod console_api;
mod encryption_audit;
mod encryption_policy;
mod erasure_coding_support;
mod error_encoding;
mod event_audit_observability;
mod filesystem_store;
mod http_helpers;
mod integrity_verification;
mod large_object_optimization_support;
mod lifecycle;
mod lifecycle_inventory;
mod lifecycle_quotas;
mod metadata_architecture_support;
mod object_delete_tag_lock;
mod object_layout_support;
mod object_lock_admin;
mod object_multipart;
mod object_read_list;
mod object_write;
mod observability_internal;
mod ops_admin_surfaces;
mod ops_config_reports;
mod ops_console;
mod ops_evidence_exports;
mod ops_health_diagnostics;
mod ops_incident_reports;
mod parsing_bucket;
mod parsing_config;
mod placement_domain_support;
mod replication_cors;
mod replication_observability;
mod replication_strategy_support;
mod runtime_core;
mod s3_bucket_dispatch;
mod s3_http;
mod s3_object_dispatch;
mod s3_select_runtime;
mod s3_select_validation;
mod s3_service_specific_errors;
mod s3_targets;
mod small_object_optimization_support;
mod state;
mod storage_backend_support;
mod storage_commit;
mod validators;
mod xml_bucket;
mod xml_object_multipart;
pub use browser_ui::*;
pub use bucketwarden_auth::{
CredentialSupportReport, IdentityProviderSupportReport, OperatorAction, OperatorRole,
RoleAssignment, TemporaryCredentialSupportReport,
};
pub(crate) use bucketwarden_crypto::md5_digest;
pub(crate) use bucketwarden_errors::s3_service_specific_error_by_family_code;
pub use bucketwarden_errors::{s3_service_specific_error_catalog, S3ServiceSpecificError};
pub use consistency_model_support::*;
pub use console_api::*;
pub use erasure_coding_support::*;
pub(crate) use error_encoding::*;
pub use filesystem_store::*;
pub(crate) use http_helpers::*;
pub use integrity_verification::*;
pub use large_object_optimization_support::*;
pub use metadata_architecture_support::*;
pub use object_layout_support::*;
pub(crate) use parsing_bucket::*;
pub(crate) use parsing_config::*;
pub use placement_domain_support::*;
pub use replication_strategy_support::*;
pub(crate) use s3_select_validation::*;
pub use s3_service_specific_errors::*;
pub(crate) use s3_targets::*;
pub use small_object_optimization_support::*;
pub use state::*;
pub use storage_backend_support::*;
pub use storage_commit::*;
pub(crate) use validators::*;
pub(crate) use xml_bucket::*;
pub(crate) use xml_object_multipart::*;
#[derive(Clone, Debug, Eq, PartialEq)]
struct S3RequestTarget {
bucket: Option<String>,
key: Option<String>,
}