reinhardt_test/
viewsets.rs1use async_trait::async_trait;
8use reinhardt_http::{Request, Response, Result};
9use reinhardt_views::viewsets::middleware::{CompositeMiddleware, ViewSetMiddleware};
10use reinhardt_views::viewsets::{Action, ViewSet};
11use std::sync::Arc;
12
13#[derive(Debug, Clone)]
15pub struct TestViewSet {
16 basename: String,
17 login_required: bool,
18 required_permissions: Vec<String>,
19}
20
21impl TestViewSet {
22 pub fn new(basename: impl Into<String>) -> Self {
23 Self {
24 basename: basename.into(),
25 login_required: false,
26 required_permissions: Vec::new(),
27 }
28 }
29
30 pub fn with_login_required(mut self, login_required: bool) -> Self {
31 self.login_required = login_required;
32 self
33 }
34
35 pub fn with_permissions(mut self, permissions: Vec<String>) -> Self {
36 self.required_permissions = permissions;
37 self
38 }
39
40 pub fn as_view(self) -> reinhardt_views::viewsets::builder::ViewSetBuilder<Self> {
42 reinhardt_views::viewsets::builder::ViewSetBuilder::new(self)
43 }
44}
45
46#[async_trait]
47impl ViewSet for TestViewSet {
48 fn get_basename(&self) -> &str {
49 &self.basename
50 }
51
52 async fn dispatch(&self, _request: Request, _action: Action) -> Result<Response> {
53 let mut response = Response::new(hyper::StatusCode::OK);
55 response.body = "Test response".into();
56 Ok(response)
57 }
58
59 fn get_middleware(&self) -> Option<Arc<dyn ViewSetMiddleware>> {
60 if self.login_required || !self.required_permissions.is_empty() {
61 let mut composite = CompositeMiddleware::new();
62
63 if self.login_required {
64 composite = composite.with_authentication(true);
65 }
66
67 if !self.required_permissions.is_empty() {
68 composite = composite.with_permissions(self.required_permissions.clone());
69 }
70
71 Some(Arc::new(composite))
72 } else {
73 None
74 }
75 }
76
77 fn requires_login(&self) -> bool {
78 self.login_required
79 }
80
81 fn get_required_permissions(&self) -> Vec<String> {
82 self.required_permissions.clone()
83 }
84}
85
86#[derive(Debug, Clone)]
88pub struct SimpleViewSet {
89 basename: String,
90}
91
92impl SimpleViewSet {
93 pub fn new(basename: impl Into<String>) -> Self {
94 Self {
95 basename: basename.into(),
96 }
97 }
98}
99
100#[async_trait]
101impl ViewSet for SimpleViewSet {
102 fn get_basename(&self) -> &str {
103 &self.basename
104 }
105
106 async fn dispatch(&self, _request: Request, _action: Action) -> Result<Response> {
107 let mut response = Response::new(hyper::StatusCode::OK);
108 response.body = "Simple response".into();
109 Ok(response)
110 }
111}