puniyu_adapter_server 0.3.6

puniyu的server适配器
Documentation
mod api;
mod bot;
mod error;
mod server;

use actix_web::web::{self, ServiceConfig};
use async_trait::async_trait;
use puniyu_adapter::prelude::*;
use puniyu_core::Config;
use puniyu_core::logger::info;
use server::ws_handler;
use std::env;
use std::sync::Arc;

#[adapter]
struct Server;

#[async_trait]
impl AdapterBuilder for Server {
	fn name(&self) -> &'static str {
		env!("CARGO_PKG_NAME")
	}

	fn api(&self) -> AdapterApi {
		let group_api = Arc::new(api::ServerGroupApi);
		let friend_api = Arc::new(api::ServerFriendApi);
		let message_api = Arc::new(api::ServerMessageApi::default());
		let account_api = Arc::new(api::ServerAccountApi);
		AdapterApi::new(group_api, friend_api, account_api, message_api)
	}

	fn server(&self) -> Option<ServerType> {
		let server = |cfg: &mut ServiceConfig| {
			cfg.service(web::scope("/api/bot").configure(|cfg: &mut ServiceConfig| {
				cfg.route("/{bot_app}", web::get().to(ws_handler));
				cfg.route("/{bot_app}/ws", web::get().to(ws_handler));
			}));
		};
		Some(Arc::new(server))
	}

	async fn init(&self) -> Result<()> {
		let config = Config::app();
		let server = config.server();
		info!("{} v{} 初始化完成", self.name(), self.version());
		info!(
			"服务端适配器连接地址: ws://{}:{}/api/bot/{{bot_app}}ws",
			server.host(),
			server.port()
		);
		Ok(())
	}
}