~repos /tide-jsx

#rust#proc-macro#jsx

git clone https://pyrossh.dev/repos/tide-jsx.git

Tide + JSX


4c95b9e6 Peter John

3 years ago
v0.3.3
Files changed (7) hide show
  1. Cargo.lock +2 -2
  2. Cargo.toml +2 -2
  3. impl/Cargo.lock +1 -1
  4. impl/Cargo.toml +1 -1
  5. impl/src/lib.rs +6 -1
  6. src/lib.rs +18 -0
  7. tests/lib.rs +9 -6
Cargo.lock CHANGED
@@ -1465,7 +1465,7 @@ dependencies = [
1465
1465
 
1466
1466
  [[package]]
1467
1467
  name = "tide-jsx"
1468
- version = "0.3.1"
1468
+ version = "0.3.2"
1469
1469
  dependencies = [
1470
1470
  "async-std",
1471
1471
  "pretty_assertions",
@@ -1476,7 +1476,7 @@ dependencies = [
1476
1476
 
1477
1477
  [[package]]
1478
1478
  name = "tide-jsx-impl"
1479
- version = "0.2.0"
1479
+ version = "0.2.1"
1480
1480
  dependencies = [
1481
1481
  "proc-macro-error",
1482
1482
  "proc-macro2",
Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "tide-jsx"
3
- version = "0.3.2"
3
+ version = "0.3.3"
4
4
  authors = ["pyrossh", "Gal Schlezinger <gal@spitfire.co.il>"]
5
5
  edition = "2021"
6
6
  description = "A safe and simple template engine with the ergonomics of JSX"
@@ -12,7 +12,7 @@ license = "MIT"
12
12
 
13
13
  [dependencies]
14
14
  tide = "0.16.0"
15
- tide-jsx-impl = { path = "impl", version = "0.2.1" }
15
+ tide-jsx-impl = { path = "impl", version = "0.2.2" }
16
16
 
17
17
  [dev-dependencies]
18
18
  pretty_assertions = "0.6"
impl/Cargo.lock CHANGED
@@ -103,7 +103,7 @@ dependencies = [
103
103
 
104
104
  [[package]]
105
105
  name = "tide-jsx-impl"
106
- version = "0.2.0"
106
+ version = "0.2.1"
107
107
  dependencies = [
108
108
  "pretty_assertions",
109
109
  "proc-macro-error",
impl/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "tide-jsx-impl"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  authors = ["pyrossh", "Gal Schlezinger <gal@spitfire.co.il>"]
5
5
  edition = "2021"
6
6
  description = "The macros needed for `render`"
impl/src/lib.rs CHANGED
@@ -35,7 +35,12 @@ pub fn rsx(input: TokenStream) -> TokenStream {
35
35
  #[proc_macro_error]
36
36
  pub fn view(input: TokenStream) -> TokenStream {
37
37
  let el = parse_macro_input!(input as Element);
38
- let result = quote! { #el.into() };
38
+ let result = quote! {
39
+ ::tide::Response::builder(StatusCode::Ok)
40
+ .content_type(::tide::http::mime::HTML)
41
+ .body(#el.render())
42
+ .build()
43
+ };
39
44
  TokenStream::from(result)
40
45
  }
41
46
 
src/lib.rs CHANGED
@@ -27,3 +27,21 @@ impl<'a, T: Render> From<SimpleElement<'a, T>> for tide::Result {
27
27
  Ok(s.into())
28
28
  }
29
29
  }
30
+
31
+ impl<T: Render> From<Fragment<T>> for tide::Response {
32
+ fn from(s: Fragment<T>) -> Self {
33
+ tide::Response::builder(StatusCode::Ok)
34
+ .content_type(mime::HTML)
35
+ .body(s.render())
36
+ .build()
37
+ }
38
+ }
39
+
40
+ impl<T: Render> From<Fragment<T>> for tide::Result {
41
+ fn from(s: Fragment<T>) -> Self {
42
+ Ok(s.into())
43
+ }
44
+ }
45
+
46
+
47
+
tests/lib.rs CHANGED
@@ -1,6 +1,6 @@
1
1
  use pretty_assertions::assert_eq;
2
2
  use tide::StatusCode;
3
- use tide_jsx::{html, rsx, view, component, Render, raw, SimpleElement};
3
+ use tide_jsx::{html, rsx, view, component, Render, raw};
4
4
  use tide_jsx::html::HTML5Doctype;
5
5
  use std::borrow::Cow;
6
6
 
@@ -151,11 +151,14 @@ fn vec() {
151
151
  )
152
152
  }
153
153
 
154
- // #[test]
154
+ #[async_std::test]
155
- // fn render_view() {
155
+ async fn render_view() -> std::io::Result<()> {
156
- // let res = view! { <p>{"hello"}</p> }.into::<tide::Result>();
156
+ let mut res = view! { <p>{"hello"}</p> };
157
- // assert_eq!(res.status(), StatusCode::Ok);
157
+ assert_eq!(res.status(), StatusCode::Ok);
158
+ assert_eq!(res.header("content-type").unwrap().as_str(), tide::http::mime::HTML.to_string());
159
+ assert_eq!(res.take_body().into_string().await.unwrap(), "<p>hello</p>");
158
- // }
160
+ Ok(())
161
+ }
159
162
 
160
163
  mod kaki {
161
164
  use crate::{html, rsx, component, HTML5Doctype, Render};