use water_http::server::{ ServerConfigurations};
use water_http::{InitControllersRoot, response, WaterController};
use water_http::http::HttpSenderTrait;
InitControllersRoot! {
name:MAIN_ROOT,
holder_type:MainHolderType,
}
type MainHolderType = CHolder;
#[derive(Debug,Clone)]
pub struct CHolder {
pub user:Option<std::collections::HashMap<String,String>>,
}
fn main() {
#[cfg(feature = "debugging")]
{
let subscriber = tracing_subscriber::FmtSubscriber::builder()
.with_max_level(tracing::Level::DEBUG)
.finish();
tracing::subscriber::set_global_default(subscriber)
.expect("no thing");
}
let config = ServerConfigurations::bind_multi_ports(
vec![
8084
]
);
water_http::RunServer!(
config,
MAIN_ROOT,
MainController
);
}
WaterController! {
holder -> crate::MainHolderType,
name -> MainController,
functions -> {
"/" hello_world(context){
let mut sender = context.sender();
_= sender.send_str("Hello World").await;
}
"queries" q(context){
_= context.send_str("hello").await;
}
POST => api/auth/login => login_handler(context) async {
response!(context -> "hello from login api endpoint");
}
GET => "categories/byId/{id}" => get_cat(context) [super::get_cat_by_id]
GET -> api/v1/users/{_id} -> get_user(context) async{
super::get_response(context).await;
}
hi(context) [crate::get_response]
POST => hi_post(context) [crate::get_response]
"POST" => post(context) [crate::get_response]
POST test/post1 g(context) async {
super::get_response(context).await
}
hello(context) [super::get_response]
POST => get(context) async {
super::get_response(context).await;
}
GET info(context)[super::get_response]
#[POST,api/v2/{id}]
get_profiles(context) {
println!("v2 id is {id}");
super::get_response(context).await;
}
#[GET,api/v23]
get_profiles_v2(context) async {
super::get_response(context).await;
}
#[GET,api/v3]
get_profiles_v3(context) async [super::get_response]
#[GET,api/v4]
get_profiles_v4(context) [super::get_response]
#[GET,api/v5]
async get_profiles_v5(context) [super::get_response]
#[GET,api/6]
async get_profiles_6(context) {
super::get_response(context).await;
}
getFile(context) [super::send_files]
}
prefix -> ("hello"),
children -> ([
SecondController
])
}
WaterController! {
holder -> crate::MainHolderType,
name -> SecondController,
functions -> {
get -> version2 -> g(context){_= context.send_str("go").await;}
}
prefix -> ("version2_prefix"),
middleware -> (context {
_= context.send_str("middleware 2 stopping").await;
server::MiddlewareResult::Stop
})
}
water_http::functions_builder!{
pub async fn get_response(context) {
let method = context.method();
let path = context.path();
response!(context string -> "method is {method} while path is {path}");
}
pub async fn get_cat_by_id(context) (id){
let method = context.method();
let path = context.path();
response!(context string -> "method is {method} , id is {id} while path is {path}");
}
pub async fn send_files(context) {
response!(context download -> "./public/text/test1.txt");
}
pub async fn send_response(context){
response!(context -> "hi this is api response") ;
}
pub async fn send_file(context){
response!(context file -> "./public/text/test1.txt");
}
}