use crate::rest_api::{BindConfig, RestApiServerError};
use super::{ResourceProvider, RunnableRestApi};
#[derive(Default)]
pub struct RestApiBuilder {
resource_providers: Vec<Box<dyn ResourceProvider>>,
bind: Option<BindConfig>,
}
impl RestApiBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn with_bind(mut self, value: BindConfig) -> Self {
self.bind = Some(value);
self
}
pub fn add_resource_provider(mut self, resource_provider: Box<dyn ResourceProvider>) -> Self {
self.resource_providers.push(resource_provider);
self
}
pub fn build(self) -> Result<RunnableRestApi, RestApiServerError> {
let bind = self
.bind
.ok_or_else(|| RestApiServerError::MissingField("bind".to_string()))?;
Ok(RunnableRestApi {
bind,
resource_providers: self.resource_providers,
})
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn rest_api_thread_builder_successful() {
let builder = RestApiBuilder::new().with_bind(BindConfig::Http("test".into()));
assert!(builder.build().is_ok())
}
}