diff --git a/cms/cms_macro/src/lib.rs b/cms/cms_macro/src/lib.rs index 166b5e2..e81eedc 100644 --- a/cms/cms_macro/src/lib.rs +++ b/cms/cms_macro/src/lib.rs @@ -309,3 +309,19 @@ fn api_route_inner(item: TokenStream) -> TokenStream { pub fn api_route(item: proc_macro::TokenStream) -> proc_macro::TokenStream { api_route_inner(TokenStream::from(item)).into() } + +#[test] +pub fn test() { + let val = quote! { + events { + title: (Text, String, String), + location: (Text, String, String), + text: (Text, String, String), + event_date: (Text, NaiveDate, DateForm), + } + }; + + let macr = api_route_inner(val); + + println!("{}", macr); +} diff --git a/cms/src/data/mod.rs b/cms/src/data/mod.rs index 4a368e9..9daefb1 100644 --- a/cms/src/data/mod.rs +++ b/cms/src/data/mod.rs @@ -1,4 +1,3 @@ -#[macro_use] use cms_macro::api_route; use rocket::{ http::{RawStr, Status}, @@ -60,179 +59,7 @@ api_route! { title: (Text, String, String), location: (Text, String, String), text: (Text, String, String), - event_date: (Text, NaiveDate, DateForm), + event_date: (Date, NaiveDate, DateForm), } } -/* -pub mod events { - - use crate::data::{defs::*, Lang}; - use crate::auth::Token; - use ::chrono::naive::*; - use ::diesel::{prelude::*, Insertable, Queryable}; - use ::rocket::{http::Status, request::Form, response::Redirect, State}; - use ::rocket_contrib::{json::Json, templates::Template}; - use ::serde::Serialize; - use ::std::{collections::*, sync::Mutex}; - - pub mod schema { - table! { - use diesel::sql_types::*; - - events (id) { - id -> Integer, - lang -> Text, - title -> Text, - location -> Text, - text -> Text, - event_date -> Date, - } - } - } - - use schema::events; - - #[derive(Debug, Clone, Queryable, Serialize)] - pub struct Get { - pub id: i32, - pub lang: String, - pub title: String, - pub location: String, - pub text: String, - pub event_date: NaiveDate, - } - - #[derive(Debug, AsChangeset, Insertable)] - #[table_name = "events"] - pub struct Create { - pub lang: String, - pub title: String, - pub location: String, - pub text: String, - pub event_date: NaiveDate, - } - - #[derive(Debug, FromForm)] - pub struct Post { - pub lang: String, - pub title: String, - pub location: String, - pub text: String, - pub event_date: DateForm, - } - - #[derive(Debug, FromForm)] - pub struct Update { - pub id: i32, - pub lang: String, - pub title: String, - pub location: String, - pub text: String, - pub event_date: DateForm, - } - - #[derive(Debug, FromForm)] - pub struct Delete { - pub id: i32, - } - - impl Post { - fn convert(self) -> Create { - Create { - lang: self.lang, - title: self.title, - location: self.location, - text: self.text, - event_date: *self.event_date, - } - } - } - - impl Update { - fn convert(self) -> Create { - Create { - lang: self.lang, - title: self.title, - location: self.location, - text: self.text, - event_date: *self.event_date, - } - } - } - - pub fn create(conn: &PgConnection, event: Create) -> Result { - diesel::insert_into(events::table) - .values(&event) - .get_result(conn) - } - - pub fn get(conn: &PgConnection, lg: Lang) -> Result, diesel::result::Error> { - use schema::events::dsl::*; - - events.filter(lang.eq(lg.0)).load::(conn) - } - - pub fn get_all(conn: &PgConnection) -> Result, diesel::result::Error> { - use schema::events::dsl::*; - events.load::(conn) - } - - pub fn update( - conn: &PgConnection, - idn: i32, - event: Create, - ) -> Result { - use schema::events::dsl::*; - diesel::update(events.find(idn)) - .set(&event) - .get_result::(conn) - } - - pub fn delete(conn: &PgConnection, idn: i32) -> Result { - use schema::events::dsl::*; - diesel::delete(events.find(idn)).execute(conn) - } - - #[get("//events")] - pub fn api(pg: State>, lang: Lang) -> Result>, Status> { - Ok(Json( - get(&*(pg.lock().unwrap()), lang).map_err(|_| Status::InternalServerError)?, - )) - } - - #[post("/events/add", data = "
")] - pub fn add(pg: State>, form: Form) -> Result { - match create(&*(pg.lock().unwrap()), form.into_inner().convert()) { - Ok(_) => Ok(Redirect::to("/ui/events")), - Err(_) => Err(Status::InternalServerError), - } - } - - #[post("/events/del", data = "")] - pub fn del(pg: State>, form: Form) -> Result { - match delete(&*(pg.lock().unwrap()), form.id) { - Ok(_) => Ok(Redirect::to("/ui/events")), - Err(_) => Err(Status::InternalServerError), - } - } - - #[post("/events/upd", data = "")] - pub fn upd(pg: State>, form: Form) -> Result { - match update(&*(pg.lock().unwrap()), form.id, form.into_inner().convert()) { - Ok(_) => Ok(Redirect::to("/ui/events")), - Err(_) => Err(Status::InternalServerError), - } - } - - #[get("/events")] - pub fn ui(_token: Token, pg: State>) -> Result { - let ctx = get_all(&*(pg.lock().unwrap())) - .map_err(|_| Status::InternalServerError)? - .iter() - .map(|x| (x.id, x.clone())) - .collect::>(); - Ok(Template::render("events", &ctx)) - } -} -*/ diff --git a/cms/src/main.rs b/cms/src/main.rs index 2205538..54ff0ae 100644 --- a/cms/src/main.rs +++ b/cms/src/main.rs @@ -1,4 +1,4 @@ -#![feature(proc_macro_hygiene, decl_macro)] +#![feature(decl_macro)] #[macro_use] extern crate diesel; #[macro_use] @@ -30,6 +30,7 @@ use std::{ }; use utils::{db_conn, exit_with_error}; + #[get("/")] fn index() -> Template { let context: HashMap<&str, &str> = [("oauth", "/oauth")].iter().cloned().collect(); diff --git a/testfile.rs b/test.rs similarity index 96% rename from testfile.rs rename to test.rs index a4993ee..56a82a8 100644 --- a/testfile.rs +++ b/test.rs @@ -1,7 +1,9 @@ pub mod events { - use super::{defs::DateForm, Lang}; - use crate::auth::Token; - use chrono::naive::NaiveDate; + use crate::{ + auth::Token, + data::{defs::*, Lang}, + }; + use chrono::naive::*; use diesel::{prelude::*, Insertable, Queryable}; use rocket::{http::Status, request::Form, response::Redirect, State}; use rocket_contrib::{json::Json, templates::Template}; @@ -35,7 +37,7 @@ pub mod events { pub title: String, pub location: String, pub text: String, - pub event_date: FormDate, + pub event_date: DateForm, } #[derive(Debug, FromForm)] pub struct Update { @@ -44,7 +46,7 @@ pub mod events { pub title: String, pub location: String, pub text: String, - pub event_date: FormDate, + pub event_date: DateForm, } #[derive(Debug, FromForm)] pub struct Delete {