recomp 0.4.0

Reusable components
Documentation
use object_store::{
    Error as ObjectStoreError,
    http::{HttpBuilder, HttpStore},
};

use super::super::ObjectStorage;

/// Builder for HTTP/WebDAV object storage.
#[derive(Clone, Debug)]
pub struct HttpObjectStorageBuilder {
    name: String,
    builder: HttpBuilder,
}

impl HttpObjectStorageBuilder {
    pub(crate) fn new(name: impl Into<String>, url: impl Into<String>) -> Self {
        Self {
            name: name.into(),
            builder: HttpBuilder::new().with_url(url),
        }
    }

    /// Configures the underlying provider builder.
    #[must_use]
    pub fn configure_store(mut self, configure: impl FnOnce(HttpBuilder) -> HttpBuilder) -> Self {
        self.builder = configure(self.builder);
        self
    }

    /// Builds the object storage component.
    pub fn build(self) -> Result<ObjectStorage<HttpStore>, ObjectStoreError> {
        self.builder
            .build()
            .map(|store| ObjectStorage::from_store(self.name, store))
    }
}