refactor: move schemas and cfg
This commit is contained in:
parent
0e6e6a14fd
commit
c2735ccf25
2 changed files with 62 additions and 57 deletions
60
src/main.rs
60
src/main.rs
|
@ -1,7 +1,8 @@
|
||||||
use std::sync::Arc;
|
mod types;
|
||||||
|
|
||||||
|
use types::*;
|
||||||
|
|
||||||
use reqwest::{Client, Url};
|
use reqwest::{Client, Url};
|
||||||
use serde::Deserialize;
|
|
||||||
use tokio::signal::unix::{signal, SignalKind};
|
use tokio::signal::unix::{signal, SignalKind};
|
||||||
|
|
||||||
const BOT_URL: &str = "https://api.telegram.org/bot";
|
const BOT_URL: &str = "https://api.telegram.org/bot";
|
||||||
|
@ -14,61 +15,6 @@ const POLL_TIMEOUT: &str = "300";
|
||||||
/// Update types to receive (filtered out on tg backend)
|
/// Update types to receive (filtered out on tg backend)
|
||||||
const POLL_TYPES: &str = r#"["message"]"#;
|
const POLL_TYPES: &str = r#"["message"]"#;
|
||||||
|
|
||||||
/// Shared mutable state object
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct State {
|
|
||||||
offset: u32,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Shared config object
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
struct Config {
|
|
||||||
client: Client,
|
|
||||||
upd_url: Arc<Url>,
|
|
||||||
send_url: Arc<Url>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Telegram Bot API response:
|
|
||||||
/// these idiots use `{ok:true,response:...}` schema
|
|
||||||
/// for some reason
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
struct TgResponse {
|
|
||||||
result: Vec<TgUpdate>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Telegram Bot API update event schema
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
struct TgUpdate {
|
|
||||||
update_id: u32,
|
|
||||||
message: Option<TgMessage>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Telegram Bot API message object schema
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
struct TgMessage {
|
|
||||||
#[serde(rename = "message_thread_id")]
|
|
||||||
thread: Option<i32>,
|
|
||||||
chat: TgChat,
|
|
||||||
text: Option<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Telegram Bot API chat object schema
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
struct TgChat {
|
|
||||||
id: i64,
|
|
||||||
// #[serde(default)]
|
|
||||||
// is_forum: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// XKCD API comic info schema
|
|
||||||
#[derive(Debug, Deserialize)]
|
|
||||||
struct XkcdInfo {
|
|
||||||
#[serde(alias = "text")] // xkcd.ru
|
|
||||||
alt: String, // xkcd.com
|
|
||||||
#[serde(alias = "image")] // xkcd.ru
|
|
||||||
img: String, // xkcd.com
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> std::io::Result<()> {
|
async fn main() -> std::io::Result<()> {
|
||||||
let cfg = {
|
let cfg = {
|
||||||
|
|
59
src/types.rs
Normal file
59
src/types.rs
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use reqwest::{Client, Url};
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
/// Shared mutable state object
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct State {
|
||||||
|
pub offset: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Shared config object
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct Config {
|
||||||
|
pub client: Client,
|
||||||
|
pub upd_url: Arc<Url>,
|
||||||
|
pub send_url: Arc<Url>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Telegram Bot API response:
|
||||||
|
/// these idiots use `{ok:true,response:...}` schema
|
||||||
|
/// for some reason
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
pub struct TgResponse {
|
||||||
|
pub result: Vec<TgUpdate>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Telegram Bot API update event schema
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
pub struct TgUpdate {
|
||||||
|
pub update_id: u32,
|
||||||
|
pub message: Option<TgMessage>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Telegram Bot API message object schema
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
pub struct TgMessage {
|
||||||
|
#[serde(rename = "message_thread_id")]
|
||||||
|
pub thread: Option<i32>,
|
||||||
|
pub chat: TgChat,
|
||||||
|
pub text: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Telegram Bot API chat object schema
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
pub struct TgChat {
|
||||||
|
pub id: i64,
|
||||||
|
// #[serde(default)]
|
||||||
|
// is_forum: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// XKCD API comic info schema
|
||||||
|
#[derive(Debug, Deserialize)]
|
||||||
|
pub struct XkcdInfo {
|
||||||
|
#[serde(alias = "text")] // xkcd.ru
|
||||||
|
pub alt: String, // xkcd.com
|
||||||
|
#[serde(alias = "image")] // xkcd.ru
|
||||||
|
pub img: String, // xkcd.com
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue