1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
use std::fmt; use bytes::Bytes; use crate::types::Text; use crate::url::telegram_api_url; #[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] pub enum RequestUrl { Method(&'static str), } impl RequestUrl { pub fn method(method: &'static str) -> Self { RequestUrl::Method(method) } pub fn url(&self, token: &str) -> String { match self { &RequestUrl::Method(method) => format!("{}bot{}/{}", telegram_api_url(), token, method), } } } #[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] pub enum Method { Get, Post, } #[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] pub enum MultipartValue { Text(Text), Path { path: Text, file_name: Option<Text> }, Data { file_name: Text, data: Bytes }, } pub type Multipart = Vec<(&'static str, MultipartValue)>; #[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] pub enum Body { Empty, Multipart(Multipart), Json(String), #[doc(hidden)] __Nonexhaustive, } impl fmt::Display for Body { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { match self { Body::Empty => "<empty body>".fmt(f), Body::Multipart(multipart) => write!(f, "{:?}", multipart), Body::Json(s) => s.fmt(f), Body::__Nonexhaustive => unreachable!(), } } } #[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] pub struct HttpRequest { pub url: RequestUrl, pub method: Method, pub body: Body, } impl HttpRequest { pub fn name(&self) -> &'static str { match self.url { RequestUrl::Method(method) => method, } } } #[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)] pub struct HttpResponse { pub body: Option<Vec<u8>>, }