* Move core implementations to a standalone crate * Set up integration test skeleton in `core` * Demonstrate mock testing with query * Move Rocket api code to a standalone crate * Add mock execution * Add MyDataMyConsent in COMMUNITY.md (#889) * Add MyDataMyConsent in COMMUNITY.md * Update MyDataMyConsent description in COMMUNITY.md * Update COMMUNITY.md Chronological order * [cli] bump sea-schema to 0.9.3 (SeaQL/sea-orm#876) * Update CHNAGELOG PR links * 0.9.1 CHANGELOG * Auto discover and run all issues & examples CI (#903) * Auto discover and run all [issues] CI * Auto discover and run all examples CI * Fixup * Testing * Test [issues] * Compile prepare_mock_db() conditionally based on "mock" feature * Update workflow job to run mock test if `core` folder exists * Update Actix3 example * Fix merge conflict human error * Update usize used in paginate to u64 (PR#789) * Update sea-orm version in the Rocket example to 0.10.0 * Fix GitHub workflow to run mock test for core crates * Increase the robustness of core crate check by verifying that the `core` folder is a crate * Update Actix(4) example * Update Axum example * Update GraphQL example * Update Jsonrpsee example * Update Poem example * Update Tonic example * Cargo fmt * Update Salvo example * Update path of core/Cargo.toml in README.md * Add mock test instruction in README.md * Refactoring * Fix Rocket examples Co-authored-by: Amit Goyani <63532626+itsAmitGoyani@users.noreply.github.com> Co-authored-by: Billy Chan <ccw.billy.123@gmail.com>
52 lines
1.2 KiB
Rust
52 lines
1.2 KiB
Rust
use axum::http::{header, HeaderMap, HeaderValue, StatusCode};
|
|
use serde::{de::DeserializeOwned, Deserialize, Serialize};
|
|
use tower_cookies::{Cookie, Cookies};
|
|
|
|
#[derive(Deserialize)]
|
|
struct ValuedMessage<T> {
|
|
#[serde(rename = "_")]
|
|
value: T,
|
|
}
|
|
|
|
#[derive(Serialize)]
|
|
struct ValuedMessageRef<'a, T> {
|
|
#[serde(rename = "_")]
|
|
value: &'a T,
|
|
}
|
|
|
|
const FLASH_COOKIE_NAME: &str = "_flash";
|
|
|
|
pub fn get_flash_cookie<T>(cookies: &Cookies) -> Option<T>
|
|
where
|
|
T: DeserializeOwned,
|
|
{
|
|
cookies.get(FLASH_COOKIE_NAME).and_then(|flash_cookie| {
|
|
if let Ok(ValuedMessage::<T> { value }) = serde_json::from_str(flash_cookie.value()) {
|
|
Some(value)
|
|
} else {
|
|
None
|
|
}
|
|
})
|
|
}
|
|
|
|
pub type PostResponse = (StatusCode, HeaderMap);
|
|
|
|
pub fn post_response<T>(cookies: &mut Cookies, data: T) -> PostResponse
|
|
where
|
|
T: Serialize,
|
|
{
|
|
let valued_message_ref = ValuedMessageRef { value: &data };
|
|
|
|
let mut cookie = Cookie::new(
|
|
FLASH_COOKIE_NAME,
|
|
serde_json::to_string(&valued_message_ref).unwrap(),
|
|
);
|
|
cookie.set_path("/");
|
|
cookies.add(cookie);
|
|
|
|
let mut header = HeaderMap::new();
|
|
header.insert(header::LOCATION, HeaderValue::from_static("/"));
|
|
|
|
(StatusCode::SEE_OTHER, header)
|
|
}
|