use crate::request::context::RequestContext;
use std::collections::{HashMap, HashSet};
use std::fmt::Display;
pub trait ExtensionTrait: Display {
fn get_object(&self) -> &'static str;
}
#[derive(Default)]
pub struct ExtensionStorage {
storage: HashMap<&'static str, HashSet<String>>,
}
impl ExtensionStorage {
pub fn add_extension(&mut self, extension: impl ExtensionTrait) {
self.storage
.entry(extension.get_object())
.or_default()
.insert(extension.to_string());
}
pub fn build_query_drain(&mut self, request_context: &mut RequestContext) {
for (object, extend) in self.storage.drain() {
request_context.query.push((
format!("extend[{}]", object),
extend.into_iter().collect::<Vec<_>>().join(","),
));
}
}
}