/// Metadata about a single file uploaded to S3 by yeeter.
/// Enriches the original manifest entry with S3 upload information.
#[derive(
    Debug,
    Clone,
    conjure_object::serde::Serialize,
    conjure_object::serde::Deserialize,
    PartialEq,
    Eq,
    PartialOrd,
    Ord,
    Hash
)]
#[serde(crate = "conjure_object::serde")]
#[conjure_object::private::staged_builder::staged_builder]
#[builder(crate = conjure_object::private::staged_builder, update, inline)]
pub struct UploadMetadata {
    #[builder(into)]
    #[serde(rename = "s3Key")]
    s3_key: String,
    #[builder(into)]
    #[serde(rename = "s3Bucket")]
    s3_bucket: String,
    #[builder(custom(type = super::ManifestOutput, convert = Box::new))]
    #[serde(rename = "manifestOutput")]
    manifest_output: Box<super::ManifestOutput>,
}
impl UploadMetadata {
    /// Constructs a new instance of the type.
    #[inline]
    pub fn new(
        s3_key: impl Into<String>,
        s3_bucket: impl Into<String>,
        manifest_output: super::ManifestOutput,
    ) -> Self {
        Self::builder()
            .s3_key(s3_key)
            .s3_bucket(s3_bucket)
            .manifest_output(manifest_output)
            .build()
    }
    /// Full S3 key where the file was uploaded
    #[inline]
    pub fn s3_key(&self) -> &str {
        &*self.s3_key
    }
    /// S3 bucket name where the file was uploaded
    #[inline]
    pub fn s3_bucket(&self) -> &str {
        &*self.s3_bucket
    }
    /// The original manifest entry from the container's manifest.yaml
    #[inline]
    pub fn manifest_output(&self) -> &super::ManifestOutput {
        &*self.manifest_output
    }
}
