axum-test 20.0.0

Easy E2E testing for Axum
Documentation
use crate::internals::QueryParamsStore;
use anyhow::Result;
use http::HeaderName;
use http::HeaderValue;
use serde::Serialize;

#[derive(Debug)]
pub(crate) struct ServerSharedState {
    query_params: QueryParamsStore,
    headers: Vec<(HeaderName, HeaderValue)>,
}

impl ServerSharedState {
    pub(crate) fn new() -> Self {
        Self {
            query_params: QueryParamsStore::new(),
            headers: Vec::new(),
        }
    }

    pub(crate) fn query_params(&self) -> &QueryParamsStore {
        &self.query_params
    }

    pub(crate) fn headers(&self) -> &Vec<(HeaderName, HeaderValue)> {
        &self.headers
    }

    pub(crate) fn add_query_params<V>(&mut self, query_params: V) -> Result<()>
    where
        V: Serialize,
    {
        self.query_params.add(query_params)
    }

    pub(crate) fn add_query_param<V>(&mut self, key: &str, value: V) -> Result<()>
    where
        V: Serialize,
    {
        self.query_params.add(&[(key, value)])
    }

    pub(crate) fn add_raw_query_param(&mut self, raw_value: &str) {
        self.query_params.add_raw(raw_value.to_string());
    }

    pub(crate) fn clear_query_params(&mut self) {
        self.query_params.clear();
    }

    pub(crate) fn clear_headers(&mut self) {
        self.headers.clear();
    }

    pub(crate) fn add_header(&mut self, name: HeaderName, value: HeaderValue) {
        self.headers.push((name, value));
    }
}