use serde_derive::Deserialize;
use std::borrow::Cow;
use std::sync::Arc;
use crate::components::{
Comment, Content, HTPage, MaybeFillInput, MaybeFillTextArea, PostItem, ThingItem, UserLink,
};
use crate::resp_types::{
RespInstanceInfo, RespPostCommentInfo, RespPostListPost, RespThingInfo, RespUserInfo,
};
use crate::util::author_is_me;
use crate::PageBaseData;
mod communities;
mod posts;
mod r#static;
const COOKIE_AGE: u32 = 60 * 60 * 24 * 365;
#[derive(Deserialize)]
struct ReturnToParams<'a> {
return_to: Option<Cow<'a, str>>,
}
type CookieMap<'a> = std::collections::HashMap<&'a str, ginger::Cookie<'a>>;
fn get_cookie_map(src: Option<&str>) -> Result<CookieMap, ginger::ParseError> {
match src {
None => Ok(Default::default()),
Some(src) => {
use fallible_iterator::FallibleIterator;
fallible_iterator::convert(ginger::parse_cookies(src))
.map(|cookie| Ok((cookie.name, cookie)))
.collect()
}
}
}
fn get_cookie_map_for_req<'a>(
req: &'a hyper::Request<hyper::Body>,
) -> Result<CookieMap<'a>, crate::Error> {
get_cookie_map_for_headers(req.headers())
}
fn get_cookie_map_for_headers(headers: &hyper::HeaderMap) -> Result<CookieMap, crate::Error> {
get_cookie_map(get_cookies_string(headers)?).map_err(Into::<