stellation_backend/
props.rs1use std::marker::PhantomData;
2use std::rc::Rc;
3
4use http::HeaderMap;
5use serde::{Deserialize, Serialize};
6use yew::Properties;
7
8use crate::error::ServerAppResult;
9use crate::Request;
10
11#[derive(Properties, Debug)]
13pub struct ServerAppProps<CTX, REQ> {
14 request: Rc<REQ>,
15 _marker: PhantomData<CTX>,
16}
17
18impl<CTX, REQ> ServerAppProps<CTX, REQ>
19where
20 REQ: Request<Context = CTX>,
21{
22 pub fn path(&self) -> &str {
24 self.request.path()
25 }
26
27 pub fn queries<Q>(&self) -> ServerAppResult<Q>
29 where
30 Q: Serialize + for<'de> Deserialize<'de>,
31 {
32 self.request.queries()
33 }
34
35 pub fn raw_queries(&self) -> &str {
37 self.request.raw_queries()
38 }
39
40 pub fn headers(&self) -> &HeaderMap {
42 self.request.headers()
43 }
44
45 pub fn context(&self) -> &CTX {
47 self.request.context()
48 }
49
50 pub(crate) fn from_request(request: Rc<REQ>) -> Self {
51 Self {
52 request,
53 _marker: PhantomData,
54 }
55 }
56}
57
58impl<REQ, CTX> PartialEq for ServerAppProps<REQ, CTX> {
59 fn eq(&self, other: &Self) -> bool {
60 Rc::ptr_eq(&self.request, &other.request)
61 }
62}
63
64impl<REQ, CTX> Clone for ServerAppProps<REQ, CTX> {
65 fn clone(&self) -> Self {
66 Self {
67 request: self.request.clone(),
68 _marker: PhantomData,
69 }
70 }
71}