apimock_server/
middleware.rs1use std::path::Path;
12
13use crate::error::{ServerError, ServerResult};
14
15pub mod middleware_handler;
16mod middleware_response;
17
18pub use middleware_handler::MiddlewareHandler;
19
20#[derive(Clone, Default)]
25pub struct LoadedMiddlewares {
26 handlers: Vec<MiddlewareHandler>,
27}
28
29impl LoadedMiddlewares {
30 pub fn compile(
35 middleware_file_paths: &[String],
36 relative_dir_path: &str,
37 ) -> ServerResult<Self> {
38 let mut handlers = Vec::with_capacity(middleware_file_paths.len());
39 for (idx, relative_path) in middleware_file_paths.iter().enumerate() {
40 let joined = Path::new(relative_dir_path).join(relative_path);
41 let path_str = joined.to_str().ok_or_else(|| ServerError::Io(
42 std::io::Error::new(
43 std::io::ErrorKind::InvalidData,
44 format!(
45 "middleware #{} path contains non-UTF-8 bytes: {}",
46 idx + 1,
47 joined.to_string_lossy(),
48 ),
49 ),
50 ))?;
51 handlers.push(MiddlewareHandler::new(path_str)?);
52 }
53 Ok(Self { handlers })
54 }
55
56 pub fn len(&self) -> usize {
57 self.handlers.len()
58 }
59
60 pub fn is_empty(&self) -> bool {
61 self.handlers.is_empty()
62 }
63
64 pub fn iter(&self) -> std::slice::Iter<'_, MiddlewareHandler> {
65 self.handlers.iter()
66 }
67}