1
0
Fork 0
mirror of https://gitlab.com/msrd0/gotham-restful.git synced 2025-02-23 13:02:28 +00:00
deprecated-gotham-restful/examples/users.rs

132 lines
2.8 KiB
Rust
Raw Normal View History

2019-09-27 17:43:01 +02:00
#[macro_use] extern crate log;
2019-09-27 15:45:54 +02:00
use fake::{faker::internet::en::Username, Fake};
use gotham::{
middleware::logger::RequestLogger,
pipeline::{new_pipeline, single::single_pipeline},
router::builder::*,
state::State
};
2019-09-27 17:43:01 +02:00
use gotham_restful::*;
2019-09-27 15:56:08 +02:00
use log::LevelFilter;
use log4rs::{
append::console::ConsoleAppender,
config::{Appender, Config, Root},
encode::pattern::PatternEncoder
};
2019-09-27 15:45:54 +02:00
2019-09-30 19:19:06 +02:00
rest_resource!{Users}
2019-09-27 15:45:54 +02:00
2019-09-30 19:19:06 +02:00
rest_struct!{User {
2019-09-27 15:45:54 +02:00
username : String
2019-09-30 19:19:06 +02:00
}}
2019-09-27 15:45:54 +02:00
2019-09-28 13:38:08 +02:00
impl ResourceReadAll<Success<Vec<User>>> for Users
2019-09-27 15:45:54 +02:00
{
2019-09-28 13:38:08 +02:00
fn read_all(_state : &mut State) -> Success<Vec<User>>
2019-09-27 15:45:54 +02:00
{
vec![Username().fake(), Username().fake()]
.into_iter()
.map(|username| User { username })
.collect::<Vec<User>>()
.into()
}
}
2019-09-28 13:38:08 +02:00
impl ResourceRead<u64, Success<User>> for Users
2019-09-27 16:36:38 +02:00
{
2019-09-28 13:38:08 +02:00
fn read(_state : &mut State, id : u64) -> Success<User>
2019-09-27 16:36:38 +02:00
{
let username : String = Username().fake();
User { username: format!("{}{}", username, id) }.into()
}
}
2019-09-28 13:38:08 +02:00
impl ResourceCreate<User, Success<()>> for Users
2019-09-27 17:43:01 +02:00
{
fn create(_state : &mut State, body : User) -> Success<()>
{
info!("Created User: {}", body.username);
().into()
}
}
2019-09-28 13:38:08 +02:00
impl ResourceUpdateAll<Vec<User>, Success<()>> for Users
2019-09-27 21:33:24 +02:00
{
2019-09-28 13:38:08 +02:00
fn update_all(_state : &mut State, body : Vec<User>) -> Success<()>
2019-09-27 21:33:24 +02:00
{
info!("Changing all Users to {:?}", body.into_iter().map(|u| u.username).collect::<Vec<String>>());
().into()
}
}
2019-09-28 13:38:08 +02:00
impl ResourceUpdate<u64, User, Success<()>> for Users
2019-09-27 21:33:24 +02:00
{
2019-09-28 13:38:08 +02:00
fn update(_state : &mut State, id : u64, body : User) -> Success<()>
2019-09-27 21:33:24 +02:00
{
info!("Change User {} to {}", id, body.username);
().into()
2019-09-29 19:19:38 +02:00
}
}
impl ResourceDeleteAll<Success<()>> for Users
{
fn delete_all(_state : &mut State) -> Success<()>
{
info!("Delete all Users");
().into()
}
}
impl ResourceDelete<u64, Success<()>> for Users
{
fn delete(_state : &mut State, id : u64) -> Success<()>
{
info!("Delete User {}", id);
().into()
2019-09-27 21:33:24 +02:00
}
}
2019-09-30 19:19:06 +02:00
// impl Resource for Users
// {
// fn setup<D : DrawResourceRoutes>(mut route : D)
// {
// route.read_all::<Self, _>();
// route.read::<Self, _, _>();
// route.create::<Self, _, _>();
// route.update_all::<Self, _, _>();
// route.update::<Self, _, _, _>();
// }
// }
2019-09-27 15:45:54 +02:00
const ADDR : &str = "127.0.0.1:18080";
fn main()
{
2019-09-27 15:56:08 +02:00
let encoder = PatternEncoder::new("{d(%Y-%m-%d %H:%M:%S%.3f %Z)} [{l}] {M} - {m}\n");
let config = Config::builder()
.appender(
Appender::builder()
.build("stdout", Box::new(
ConsoleAppender::builder()
.encoder(Box::new(encoder))
.build()
)))
.build(Root::builder().appender("stdout").build(LevelFilter::Info))
.unwrap();
log4rs::init_config(config).unwrap();
2019-09-27 15:45:54 +02:00
let logging = RequestLogger::new(log::Level::Info);
let (chain, pipelines) = single_pipeline(
new_pipeline()
.add(logging)
.build()
);
gotham::start(ADDR, build_router(chain, pipelines, |route| {
route.resource::<Users, _>("users");
}));
println!("Gotham started on {} for testing", ADDR);
}