bucketwarden-server 0.1.0

BucketWarden storage server runtime.
Documentation
pub(crate) fn versioning_status_text(status: BucketVersioningStatus) -> &'static str {
    match status {
        BucketVersioningStatus::Enabled => "Enabled",
        BucketVersioningStatus::Suspended => "Suspended",
    }
}

pub(crate) fn object_etag(body: &[u8]) -> String {
    sha256_hex(body)
}

pub(crate) fn extended_request_id(request_id: &str) -> String {
    base64_encode(sha256_hex(request_id.as_bytes()).as_bytes())
}

pub(crate) fn quote_etag(etag: &str) -> String {
    format!("\"{}\"", etag.trim_matches('"'))
}

pub(crate) fn bucket_owner(bucket: &BucketState) -> String {
    if bucket.owner.is_empty() {
        "bucket-owner".to_string()
    } else {
        bucket.owner.clone()
    }
}

pub(crate) fn bucket_region(bucket: &BucketState) -> String {
    if bucket.region.is_empty() {
        DEFAULT_BUCKET_REGION.to_string()
    } else {
        bucket.region.clone()
    }
}

pub(crate) fn stored_owner(bucket: &BucketState, version: &StoredVersion) -> String {
    if version.owner.is_empty() {
        bucket_owner(bucket)
    } else {
        version.owner.clone()
    }
}

pub(crate) fn owner_acl_result(
    bucket: &str,
    key: Option<String>,
    version_id: Option<String>,
    owner: String,
) -> AclResult {
    AclResult {
        bucket: bucket.to_string(),
        key,
        version_id,
        owner: owner.clone(),
        grants: vec![AclGrant {
            grantee: owner,
            permission: "FULL_CONTROL".to_string(),
        }],
    }
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub(crate) enum ListingEntry {
    Object(ListedObject),
    CommonPrefix(CommonPrefix),
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub(crate) enum VersionListingEntry {
    Version(ListedObjectVersion),
    DeleteMarker(ListedDeleteMarker),
}

#[derive(Clone, Debug)]
pub(crate) struct ReplicationSourceVersion {
    pub(crate) key: String,
    pub(crate) version: StoredVersion,
}

impl VersionListingEntry {
    pub(crate) fn key(&self) -> &str {
        match self {
            Self::Version(version) => &version.key,
            Self::DeleteMarker(marker) => &marker.key,
        }
    }

    pub(crate) fn version_id(&self) -> &str {
        match self {
            Self::Version(version) => &version.version_id,
            Self::DeleteMarker(marker) => &marker.version_id,
        }
    }
}